管道及重定向
1、重定向
在Linux中有时我们在命令的执行过程中,不想将执行结果显示到屏幕上,或者将其结果输出到其他位置 这时就需要重定向来解决这个问题了 首先了解一下Linux中的3种I/O设备: 0:标准输入 1:标准输出 2:标准错误输出 输出重定向:> >> 输入重定向: < << >:将标准输出重定向到文件 echo "Hello" > /app/test.tab 2>:将标准错误输出重定向到文件 ls /etc /error > /app/test.tab 2> /app/error.tab &>:将所有输出重定向到文件 ls /etc /error &> /app/test.tab >>:将标准输出追加重定向到文件 2>>:将标准错误输出追加到文件 &>>:将所有标准输出追加到文件 <:标准输入重定向(单行重定向) <<:(多行重定向)
eg:有些命令能够通过输入重定向接受来自文件的输入 wc -l < /etc/motd 统计motd文件的行数 mail -s "help" root << eof 此命令是给root用户发送一个邮件,其中指定多行重定向的终止符eof(也可是其它)来 指定退出时的终止符 >please help me >thanks >eof
2、管道
符号 "|" ,用来连接命令 CMD1 | CMD2 | CMD3 | … (1)将CMD1的标准输出传给CMD2,CMD2的标准输出输出再发给CMD3 (2)默认情况下标准错误输出不能通过管道转发,通过2>&1或|&来实现
eg: [root@Centos6 ~]#cat /etc/issue /error 2>&1 | sort cat: /error: No such file or directory CentOS release 6.9 (Final) Kernel \r on an \m
(3)最后一个命令会在当前shell进程的子shell进程中执行
3、”-“符号
在管道中"-"可以用来代替之前命令标准输出
eg: tar -cvf - /app | tar -xvf - 将/app下的文件打包,打包后不记录到文件里,而是传到标准输出在经管道传给后面的 解包命令
4、tee 命令 重定向到多个目标
有时我们在使用管道时需要将不同阶段的数据输出到屏幕上,而还要将数据向下传递,我们就需要用到tee命令
eg: [root@Centos6 ~]#ls | tee | tr "a-z" "A-Z"
原创文章,作者:M25_ymd,如若转载,请注明出处:http://www.178linux.com/82651