Linux标准输入/输出

在Linux中执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

标准输入(stdin)的文件代码为0,标准输出(stdout)的文件代码为1,标准错误(stderr)的文件代码为2。Linux的一大特点就是标准输入/输出可以重定向。

一、输出重定向
输出重定向是指把命令(或可执行程序)的标准输出或标准错误重新定向到指定文件中。使用 > 符号。

举例:
1、
# echo “hellohello” > 1.txt
此时屏幕上无任何输出,当前目录下生成1.txt文件内容就是echo输出的语句。

二、输入重定向
输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。使用 < 符号。 举例: 1、 # wc -l < /etc/passwd 统计/etc/passwd文件的行数。wc命令的标准输入来自于/etc/passwd文件。 三、转向附加 使用输出重定向到一个文件,如果该文件已经存在的话,会先清空该文件的内容,再将信息写入。如果想保留原文件的内容,可以使用 >> 符号,起到追加的作用。

举例:
1、
# echo “test1” > 2.txt
# echo “test2” >> 2.txt
# cat 2.txt
test1
test2

四、组合使用
转向输入和转向输出组合使用实现更多的功能。

举例:
1、
# cat < 1.txt > 3.txt
指定cat命令的标准输入来自1.txt,标准输出转向到3.txt。结果就是3.txt和1.txt内容相同。

2、
# cat > 4.txt < 3.txt 指定cat命令的标准输出转向到4.txt,标准输入来自3.txt。结果就是4.txt和3.txt内容相同。 从上面两个例子看出效果是一样的,说明标准输入/输出重定向没有先后顺序。 3、<< 符号 # cat > 6.sh << EOF > #! /bin/bash
> echo “hello world!”
> EOF
说明:> 符号表示标准输出重定向到6.sh,标准输入还是来自默认的键盘。<< 符号用来定义结束符,任何字符都可以作为结束符,一般定义为EOF。这里当输入到EOF后,此次输入就结束了。 五、>/dev/null 2>&1 & 是什么意思?
常在shell脚本里看到:>/dev/null 2>&1 & 这样的语句。
说明:
1)/dev/null代表空设备。
2)>/dev/null表示将前面命令执行后的标准输出重定向,全都丢到空设备里。
3)&表示等同于的意思,2>&1表示2的输出重定向等同于1,即将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null。
4)最后一个&表示后台运行。

参考资料:
http://bolg.malu.me/html/2011/1247.html
http://jackyrong.iteye.com/blog/705927