linux命令详解(9)重定向 stdin 和 stdout使用详解

2014-12-5 19:39:14     15 人阅读    

  在shell里键入命令,命令会一交互方式运行,最终进程会有两个输出流:用于命令正常输出的stdout和用户错误输出的stderr,在下面的示例中,找不到/tmpp时,stderr上会输出一条出错消息,stdout上则输出/tmp目录的内容(找到该目录)

[root@iZ258ostsiaZ ~]# ls /tmp /tmpp
ls: cannot access /tmpp: No such file or directory
/tmp:
hsperfdata_root  ssh-CNSVC19257

默认情况下,所有的输出都会输出在屏幕上,如果想要将输出的结果放到某个指定文件中,可以使用 > (标准流输出)符号,
   标准输出流  使用 > 符号,文本覆盖
   标准输出流  使用 >> 符号,文本追加
   标准错误输出流 使用 2> 符号
 
例如:

[root@iZ258ostsiaZ ~]# ls /tmp /tmpp > out.txt
ls: cannot access /tmpp: No such file or directory

这个时候查看out.txt文件 ,文件里面的内容是 ls: cannot access /tmpp: No such file or directory
同样的,因为没有处理错误,屏幕上也输出的 错误信息

[root@iZ258ostsiaZ ~]# ls /tmp /tmpp 2>errors.txt > out.txt

上面的命令是 把 /tmp /tmpp 目录下面的内容输出到 out.txt中,如果命令的执行过程中出现错误,则把错误细信息输出到errors.txt中
通过列目录查看上面命令的输出,可以看到 out.txt  和 errors.txt 文件

[root@iZ258ostsiaZ ~]# ls -rlt
total 32
-rw-r--r-- 1 root root   29 Nov  7 15:20 echo
-rw-r--r-- 1 root root   37 Nov 23 10:01 out.txt
-rw-r--r-- 1 root root   51 Nov 23 10:01 errors.txt
[root@iZ258ostsiaZ ~]# more out.txt
/tmp:
hsperfdata_root
ssh-CNSVC19257
[root@iZ258ostsiaZ ~]# 
[root@iZ258ostsiaZ ~]# more errors.txt
ls: cannot access /tmpp: No such file or directory

如果不想看到某个错误输出结果,可以通过重定向到/dev/null 中进行处理
[root@iZ258ostsiaZ ~]# ls /tmpl2 2> /dev/null

上面例子:我的系统中没有 /tmpl2 文件,但是通过上面的命令后 ,并没有任何的输出结果...

文本追加命令测试:

[root@iZ258ostsiaZ ~]# ls /tmp >> out.txt
[root@iZ258ostsiaZ ~]# ls /tmp >> out.txt
[root@iZ258ostsiaZ ~]# ls /tmp >> out.txt
[root@iZ258ostsiaZ ~]# more out.txt
/tmp:
hsperfdata_root
ssh-CNSVC19257
hsperfdata_root
ssh-CNSVC19257
hsperfdata_root
ssh-CNSVC19257
hsperfdata_root
ssh-CNSVC19257

通过测试,out.txt中不断的追加 /tmp目录的信息...

上面说的都是 命令行的输出,既然有输出那么可能有输入,输出使用的是 >  符号,那么相对应的输入应该使用 < 符号,简单吧..

例如:

[root@iZ258ostsiaZ ~]# mail chris < /etc/hosts
[root@iZ258ostsiaZ ~]# send-mail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
xxx

上面的命令 是把 /etc/hosts 内容通过mail 发送给用户 chris ...简单吧..


在日常的linux操作中,输出 > 符号使用的非常多,比如日志输出等等,基本都是以追加的方式吸入到文件中..

本文是作者在读取《linux命令详解手册》之后的随手笔记,如果大家喜欢这本书,可以去购买


原文地址:http://www.itmmd.com/201412/261.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

linux命令详解(10)linux 管道(pipe)命令详解.   上一篇
下一篇  android学习笔记(10)android中自定义View

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!