Shell中的重定向和管道

1.重定向

1.1标准输入重定向

标准输入 用数字“0”表示 默认接受来自键盘的输入
“<” 把输入重定向给程序和命令

[[email protected] ~]#cat a.txt  #查看文件内容
total 4
-rw-r--r--. 1 root root 201 May 29 12:47 acl.txt #原文件内容
drwxr-s---+ 2 root g1     6 May 29 12:34 dir
[[email protected] ~]#tr 'a-z' 'A-Z' < a.txt > d.txt 把a.txt里的文件重定向到tr命令
在把输出结果重定向到d.txt
[[email protected] ~]#cat d.txt  #查看d.txt文件
TOTAL 4    #原来a.txt里的内容全部被tr命令变成大写再重定向到d.txt文件中
-RW-R--R--. 1 ROOT ROOT 201 MAY 29 12:47 ACL.TXT
DRWXR-S---+ 2 ROOT G1     6 MAY 29 12:34 DIR

1.2 标准输出重定向

标准输出 用数字“1”表示 默认输出到终端窗口

“>”把标准输出定重向到文件或者设备

[[email protected] ~]#ls /home/ > a.txt  #把ls命令的标准输出重定向到 a.txt 文件中
[[email protected] ~]#cat a.txt          #查看a.txt文件的内容
admin
alece
tom

但是“>”重定向到文件会覆盖文件中原有的内容

[[email protected] ~]#ls /app/ > a.txt #把/app目录下的文件列表重定向到a.txt
[[email protected] ~]#cat a.txt        #再来看一下a.txt文件
acl.txt  #里面的内容已经被覆盖了
dir
[[email protected] ~]#

所以如果我们要往文件里添加内容不覆盖的话可以用“>>”把标准输出重定向追加到文件中

[[email protected] ~]#ll /root/ >> a.txt 
[[email protected] ~]#cat a.txt 
acl.txt  
dir            #这两行a.txt文件中原有的内容
total 16
-rw-------. 1 root root 1892 May 24 17:48 anaconda-ks.cfg
-rw-r--r--. 1 root root   12 May 29 14:51 a.txt
drwxr-xr-x. 2 root root    6 May 24 18:08 Desktop
drwxr-xr-x. 2 root root    6 May 24 18:08 Documents
drwxr-xr-x. 2 root root    6 May 24 18:08 Downloads
-rw-r--r--. 1 root root 1923 May 24 18:08 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 May 24 18:08 Music
drwxr-xr-x. 2 root root    6 May 24 18:08 Pictures
drwxr-xr-x. 2 root root    6 May 24 18:08 Public
drwxr-xr-x. 2 root root    6 May 24 18:08 Templates
drwxr-xr-x. 2 root root    6 May 24 18:08 Videos 
#这是a.txt文件中原有的内容这些是我们把/root目录下的文件列表追加进来的内容
[[email protected] ~]#

1.3标准错误重定向

标准错误 用数字“2”表示 默认输出到终端窗口

“2>”把标准错误重定向到文件或者设备

[[email protected] ~]#ls /aaa 2> b.txt  #把标准错误重定向到b.txt文件中
[[email protected] ~]#cat b.txt  #查看b.txt文件中的内容
ls: cannot access /aaa: No such file or directory #提示找不到/aaa目录

“2>>”将一个标准错误输出重定向追加到文件中

[[email protected] ~]#ls /bbb 2>> b.txt #把ls /bbb的错误输出重定向追加到b.txt文件中
[[email protected] ~]#cat b.txt #查看追加结果
ls: cannot access /aaa: No such file or directory #这是上一条/aaa的报错信息
ls: cannot access /bbb: No such file or directory #这是这一次追加的信息

1.4

我们想把标准输出和标准错误重定向到一个文件或者设备的时候就可以用“&>”把所有的信息都重定向到一个地方

[[email protected] ~]#ls /app/  /ccc &> c.txt #查看/app和/ccc目录,把所有的输出都重定向到c.txt文件中
[[email protected] ~]#cat c.txt  #查看c.txt文件中的结果
ls: cannot access /ccc: No such file or directory #这是/ccc的报错提示标准错误
/app/: #这是标准输出
acl.txt
dir

“>&”这个也可以把所有输出都重定向到一个文件或者设备和上一条命令的效果一样

[[email protected] ~]#ls /app/  /ccc >& c.txt

“> 2>&1”这个也可以实现同样的效果

[[email protected] ~]#ls /app/ /cc > c.txt 2>&1 
[[email protected] ~]#cat c.txt 
ls: cannot access /cc: No such file or directory
/app/:
acl.txt
dir

如果要追加内容可以用“>> 2>&1”来实现

[[email protected] ~]#ls /home  /c  >> c.txt 2>&1 #查看/home和/c目录下的文件列表,把所有输出重定向到c.txt
[[email protected] ~]#cat c.txt 
ls: cannot access /cc: No such file or directory  #这是几行是原有的内容
/app/:
acl.txt
dir 
ls: cannot access /c: No such file or directory #这个几行是我们刚刚追加进来的内容
/home:
admin
alece
tom  

“&>>”用这个字符也可以把所有的输出追加到文件

[[email protected] ~]#ls /home  /d  &>> c.txt
[[email protected] ~]#cat c.txt 
ls: cannot access /c: No such file or directory #原来的内容
/home:
admin
alece
tom 
ls: cannot access /d: No such file or directory #新追加的内容
/home:
admin
alece
tom 

2.管道

管道符使用“|”来表示,用来把命令连接起来。

[[email protected] ~]#ls /app/ | tr 'a-z' 'A-Z' #查看/app下的文件列表,再输出结果用管道传给tr命令处理
ACL.TXT #显示在终端的结果变成了大写字母
DIR

“|”管道符可以用来保存不同阶段的输出信息,可以同时查看和保存输出信息

你可能感兴趣的:(Shell中的重定向和管道)