输入输出重定向:把原本要从键盘获得的输入重定向为从文件或其他流获得;将原本要输出到屏幕上的输出流重定向为输出到文件或其他流中。
输入输出重定向涉及到三种流:
- 标准输入流(
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
