码迷,mamicode.com
首页 > 其他好文 > 详细

I/O重定向和管道

时间:2016-07-30 22:49:53      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:i/o重定向和管道

0表示标准输入---默认接受来自键盘的输入

1表示标准输出---默认输出到终端窗口

2表示错误输出---默认输出到终端窗口


> 默认为标准输出重定向,与 1> 相同

>> 追加标准输出重定向

2>&1 把错误输出重定向到标准输出

&> file 把标准输出和错误输都重定向到文件file中


举例:

> :覆盖重定向,会清空原文件内容

[root@centos7 ~]# who > /testdir/ls.log

[root@centos7 ~]# cat /testdir/ls.log 

root     pts/0        2016-07-30 12:12 (192.168.32.1)

>>: 追加重定向,新内容会追加至原文件内容的最末尾

[root@centos7 ~]# uname -r >> /testdir/ls.log 

[root@centos7 ~]# !cat

cat /testdir/ls.log 

root     pts/0        2016-07-30 12:12 (192.168.32.1)

3.10.0-327.el7.x86_64


2>: 错误输出重定向:

[root@centos7 ~]# asfdsfds 2> /testdir/ls.log 

[root@centos7 ~]# cat /testdir/ls.log 

-bash: asfdsfds: command not found

2>>: 追加错误输出重定向:

[root@centos7 ~]# asfdsfds 2>> /testdir/ls.log

[root@centos7 ~]# cat /testdir/ls.log 

-bash: asfdsfds: command not found

-bash: asfdsfds: command not found


#/testdir目录存在,/abcd目录不存在,将标准输出重定向到/testdir/f1, 标准错误输出重定向到/testdir/f2

[root@centos7 ~]# ls /testdir/ /abcd  > /testdir/f1 2> /testdir/f2   

[root@centos7 ~]# cd /testdir/

[root@centos7 testdir]# ls

f1  f2  ls.log

[root@centos7 testdir]# cat f1 

/testdir/:

f1

f2

ls.log

[root@centos7 testdir]# cat f2 

ls: cannot access /abcd: No such file or directory

追加重定向:

[root@centos7 ~]# ls /testdir/ /abcd  >> /testdir/f1 2>> /testdir/f2


#将所有输出都重定向到一个文件:

[root@centos7 ~]# ls /testdir/ /abcd &> /testdir/all.log

[root@centos7 ~]# cat /testdir/all.log 

ls: cannot access /abcd: No such file or directory

/testdir/:

all.log

f1

f2

ls.log

或者[root@centos7 ~]# ls /testdir/ /abcd > /testdir/all.log 2>&1

追加重定向:

[root@centos7 ~]# ls /testdir/ /abcd &>> /testdir/all.log

或者[root@centos7 ~]# ls /testdir/ /abcd >> /testdir/all.log 2>&1


多条命令执行结果标准输出到一个文件:

[root@centos7 ~]# (pwd;ls) > /testdir/all.log 

[root@centos7 ~]# cat /testdir/all.log

/root

123

1.txt


标准输入重定向:

例1:

[root@centos7 ~]# mail -s hello user1 回车输入以下信息(自定义)

how are you 

hello123

.

EOT

##.表示结束,hello表示邮件主题,user1是接收者,然后切入到user1用户,运行mail查看

例2:

[root@centos7 ~]# vim 1.txt 编辑1.txt,输入要表达的内容

[root@centos7 ~]# mail -s hello user1 < 1.txt

然后切入到user1用户,运行mail查看


多行输入重定向输出到一个文件:输入结束字符才会写入到文件中去

例1:

[root@centos7 ~]# cat << EOF > f2

> aaa

> bbb

> EOF#结束

[root@centos7 ~]# cat f2

aaa

bbb

例2:

[root@centos7 ~]# mail -s Hi user1 << EOF

> Hello

> EOF

然后切入到user1用户,运行mail查看



tr命令:转换和删除字符

例1:

[root@centos7 ~]# tr ‘a-z‘ ‘A-Z‘ < /etc/issue > f1  #将/etc/issuse的小写字母换成大写,并保存至f1

例2:

[root@centos7 ~]# cat 1.txt 

a

b

c

[root@centos7 ~]# hexdump -c 1.txt 

0000000   a  \n   b  \n   c  \n                                        

0000006

[root@centos7 ~]# tr -d ‘\n‘ < 1.txt  #删除回车换行符\n

abc[root@centos7 ~]# 

例3:

[root@centos7 ~]# cat f2

a b c

[root@centos7 ~]# tr -c ‘a‘ ‘x‘ < f2  #取字符集的补集

axxxxx[root@centos7 ~]# 



管道符|:

把前一个命令的标准输出当做后一个命令的标准输入

例1:

[root@centos7 ~]# echo $USER |tr ‘a-z‘ ‘A-Z‘

ROOT

例2:

[root@centos7 ~]# cat 1.txt |mail -s Hi user1

然后切入到user1用户,运行mail查看

例3:

前一个命令不管成功与否,都可以用管道来处理

[root@centos7 ~]# ls /err |tr ‘a-z‘ ‘A-Z‘ 

ls: cannot access /err: No such file or directory  #执行不成功

[root@centos7 ~]# ls /err 2>&1 |tr ‘a-z‘ ‘A-Z‘

LS: CANNOT ACCESS /ERR: NO SUCH FILE OR DIRECTORY

[root@centos7 ~]# ls /err |& tr ‘a-z‘ ‘A-Z‘    #2>&1和|&效果一样

LS: CANNOT ACCESS /ERR: NO SUCH FILE OR DIRECTORY

[root@centos7 ~]# ls |& tr ‘a-z‘ ‘A-Z‘     #执行成功

1.TXT

2.TXT

例4:

[root@centos7 ~]# safdsfdsf |& tr ‘a-z‘ ‘A-Z‘ |tr -d ‘AD‘

-BSH: SFSFSF: COMMN NOT FOUN


tee命令:输出到屏幕并保存至指定文件中

[root@centos7 ~]# who |tee f4

root     pts/0        2016-07-30 12:12 (192.168.32.1)

root     pts/1        2016-07-30 12:15 (192.168.32.1)

[root@centos7 ~]# cat f4

root     pts/0        2016-07-30 12:12 (192.168.32.1)

root     pts/1        2016-07-30 12:15 (192.168.32.1)

还可以继续做处理

[root@centos7 ~]# who |tee f4 |tr -d "\n"



管道命令与重定向区别:

   左边的命令应该有标准输出 | 右边的命令应该接受标准输入

   左边的命令应该有标准输出 > 右边只能是文件

   左边的命令应该需要标准输入 < 右边只能是文件


本文出自 “每天进步一点点” 博客,请务必保留此出处http://563349612.blog.51cto.com/11096134/1832144

I/O重定向和管道

标签:i/o重定向和管道

原文地址:http://563349612.blog.51cto.com/11096134/1832144

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!