在Linux下,当一个用户进程被建立的时候,系统会自动为该进程建立三个数据linux
流,也就是题目中所提到的这三个。那么什么是数据流呢(stream)?shell
咱们知道,一个程序要运行,须要有输入、输出,若是出错,还要能表现出自身的错误。这是就要从某个地方读入数据、将数据输出到某个地方,这就够成了数据流。编辑器
执行一个shell命令行时一般会自动打开三个标准文件,即标准输入文件(stdin),一般对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中获得输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。spa
[root@localhost ~]# cat config
将会把文件config的内容依次显示到屏幕上。可是,若是cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:.net
[root@localhost ~]# cat Hello world Hello world Bye Bye
PS:ctrl-d快捷,标准输入接收到EOF(结束)标识符命令行
[root@localhost ~]# wc
wc将等待用户告诉它统计什么,这时shell就好象死了同样,从键盘键入的全部文本都出如今屏幕上,但并无什么结果,直至按下ctrl+d,wc才将命令结果写在屏幕上。code
[root@localhost ~]# wc /etc/passwd 24 30 1061 /etc/passwd
另外一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。blog
[root@localhost ~]# wc < /etc/passwd
24 30 1061进程
输出重定向get
[root@localhost ~]# ls > directory.out
[root@localhost ~]# ls *.doc>>directory.out
[root@localhost ~]# cat directory.out
ch1.doc ch2.doc ch3.doc chimp config mail/ test/
和程序的标准输出重定向同样,程序的错误输出也能够从新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例以下面的命令:
[root@localhost ~]# ls /usr/tmp 2> err.file
可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备未来检查用
[root@localhost ~]# ls /usr/tmp &> output.file
利用重定向将命令组合在一块儿,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:
[root@localhost ~]# ls /usr/bin > /tmp/dir [root@localhost ~]# wc -w < /tmp/dir 615
统计了/usr/bin目录下的文件个数。
一、使用"2>&1" 把标准错误stderr重定向到标准输出stdout;
二、使用"&>"把标准错误stderr重定向到标准输出stdout;
[root@localhost ~]# ls /usr/bin|wc -w 615
再如:
[root@localhost ~]# cat sample.txt|grep "High"|wc -l
管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输出则是全部包含单词High的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件的内容以下:
[root@localhost ~]# cd `pwd`
该命令将pwd命令列出的目录做为cd命令的参数,结果仍然是停留在当前目录下