美文网首页
Day12 重定向 管道

Day12 重定向 管道

作者: 梦幻新阳 | 来源:发表于2019-08-09 16:30 被阅读0次

重定向

1.什么是重定向
将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
2.为何要使用重定向

1.当屏幕输出的信息很重要,而且希望保存重要的信息时;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令, 例如定时任务的执行结果,希望可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
5.错误日志与正确日志需要分别输出至不同的文件保存时;

3.当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出
进程是使用文件描述符(file descriptors)来管理打开的文件
4.标准输入输出 错误\ 与重定向之间有什么关系?
重定向就是用来改变标准输出 或者标准错误输出的一个指向.

1>    标准输出重定向 (覆盖)
1>>   标准输出重定向 (追加)
2>   标准错误输出重定向 (覆盖)
2>>   标准错误输出重定向 (追加)
&>  /dev/null 混合输出 (覆盖)
&>>  /tmp/t.log 混合输出 (追加)
标准输出重定向(每次都会覆盖文件)
[root@renzhiqiang ~]# echo "123"  > 1.txt
[root@renzhiqiang ~]# cat 1.txt
123
[root@renzhiqiang ~]# echo "12345" > 1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
标准输出重定向(会往文件的尾部在添加内容)
[root@renzhiqiang ~]# echo "123456" >> 1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
123456
[root@renzhiqiang ~]# echo "wq" >>1.txt
[root@renzhiqiang ~]# cat 1.txt
12345
123456
wq
错误输出重定向
    [yu@renzhiqiang ~]su - yu
    [yu@renzhiqiang ~]find /etc/
    [yu@renzhiqiang ~]find /etc/ 2>> err.txt
    [yu@renzhiqiang ~]cat err
    [yu@renzhiqiang ~]cat err.txt
正确和错误都输入到相同位置
    [yu@renzhiqiang ~]find /etc &> 1.txt
    [yu@renzhiqiang ~]vim 1.txt

    [root@renzhiqiang ~]# ls /root /error >ab
    ls: cannot access /error: No such file or directory
    [root@renzhiqiang ~]# ls /root /error >ab &> 2.txt
    [root@renzhiqiang ~]# cat 2.txt
    ls: cannot access /error: No such file or directory
     /root:
    1.txt
     2.txt
     ab
     ip.ttx
重定向到空设备/dev/null
[root@renzhiqiang ~]# ll /root/ /error
ls: cannot access /error: No such file or directory
/root/:
total 112
-rw-r--r-- 1 root root 109260 Aug  9 14:38 1.txt
-rw-r--r-- 1 root root     81 Aug  9 14:46 2.txt
-rw-r--r-- 1 root root      0 Aug  9 14:46 ab
-rw-r--r-- 1 root root      0 Aug  9 14:22 ip.ttx
[root@renzhiqiang ~]# ll /root/ /error 2> /dev/null
/root/:
total 112
-rw-r--r-- 1 root root 109260 Aug  9 14:38 1.txt
-rw-r--r-- 1 root root     81 Aug  9 14:46 2.txt
-rw-r--r-- 1 root root      0 Aug  9 14:46 ab
-rw-r--r-- 1 root root      0 Aug  9 14:22 ip.ttx
脚本中的重定向
[root@renzhiqiang ~]# vim ping.sh
ping  10.0.0.200 -W 1 -c 1 &> /dev/null
   if [ $? -eq 0 ];then
   echo "10.0.0.200 up " >> up.txt
else
   echo "10.0.0.200 down" >> down.txt
