美文网首页
第十二天 重定向 管道

第十二天 重定向 管道

作者: 杨小倪 | 来源:发表于2019-08-10 17:03 被阅读0次

    今日内容

    • 1 . 什么是重定向?
    • 2 . 为什么要使用重定向?
    • 3 . 学习重定向需要了解的标准输入、标准输出、错误输出
    • 4 . 重定向、追加重定向、案例演示
    • 5 . 进程管道技术

    1.什么是重定向?

    • 重定向就是将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。

    2.为什么要使用重定向

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

    重定向的一些符号

    <  输出重定向
    ;cmd1;cmd2无论前者命令执行成功与否,后者命令都执行
    &&   cmd&&cmd 前者命令执行成功,后者命令才会执行
    || cmd1|| cmd2 前者命令执行失败,后者命令才会执行
    &  将程序放入后台执行(screen 将程序放入后台)
    

    3.了解重定向的标准输入、标准输出、错误输出

    当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出


    image.png

    进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端
    PS: 进程是使用文件描述符(file descriptors)来管理打开的文件

    image.png

    以 cat 命令为例, cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

    #会把文件/etc/passwd的内容输出显示到屏幕上
    [root@xuliangwei ~]# cat /etc/passwd
    
    image.png

    输出重定向

    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    5.进程管道技术

    1.什么是管道

    管道操作符“|”,主要用来连接左右两个命令,将左侧的命令的标准输出,交给右侧命令的标准输入
    PS:无法传递标准错误输出给后者

    管道流程图

    image.png

    管道使用案例

    案例一:将/etc/passwd中的用户按uid大小排序

    [root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd
    [root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd -r
    [root@xuliangwei ~]# sort -t":" -k3 -n /etc/passwd |head
    

    案例2: 统计当前/etc/passwd 中用户使用的 shell 类型

    #思路:取出第七列(shell) | 排序(把相同归类)| 去重
    [root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd
    [root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort
    [root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
    [root@xuliangwei ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
    

    案例3: 统计网站的访问情况 top 20

    #思路: 打印所有访问的连接 | 过滤访问网站的连接 | 打印用户的 IP | 排序 | 去重
    
    [root@xuliangwei ~]# yum -y install httpd
    [root@xuliangwei ~]# systemctl start httpd
    [root@xuliangwei ~]# systemctl stop firewalld
    
    [root@xuliangwei ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c
    [root@xuliangwei ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c |sort -k1 -rn |head -n 20
    

    PS: 管道命令符能让大家能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率。

    管道中的tee技术

    image.png
    #选项: -a追加
    [root@xuliangwei ~]# ip addr |grep 'inet ' |tee ip.txt |awk -F"/" '{print $1}' |awk '{print $2}'
    127.0.0.1
    10.0.0.100
    
    [root@xuliangwei ~]# cat ip.txt
    inet 127.0.0.1/8 scope host lo
    inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32
    

    重定向与tee的区别

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

    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
    

    相关文章

      网友评论

          本文标题:第十二天 重定向 管道

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