• 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
  • 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
  • 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

输入重定向中用到的符号及其作用:

  • 命令 < 文件 将文件作为命令的标准输入
  • 命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
  • 命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

输出重定向中用到的符号及其作用:

  • 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
  • 命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
  • 命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
  • 命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
  • 命令 >> 文件 2>&1命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

对于重定向中的标准输出模式,可以省略文件描述符1不写,而错误输出模式的文件描述符2是必须要写的。

重定向正确输出

  1. cat /etc/yum.repos.d/CentOS-Base.repo > a.txt
  2. cat a.txt
  3. echo "Hello world" > a.txt
  4. $ cat a.txt
  5. Hello world

> 符号会覆盖掉file文件原有的内容, 要想向file文件追加内容,使用“ >> ”符号

添加到黑洞区:

  1. echo hello >/dev/null
  2. $ cd /dev/null
  3. -bash: cd: /dev/null: 不是目录
  4. cat /dev/null

追加正确输出

echo "Welcome to xiaoyulive.top" >> a.txt
$ cat a.txt
Hello world
Welcome to xiaoyulive.top

重定向错误输出

find /etc -name passwd  2> file

追加错误输出

find /etc -name passwd  2>> file

重定向所有输出

find /etc -name passwd  &> file

追加所有输出

find /etc -name passwd  &>> file

“改邪归正”输出

所谓”改邪归正”,即,2>&1,将标准错误输出2重定向到标准输出中,2>就是标准错误输出,&是为了让bash将1解释成标准输出而不是文件名字为1的文件。

输入重定向

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把文件直接导入到命令中。接下来使用输入重定向把readme.txt文件导入给wc -l命令,统计一下文件中的内容行数。

$ wc -l < readme.txt
2

上述命令实际上等同于 cat readme.txt | wc -l 的管道符命令组合。

应用

交互式写文件

[root@node1 ~]# cat > hello.txt <<EOF
> node1
> node2
> node3
> EOF
[root@node1 ~]# cat hello.txt
node1
node2
node3

下面这条自造的命令就结合使用了mail邮件命令与输入重定向的分界符,其目的是让用户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。

$ mail -s "Readme" root@linuxprobe.com << over
> I think linux is very practical
> I hope to learn more
> can you teach me ?
> over