Linux 输入输出与重定向
2014-04-29 by dongnan
开始之前
标准输入
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
为什么会有一个专门针对错误的特殊文件?
这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。 如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)。
文件重定向
command > filename:把把标准输出重定向到一个新文件中。command >> filename:把标准输出重定向到一个文件中 (追加)。command 1 > fielname:把标准输出重定向到一个文件中。command > filename 2>&1:把标准输出和标准错误一起重定向到一个文件中。command 2 > filename:把标准错误重定向到一个文件中。command 2 >> filename:把标准输出重定向到一个文件中 (追加)。command >> filename 2>&1:把标准输出和标准错误一起重定向到一个文件中 (追加)。command < filename >filename2:把command命令以filename文件作为标准输入,以filename 2文件作为标准输出。command < filename:把command命令以filename文件作为标准输入。command << delimiter:把从标准输入中读入,直至遇到 delimiter分界符。command <&m:把把文件描述符 m作为标准输入。 -command >&m:把把标准输出重定向到文件描述符m中。command <&-:把关闭标准输入。
举个栗子
0、1、2是标准输入、标准输出和标准错误:
标准输入重定向
cat 0</etc/passwd
cat </etc/passwd
这两个命令等价,日常工作中常使用第2个命令。
标准输出重定向
cat /root/doc 1> newdoc
cat /root/doc > newdoc
这两个命令等价,日常工作中常使用第2个命令。
标准错误输出重定向
cat /root/ 2>error
2>error 将标准错误重定向到文件error文件。
标准输出和标准错误一起重定向到一个文件
apachectl -l > file 2>&1
2 >&1 将标准错误重定向到标准输出。