• day 08 重定向/管道/sort/uniq/awk详解


    day 08 重定向/管道/sort/uniq/awk详解

    什么是输出重定向

    简单说,就是把本来输出到屏幕上的信息保存到指定的文件中,这个过程就叫重定向

    重定向使用场景

    1.希望将输出的信息保存下来

    2.希望将运行程序的执行结果保存下来

    3.希望忽略某些命令的警告或者错误信息

    4.希望将错误信息和正确信息保存在不同的文件中

    5.程序运行报错了我们希望把报错信息保存下来

    重定向分类

    运行一个程序通常会有三种情况,标准输入,标准输出,错误输出

    名称 文件描述 作用
    标准输入 0 接受输入,默认为键盘,也可以是其他文件或命令输入
    标准输出 1 正确的输出,默认输出到屏幕
    错误输出 2 错误的输出,默认输出到屏幕

    输入重定向

    < << 输入重定向符号 追加输入重定向
    实例:
    cat >文件名<<EOF
    a
    b
    c
    d
    EOF
    实际工作中很少使用,就一个cat案例
    

    什么是输出重定向

    简单来说,就是改变输出内容的位置,比如将输出信息保存到文件中

    输出重定向分类

    名称 操作符 作用
    标准覆盖输出重定向 > 将程序输出的正确答案输出到指定的文件中,但是会覆盖原文件的内容
    标准追加输出重定向 >> 将程序输出的正确结果追加输出到指定文件中,不会覆盖原文件,而是在后面追加内容
    错误覆盖输出重定向 2> 将程序的错误结果输出到指定的文件中,但是会覆盖原文件的内容
    错误追加输出重定向 2>> 将程序的错误结果以追加的形式输出到指定的文件中,不会覆盖原文件,而是在后面追加内容
    清空文件命令命令实例  >linux.txt 
    

    输出重定向案例

    案例1:标准覆盖输出重定向
    
    echo Linux7 > linux.txt
    
    echo linux > linux.txt
    
    cat linux.tx
    
    案例2: 标准追加输出重定向
    
    echo Linux7 >> linux.txt
    echo linux7.1>> linux.txt
    cat linux.txt
    
    案例3:标准错误覆盖输出重定向
    
    echooo 123 2> linux.txt
    cat linux.txt
    
    案例4:标准错误追加输出重定向
    
    112344  333 2>> linux.txt
    
    案例5:正确和错误输出到不同一个文件
    #1.useradd zhaocheng
    创建普通用户
    #2.su -zhaocheng
    切换用户
    #3.find /etc/ -name "*.conf" 
    因为zhaocheng 是普通用户,权限有限,所以有错误跟正确信息都会输出到屏幕
    #4.find /etc/ -name "*.conf" > 0k.txt
    将正确的消息输出到0k.txt中
    #5.find /etc/ -name "*.conf" 2> on.txt 
    将错误的信息输出到no.txt 中
    #6.find /etc/ -name "*.conf" > 0k.txt && find /etc/ -name "*.conf" 2>no.txt
    一条命令将错误正确的信息输出到不同的文件中
    cat ok.txt 
    cat no.txt
    发现执行失败,&& 必须都要成功,所以该方式不行
    #7.find /etc/ -name "*.conf" >0k.txt find /etc/ -name "*.conf" 2>no.txt
    ok.txt no.txt 都创建成功了,但是里面没有内容。这种合并方法,只能用于创建文件,目录。比如touch ,mkdir。
    #8.find /etc/ -name "*.conf" > ok.txt 2>no.txt
    一条命令将正确和错误信息输出到不同的文件中
    案例6:正确和错误都输出到同一个文件
    find /etc/ -name "*.conf" >> all.txt 2>&1 
    find /etc/ -name "*.conf" > all.txt 2>&1
    两个命令执行的效果是一样的
    一条命令将正确错误信息输出到同一个文件中,并且还按照默认时间排序。
    案例7:将正确错误结果信息输出到null
     echooo 44545 > /dev/null 2>&1
    案例8:将正确的信息输出到null
    echo  123> /dev/null
    
     
    
    
    
    
    
    

    输入重定向

    案例:写入多行文本

    cat > 123.txt << EOF
    a
    b
    c
    d
    EOF
    

    管道符号-每天都在用

    什么是管道

    1.管道符号为"|"
    2.简单来说,管道就是将多个命令连接起来,将左侧命令的标准输出做为右侧命令的标准输入。
    3.前面一个命令处理成功的输出信息,交给后面的命令做为输入继续处理。
    4.只要命令不出错,可以接多个管道命令
    5.错误命令不会传递给管道后面的命令
    

    管道应用场景

    1.处理日志,比如找出日志中访问排名前10的ip地址,url等
    2.过滤输出,比如一个命令输出了10行信息,但是我们只需要其中关键信息
    

    管道使用案例

    案例1:取出网卡ip

    ip ad | grep 10.0.0
    查看网卡ip 地址信息后过滤含有10.0.0的关键字的行
    cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep -i "ipaddr" | awk -F"="'{print $2}'
    查看ifcfg-eth0信息,部分大小写过滤ipaddr行,在过滤查看IP地址
    ip ad | grep -i "inet" |grep eth0 | awk '/inet /{print $2}'
    简单写
    
    
    

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

    先查看/etc/passwd目录里面内容 cat /etc/passwd
    
    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    zhaocheng:x:1000:1000::/home/zhaocheng:/bin/bash
    zhaocheng1:x:1111:1111::/home/zhaocheng1:/bin/bash
    
    其中uid是第三列即用户id
    
    cat /etc/passwd      |sort -t ":" -k3 -nr
    查看/etc/passwd内容   分隔符 排序 指定分隔符为:指定第三列 按数字反向排序
    

    sort排序

    1.sort排序就是对文本进行排序,< font color = "red">一般是第一列进行排序

    2.默认ASCII码进行排序

    关键选项:

    ​ -t 指定分割符

    ​ -k 指定第几列

    ​ -n 指定数字进行排序 是这一列整体数字进行排序

    ​ -r 方向排序

    案例:将/etc/passwd 中的用户uid大小排序
    先查看/etc/passwd 有哪些用户
    cat /etc/passwd
    
    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    zhaocheng:x:1000:1000::/home/zhaocheng:/bin/bash
    zhaocheng1:x:1111:1111::/home/zhaocheng1:/bin/bash
    
    在进行排序查找
    cat /etc/passwd |      sort      -t         ":"   -k3      -nr
    查看文本内容      管道   sort排序    指定分隔符   分割符  第三列 按照数字方向排序
    

    uniq去重

    去重命令一般要先进行排序,才能去重操作

    应用场景:

    uniq -c 在输出行前面加上每

    行在输入文件中出现的 次数

    案例:统计/etc/passwd 文件中用户使用shell情况
    cat /etc/passwd 查看/etc/passwd情况
    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    zhaocheng:x:1000:1000::/home/zhaocheng:/bin/bash
    zhaocheng1:x:1111:1111::/home/zhaocheng1:/bin/bash
    
    cat /etc/passwd/ | awk -F ":" '{print$NF}'
    只显示最后一列情况登陆情况
    cat /etc/passwd |awk -F ":" '{print$NF}' |sort|uniq -c
    去重前先排序
    cat /etc/passwd |awk -F ":" '{print$NF}' |sort|uniq -c|sort -nr
    去重后按数字反向排序
    
    

    awk命令

    把那一行的内容,并且指定某一列显示出来 重点

    awk '{print$1}' 默认以空格为分隔符

    $1 表示第一列

    $2 表示第二列

    $NF 表示最后一列

    awk -F 指定分隔符
    
    案例:取出日志里面出现次数排名前10的ip
    
    
  • 相关阅读:
    线性地址物理地址逻辑地址转换mmu
    C/c++ 宏返回值
    树的子结构
    合并两个排序的链表
    链表中倒数第k个结点
    数值的整数次方
    原码、反码与补码
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/zhaocheng690/p/15343928.html
Copyright © 2020-2023  润新知