输入输出重定向:把原本要从键盘获得的输入重定向为从文件或其他流获得;将原本要输出到屏幕上的输出流重定向为输出到文件或其他流中。
输入输出重定向涉及到三种流:
- 标准输入流(
stdin
,文件描述符0
) - 标准输出流(
stdout
,文件描述符1
) - 标准错误输出流(
stderr
,文件描述符2
)
重定向输出流
使用 >
和 >>
可以重定向输出流,区别是,当目标文件已存在,>
会用新内容覆盖原文件内容(相当于 C 语言文件打开方式中的 w
方式),而 >>
则是将新内容追加到原文件尾部(相当于 a
方式)。
将标准输出重定向到文件中:
$ command 1> filename
$ command 1>> filename
$ command >> filename # 不写 1 或者 2,也是重定向标准输出
将标准错误输出重定向到文件中:
$ command 2> filename
$ command 2>> filename
将所有输出重定向到文件中:
$ command &>> filename
标准输出和标准错误输出重定向到不同文件中:
$ command 1>> filename1 2>> filename2
标准输出和标准错误输出重定向到一个文件中,但分离开:
$ command 1> filename 2> filename
标准输出和标准错误输出的相互重定向:
$ command 1>&2 # 将标准输出重定向到标准错误输出
$ command 2>&1 # 将标准错误输出重定向到标准输出
注:如果有多个重定向,上面两种重定向要放到后面。例如:
$ find / -name abcd 1>>/dev/null 2>&1
输出流重定向的常见用途:
快速向某个文件写入少量内容,例如:
$ echo "export JAVA_HOME=/usr/local/jdk1.8.0" >> /etc/profile
保存命令的执行结果。
- 丢弃命令的错误输出,如:
/dev/null
是一个字符设备文件,它就像一个黑洞,重定向到该文件的内容都会彻底消失。$ find / -name xxx 2>> /dev/null