标签: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重定向和管道
原文地址:http://563349612.blog.51cto.com/11096134/1832144