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
将标准错误重定向到标准输出。