Linux中有三种标准输入输出:
- STDIN 对应0 标准输入,默认从键盘读取信息
- STDOUT 对应1 标准输出,默认将输出结果输出至终端
- STDERR 对应2 标准的错误信息,默认也会显示在终端
举例说明:
1. 执行 find /etc -name passwd 命令,默认会将命令的执行结果(STDOUT)与错误信息(STDERR)都输出至终端
2. 执行cat xxx 1>find.out 2>find.err 命令的执行结果输出正确的输出被1接收,错误的信息被2接收
3. 若要将所有的输出及错误信息都显示出来,可以用&表示全部1和2的信息
4. 将错误的信息重新定向到输出,将2的结果重定向至1中,就有了”2>1”,按照该写法,系统会默认将错误的信息(STDERR)2重定向到一个名字为1的文件中
5. 加&进行区分, 2>&1,将错误信息重定向至标准输出
6. 输入输出重定向应用
问题:为何2>&1要写在后面?
command > file 2>&1
command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中
command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端
参考资料:
1. http://blog.csdn.net/huangfei711/article/details/51059310
2. http://blog.csdn.net/w417318472/article/details/21398699