zoukankan      html  css  js  c++  java
  • 数据流重定向与管道命令

    数据流重定向

    数据流重定向是将某个命令执行后应该出现在屏幕上的数据传输到其他地方。

    标准输入stdin:代码为0,使用<或者<<,<表示覆盖<<表示追加

    标准输出stdout:代码为1,使用>或者>>,>表示覆盖输出>>表示追加输出

    标准错误输出stderr:代码为2,使用2>或者2>>,>表示覆盖输出>>表示追加输出

    [phh@CentOS7-1 ~]$ find /home/ -name *profile
    /home/phh/.bash_profile
    find: ‘/home/Alice’: 权限不够
    [phh@CentOS7-1 ~]$ find /home/ -name *profile >in.txt 2>err.txt
    [phh@CentOS7-1 ~]$ cat in.txt 
    /home/phh/.bash_profile
    [phh@CentOS7-1 ~]$ cat err.txt 
    find: ‘/home/Alice’: 权限不够

    上述find /home/ -name *profile的输出结果,第一行为正确执行结果的输出、即标准输出,第二行为执行出现错误的输出、即标准错误输出。

    find /home/ -name *profile >in.txt 2>err.txt是将标准输出、标准错误输出分别写到当前目录的in.txt文件、err.txt文件,执行结果不输出到屏幕。

    /dev/null垃圾黑洞设备

    /dev/null可以吃掉所有导向这个设备的信息、即不保存内容,是个空文件,一般用于将所有的标准错误输出输出到这个文件。

    [phh@CentOS7-1 postfix]$ find / -name .bash_profile 2>/dev/null
    /etc/skel/.bash_profile
    /home/phh/.bash_profile
    [phh@CentOS7-1 postfix]$ cat /dev/null

    如果要将标准输出和标准错误输出写入同一个文件,则需要使用特殊的语法,避免两者同时写出现混乱。

    [phh@CentOS7-1 ~]$ find / -name .bash_profile &>all.txt
    [phh@CentOS7-1 ~]$ find / -name .bash_profile >all.txt 2>&1

    标准输入可通过键盘输入,也可通过文件输入。

    [root@CentOS7-1 linux]# cat >test.txt
    test1     #键盘输入
    test2     #键盘输入
    #按ctrl+d退出
    [root@CentOS7-1 linux]# cat test.txt 
    test1
    test2
    [root@CentOS7-1 linux]# cat >test.txt<<eof
    > 1
    > 2
    > eof
    [root@CentOS7-1 linux]# cat test.txt 
    1
    2

    第一种方式输入结束后需要按ctrl+d退出,第二种方式<<后面的字符串表示结束输入,成对的eof(可以任意取)之间的内容为输入。

    [root@CentOS7-1 linux]# cat >test.txt < ~/.bashrc   #将家目录下的.bashrc文件的内容读取并写入test.txt

    管道命令

    管道命令使用|,灌到后面接的第一个数据必定是命令,而且这个命令必须能够接收标准输出作为标准输入继续处理。

    选取命令:cut、grep

    • cut -d '分隔字符' -f fields  -->>以指定的分隔字符分隔每行,选取指定的段
    • cut -c m-[n] -->>输出每行第m-n个字符
    [root@CentOS7-1 linux]# cat /etc/passwd |cut -d ':' -f 1,6   #以:为分隔符,输出第1个、第6个字段
    ……
    postfix:/var/spool/postfix
    tcpdump:/
    phh:/home/phh
    Alice:/home/Alice
    
    [root@CentOS7-1 linux]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    [root@CentOS7-1 linux]# echo $PATH|cut -c 10-20   #输出10-20个字符
    l/sbin:/usr
    [root@CentOS7-1 linux]# echo $PATH|cut -c 10-    #输出第10及之后的字符
    l/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin   

    grep,处理行数据,如果行中有符合grep条件的,将该行显示出来

    grep [-cinv] [--color=auto] '字符串' filename

    • -c:统计字符串出现次数
    • -i:忽略大小写
    • -n:输出行号
    • -v:反向查找,即查找不包含字符串的行
    [root@CentOS7-1 linux]# grep -n home /etc/passwd
    43:phh:x:1000:1000:phh:/home/phh:/bin/bash
    44:Alice:x:1001:1001::/home/Alice:/bin/bash
    [root@CentOS7-1 linux]# grep -c home /etc/passwd
    2

    排序命令:sort、uniq、wc

    用法:sort [-fbMnrtku] [file or stdin],排序

    • -f:忽略大小写
    • -b:忽略最前面的空格
    • -M:一月份的名字来排序,例如JAN、DEC等
    • -n:使用纯数字进行排序,默认是使用字符排序
    • -r:反向排序、即降序排序,默认是升序排序
    • -t:分割符,默认使用tab
    • -k:以该区间的字段来排序
    • -u:即uniq,相同的数据仅出现一行
    [root@CentOS7-1 linux]# head -5 /etc/passwd|sort
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    [root@CentOS7-1 linux]# head -5 /etc/passwd|sort -r
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    #sort默认按照字符升序排序,-r则降序排序
    [root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3
    root:x:0:0:root:/root:/bin/bash
    phh:x:1000:1000:phh:/home/phh:/bin/bash
    Alice:x:1001:1001::/home/Alice:/bin/bash
    qemu:x:107:107:qemu user:/:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ……
    [root@CentOS7-1 linux]# cat /etc/passwd |sort -t : -k 3 -n
    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
    #-t指定使用:分隔,-k指定使用分隔后的第3个字段字段排序,默认按字符排序,-n指定按数字排序

    用法:unique [-ic],重复的数据只显示一行

    • -i:忽略大小写
    • -c:计数
    [root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq
    
    phh
    reboot
    root
    wtmp
    [root@CentOS7-1 linux]# last|cut -d ' ' -f 1|sort|uniq -c
          1 
          2 phh
          5 reboot
         16 root
          1 wtmp

    用法:wc [-lwm]

    • -l:统计行数
    • -w:统计多少字(英文单词)
    • -m:统计多少字符
    [root@CentOS7-1 linux]# cat a.txt 
    hi
    test file
    Bye
    [root@CentOS7-1 linux]# cat a.txt|wc
          3       4      17
    [root@CentOS7-1 linux]# cat a.txt|wc -l
    3

    字符转换命令:tr、col、join、paste、expand

  • 相关阅读:
    ptyhon异步开发aiohttp
    python异步编程asyncio
    python ThreadPoolExecutor线程池和ProcessPoolExecutor进程池
    liunx 使用flask + nginx + gunicorn 部署项目
    liunx安装python3.6.8
    Grafana设置mysql为数据源
    使用pyhdfs连接HDFS进行操作
    七、Hadoop搭建Hbase
    六、Zookeeper运行环境
    五、Hadoop搭建Hive
  • 原文地址:https://www.cnblogs.com/Forever77/p/13118218.html
Copyright © 2011-2022 走看看