全部博文(471)
分类: LINUX
2013-02-24 16:57:19
一、标准输入输出-重定向
一个shell 命令执行了:屏幕也是一个文件
先有一个输入:输入可以从键盘,也可以从文件得到
命令执行完成:成功了,会把成功结果输出到屏幕:standard output默认是屏幕
命令执行有错误:会把错误也输出到屏幕上面:standard error默认也是指的屏幕
这些默认的输出,输入都是linux系统内定的,我们在使用过程中,有时候并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时候我们就需要进行输出重定向了。
linux shell下常用输入输出操作符是:
1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin ->
/proc/self/fd/0 0代表:/dev/stdin
2. 标准输出 (stdout):代码为 1 ,使用 > 或
>> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout
3.
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2
2代表:/dev/stderr
1、以> (1>)改变标准输出注意:
1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。
2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。
3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。
4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。
5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行
#echo "redirect to the hellofile." 1> ./hello.txt
#cat hello.txt
redirect to the hellofile.
#cat ./hello.txt >./hello2.txt
redirect to the hellofile.
3、>>追加文件
# cat ./hello.txt >> ./hello2.txt
cat hello2.txt
redirect to the hellofile.
redirect to the hellofile.
4、2>错误重定向
#cat ./notexit.txt 2> ./err.txt
#cat err.txt
cat: ./notexit.txt: 没有那个文件或目录
然而常常是我们并不需要保存标准输出或是标准错误输出.我们可以使用UNIX中的/dev/null来忽略所有的错误输出.
# cat ./notexit.txt > dev.null 2> /dev/null
没有任何输出
or # cat ./notexit.txt &> /dev/null
管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command
1执行的结果作为command 2的输入传给command 2,例如:
$ls -s|sort -nr|pg
该命令列出当前目录中的任何文档,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的
内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。