在 Linux 系统中:
标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕。
Linux Shell 环境中用 "" 表示标准输出
0、1、2分别表示: 标准输入,标准输出,标准错误信息输出
如 2>a.txt 表示将错误信息输出到文件a.txt中 。
还可以在这三个标准输入、输出之间实现重定向,
如将错误信息重定向到标准输出,可以用 2>&1 来实现。
***************************************************************************
常用文件重定向命令
command > filename 把标准输出重定向到一个新文件中
command 1 > fielname 把标准输出重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command &> filename 把标准输出和标准错误一起重定向到一个文件中
command >& filename 把标准输出和标准错误一起重定向到一个文件中
"&"在这里代表标准输出和标准错误,这里无论是正常输出还是错误信息都写到filename文件中。
command >> filename 把标准输出重定向到一个文件中(追加)
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command command >&m 把标准输出重定向到文件描述符m中
command command >&- 关闭标准输出
command ncommand n>&- 表示将 n 号输出关闭
***************************************************************************
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。
这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
如果想把正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null
还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1
注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,
由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null 。
>log 表示把标准输出重新定向到文件log中
>& log 表示把标准输出和错误输出产生的任何信息都定向到文件log中,相当于 >log 2>&1
>>log 将命令执行的结果追加到指定的文件log中。
>>log 2>&1 将命令执行时屏幕上所产生的任何信息追加到指定的文件log中。
将所有的输出都存储到文件all_result中:
$ find /home -name lost* > all_result 2>& 1
先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 all_result 这个文件中。
还有一种简便的写法如下:
$ find /home -name lost* >& all_result
看看以下命令会有什么结果?
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result[@more@]