首页 > 代码库 > 八、I/O重定向与管道

八、I/O重定向与管道

系统设定:

  标准输入 standard input(stdin):代码为0 ,使用< 或<<

  标准输出 standard output(stdout):代码为1,使用>或>>

  标准错误输出 standard error output(stderr):代码为2,使用 2>或2>>


标准输入<  <<:

< :就是将原本需要由键盘输入的数据,改由文本内容来取代,输入重定向

<< :结束的输入字符


标准输出 > >> :

[root@www ~]# ls -l >rootfile

[root@www ~]# cat rootfile

总用量 68

-rw-------. 1 root root  1454  8月  7 00:09 anaconda-ks.cfg

-rw-r--r--. 1 root root 45182  8月  7 00:09 install.log

-rw-r--r--. 1 root root  9922  8月  7 00:07 install.log.syslog

-rw-r--r--. 1 root root     0 10月 31 21:26 rootfile

-rw-r--r--. 1 root root     0 10月 11 20:08 text.txt

在输出重定向时,如果重定向的文本部存在(如 rootfile)那么系统会自动创建,但如果这个文本存在且有数据,那么系统会自动将这个文本清空,然后再将数据写入。

使用[>]会将文本原来的数据覆盖,使用[>>]不会覆盖数据,只是累加。


set -C: if set ,disallow existing regular files to be overwritten by redirection of output.(禁止对已存在的文件使用覆盖重定向)

     此时要强制覆盖输出的话,则使用 >|

set +C:关闭上述功能


标准错误输出 2> 2>> :

2> :以覆盖的方法将[错误的数据]输出到指定的文本上

2>> :以累加的方法将[错误的数据]输出到指定的文本上

[root@www ~]# cat text.txt text1 >stdout 2>stderr

[root@www ~]# cat stdout 

hello,

kkkkkkk

[root@www ~]# cat stderr 

cat: text1: 没有那个文件或目录

可以将stdout与stderr重定向到不同的文本上

[root@www ~]# cat text.txt text &>std

[root@www ~]# cat std

hello,

kkkkkkk

cat: text: 没有那个文件或目录

可以使用&> 将标准输出与标准错误输出重定向到同一个文本上


tee:read from standard input and write to standard output and files(可以将输出数据显示到屏幕和文本中)

tee[option]...[file]...

-a,append:append to given FILEs,do not overwrite(以累加的方式将数据加入file中)

[root@www ~]# ls |tee 1

anaconda-ks.cfg

install.log

install.log.syslog

[root@www ~]# cat 1

anaconda-ks.cfg

install.log

install.log.syslog


管道:前一个命令的输出,作为后一个命令的输入

命令1|命令2|命令3|。。。。。



地址总线:内存寻址

数据总线:传输数据

控制总线:控制指令

八、I/O重定向与管道