一、标准输入输出含义

标准输入——键盘(/dev/stdin),标准正确输出——显示器(/dev/stdout),标准错误输出——显示器(/dev/stderr)。 std:stander

因为设备名不好记,所以采取文件描述符(数字)来表示。

标准输入——0,标准正确输出——1,标准错误输出——2

二、输出重定向

简单理解:输出本来都是输出到显示器上,但输出重定向可以指定输出到其他地方,比如输出到文件中。

最常见的应用:命令定时执行,需要把命令结果保存到文件里,不然之后只知道执行了,不知道执行结果是什么,有没有出错

1、不常用:正确命令与错误命令的输出分开保存

这种分开保存的方式在实际中用得不多,因为分开保存的前提是已经知道这个命令是对的还是错的,那既然知道命令是错的,还执行它干什么呢?更常用的是下一节的保存在同一文件中

标准输出重定向 格式:

  • [命令] > [文件] : 以覆盖的方式,把命令的正确结果输出到指定文件
  • [命令] >> [文件] : 以追加的方式, 把命令d额正确结果输出到指定文件

标准错误输出重定向 格式:

  • [错误命令] 2> 文件 : 以覆盖的方式,把命令的错误结果输出到指定文件
  • [错误命令] 2>> 文件 :以追加的方式, 把命令的错误结果输出到指定文件

注:

  1. 不是所有命令都能重定向,有输出的命令才可以。比如cd命令没有输出,不能重定向;ls命令有输出,能重定向。
  2. 错误命令时,2和>以及>>之间不能有空格。

比如:

  • 把ls输出的结果保存到名为abc文件中:ls > abc
用vim查看abc文件,可以看到ls的结果确实输出到里面了
  • 再把今天的日期(date命令)追加保存到abc文件中:date >> abc
  • 如果想保存一个错误的命令到文件中,比如qwer命令。直接用"qwer > abc"可以看到失败了,因为错误命令要在后面加一个 2,用qwer 2> abc

2、常用:正确输出和错误输出保存同一文件中

格式:

  • [命令] &> [文件名] :以覆盖的方式,把正确输出和错误输出保存在同一个文件中
  • [命令] &>> [文件名] :以追加的方式,把正确输出和错误输出保存在同一个文件中
  • [命令] >> [文件名1] 2>> [文件名2] :正确输出保存到文件1,错误输出保存到文件2中

注:还有 [命令] > [文件名] 2>&1 以及 [命令] >> [文件名] 2>&1 两种格式,效果跟上面的前两个一样,上面的最简单,最好记,也最常用

比如:把正确命令ls和错误命令qwer的执行结果都保存到abc文件中:ls &>> abcqwer &>> abc

扩展:使用 [命令名] &> /dev/null —— 这个命令能实现执行该命令,但不管输出结果是正确的还是错误的,都不显示,结果不保存在任何文件。作用:写shell脚本的时候,有的命令要执行,但我们不需要显示它的输出结果,所以这个命令在写shell脚本中很常用

三、输入重定向(不常用,了解即可)

较输出重定向,输入重定向比较不常用。一般只用在给源码包打补丁的时候

输入重定向相关的命令:wc [选项] [文件名]

选项:

  • -c :统计字节数
  • -w : 统计单词数
  • -l : 统计行数

按 Ctrl + D 退出该模式

作用:统计。把输入的内容重定向为这个命令的标准输入,来统计输入的信息。

比如:

下面的结果依次为:输入的 行数,单词数,字符数(包括空格)

输入重定向符号:< [文件名]

比如:wc支持我们直接写文本,但如果我们要把已有文件的内容用wc统计,就需要用输入重定向