fi                                                                                                                                                                       
"ping.sh" 7L, 146C written                                                   
[root@renzhiqiang ~]# bash ping.sh 
[root@renzhiqiang ~]# ./ping.sh
-bash: ./ping.sh: Permission denied
[root@renzhiqiang ~]# ll ping.sh 
-rw-r--r-- 1 root root 146 Aug  9 13:11 ping.sh
[root@renzhiqiang ~]# chmod a+x ping.sh 
[root@renzhiqiang ~]# ll ping.sh
-rwxr-xr-x 1 root root 146 Aug  9 13:11 ping.sh
[root@renzhiqiang ~]# ./ping.sh 
< 输入重定向
;             cmd1 ; cmd2 无论前者命令成功还是失败,都执行后者命令
&&         cmd1 && cmd2 前者命令执行成功,后者命令才会执行
||             cmd1 || cmd2 前者命令执行失败,后者命令才会执行
&           将程序放入后台执行 ( screen 将程序放入后台 )
[root@renzhiqiang ~]# lss ; ls
-bash: lss: command not found
1.txt  2.txt  ab  ip.ttx
[root@renzhiqiang ~]# ls && ls -l
1.txt  2.txt  ab  ip.ttx
total 112
-rw-r--r-- 1 root root 109260 Aug  9 14:38 1.txt
-rw-r--r-- 1 root root     81 Aug  9 14:46 2.txt
-rw-r--r-- 1 root root      0 Aug  9 14:46 ab
-rw-r--r-- 1 root root      0 Aug  9 14:22 ip.ttx
[root@renzhiqiang ~]# lls && ls -l
-bash: lls: command not found
[root@renzhiqiang ~]# lls || ls -l
-bash: lls: command not found
total 112
-rw-r--r-- 1 root root 109260 Aug  9 14:38 1.txt
-rw-r--r-- 1 root root     81 Aug  9 14:46 2.txt
-rw-r--r-- 1 root root      0 Aug  9 14:46 ab
-rw-r--r-- 1 root root      0 Aug  9 14:22 ip.ttx

进程管道

什么是管道
管道操作符号 "|" ,主要用来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输入
PS: 无法传递标准错误输出至后者命令
将/etc/passwd 中的用户按 UID 大小排序

 [root@renzhiqiang ~] awk -F ":" '{print $3}' /etc/passwd|sort -n

统计当前/etc/passwd 中用户使用的 shell 类型

[root@renzhiqiang ~] [root@renzhiqiang ~]awk -F ":" '{print $NF}' /etc/passwd|sort -n|uniq -c

打印根分区已用空间的百分比(仅打印数字)

 [root@renzhiqiang ~] [root@renzhiqiang ~]df|grep "\/$"
 [root@renzhiqiang ~]  df|grep "\/$"| awk '{print $5}'
 [root@renzhiqiang ~]  df|grep "\/$"| awk '{print $5}'|awk -F "%" '{print $1}'

管道中的tee技术

   [root@renzhiqiang ~] ip addr|grep "inet "
   [root@renzhiqiang ~] ip addr|grep "inet "|awk -F "/" '{print $1}'|awk '{print $2}'
   [root@renzhiqiang ~] ip addr|grep "inet "|tee ip.txt|awk -F "/" '{print $1}'|awk '{print $2}'
   [root@renzhiqiang ~] cat ip.txt

重定向与 tee 他们在使用过程中有什么区别

[root@xuliangwei ~]# date > date.txt    直接将内容写入date.txt文件中
[root@xuliangwei ~]# date |tee date.txt 
命令执行会输出至屏幕,但会同时保存一份date.txt文件中

[root@renzhiqiang ~]# date > date.txt
[root@renzhiqiang ~]# date |tee date.txt
Fri Aug  9 16:17:16 CST 2019
[root@renzhiqiang ~]# cat date.txt
Fri Aug  9 16:17:16 CST 2019

xargs参数传递,主要让一些不支持管道的命令可以使用管道技术

which cat|xargs ls- l
ls |xargs rm -fv
ls |xargs cp -rvt /tmp/ -或-> ls | xargs -I {} cp -rv {} /tmp/
ls |xargs mv -t /tmp/   -或-> ls | xargs -I {}  mv {} /tmp
[root@renzhiqiang ~]# ls
1.txt  2.txt  ab  date.txt  ip.ttx  ip.txt
[root@renzhiqiang ~]# ls |xargs rm -f 
[root@renzhiqiang ~]# ls
[root@renzhiqiang ~]# 

相关文章

网友评论

      本文标题:Day12 重定向 管道

      本文链接:https://www.haomeiwen.com/subject/oczcjctx.html