管道

  1. 管道命令"|"仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error 并没有直接处理的能力。
    [root@www~]# ls -al /etc | less     <==想要查看/etc下面的文件,但是同时进行分页显示   
    
  2. 选取命令 cut 和 grep
    • cut
      选取信息通常针对"行"来分析的,并不是整篇信息分析。
      参数 含义
      -d 后面接分隔字符,与-f一起使用
      -f 依据-d的分隔符将一段信息切割成数段,用-f去取出第几段的意思
      -c 以字符的单位取出固定字符区间
      [root@www~]# echo $PATH
      /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games:
      [root@www~]# echo $PATH | cut -d ':' -f 5
      #则上面的意思是,在PATH的结果里面取出以:分隔的第5段
      [root@www~]# echo $PATH | cut -d ':' -f 3,5
      #则上面的意思是,在PATH的结果里面取出以:分隔的第3段和第5段
      
      [root@www~]#export
      declare -x HISTSIZE=“1000”
      declare -x INPUTRC ="/etc/inputrc"
      declare -x KDEDIR=“/usr”
      (......省略......)
      #因为数据排列是整齐的,所以可以直接直接取12个字符后面的字,如果想要取12个字符到20个字符,那么就可以用 cut -c 12-20
      [root@www~]#export | cut -c 12-
      HISTSIZE=“1000”
      INPUTRC ="/etc/inputrc"
      KDEDIR=“/usr”
      
    • grep
      cut是在一行信息当中取出部分我们想要的,而grep就是分析一行信息,若当中有我们需要的信息,就将该行拿出来。
      参数 含义
      -a 将binary文件以text文件的方式查找数据
      -c 计算找到"查找字符串"的次数
      -i 忽略大小写的不同
      -n 输出行号
      -v 反向选择,即显示出没有"查找字符串"内容那一行
      –color=auto 可以将找到的关键字部分加上颜色显示
  3. 排序命令 sort ,wc,uniq
    • sort
      sort进行排序,依据不同的数据类型就行排序,文字与数字的排序就不一样。排序的字符与语系编码有关,所以在使用sort之前,可以先使用LANG=Cl来让语系统一。
      参数 含义
      -f 忽略大小写的差异。例如A与a视为编码相同
      -b 忽略最前面的空格符
      -M 以月份的名字来排序
      -n 使用"纯数字"进行排序
      -r 反向排序
      -u 就是unique,相同的数据,仅出现一行
      -t 分隔符,默认用tab来分隔
      -k 以那个区间(field)进行排序的意思
      [root@www~]# cat /etc/passwd | sort -t ':' -k 3
      root:x:0:0:root:/root:/bin/bash
      uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
      operatorx:11:0:operator:/root:/sbin/nologin
      bin:x:1:1:bin:/bin:/sbin/nologin
      <==按照以:分隔的第三列进行进行排序,又因为是按照第一位进行排序的,所以所有0数字开头的排在前面,1的排在后面
      <==如果想要按照第三列的数字大小排序,就用如下命令
      [root@www~]# cat /etc/passwd | sort -t ':' -k 3 -n
      
    • wc
      参数 含义
      -l 仅列出行
      -w 仅列出多少字
      -m 多少字
      [root@www~]# cat /etc/man.config | wc
      141       722         4617
      <==这个命令代表查出,/etc/man.config里面究竟有多少行、字数、字符数
      
    • uniq
      参数 含义
      -i 忽略大小写字符的不同
      -c 进行计数
      [root@www~]# last | cut -d ' ' -f 1 | sort | uniq -c
      1    
      12   reboot
      41   root
      1    wtmp
      <==从上面可以看出,reboot有12次,wtmp与第一行的空行是last默认字符。
      
  4. 双向重定向 tee
    参数 含义
    -a 以累加的方式,将数据加入file中
    [root@www~]# last | tee last.list | cut -d " " -f 1
    <==这个命令可以把last命令的结果存一份到last.list文件中,同时屏幕中也会有经过cut -d " " -f 1的结果
    
  5. 字符转换命令 tr col join paste expand
    • tr
      tr可以用来删除一段信息当中的文字或者进行文字信息的替换。这个命令也可以用正则表达式的方式替换数据。
      参数 含义
      -d 删除信息当中的SET1字符串
      -s 替换掉重复字符串
      [root@www~]# last| tr '[a-z]' '[A-Z]'
      <==将last输出信息中所有小写字符变成大写字符
      [root@www~]# cat /etc/passwd | tr -d ':'
      <==将/etc/passwd中输出信息的冒号删除
      
    • col
      参数 含义
      -x 将tab键转换为对等的空格键
      -b 在文字内有反斜杠时,仅保留反斜杠最后接的那个字符
      [root@www~]# cat -A /etc/man.config <==用这个命令查看的时候会看到很多^
      [root@www~]# cat /etc/man.config | col -x | cat -A | more <==把tab键替换为空格键,输出美观
      
    • join
      join用来处理两个文件之间的数据,要将两个文件当中有相同数据那一行加在一起。
      参数 含义
      -t join默认以空格符分隔数据,并且对比第一个字段数据,如果两个文件相同,则将两条数据连城一行,且第一个字段放在第一个
      -i 忽略大小写的差异
      -1 代表第一个文件要用哪个字段来分析
      -2 代表第二个文件要用哪个字段来分析
      [root@www~]# head -n 3 /etc/passwd /etc/shadow
      ==>/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
      ==>/etc/shadow<==
      root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7:::
      bin:*:14126:0:99999:7:::
      daemon:*:14126:0:99999:7:::
      #因为两个内容都是以用户名开头的,且以:为分隔
      [root@www~]# join -t ':' /etc/passwd /etc/shadow
      root:x:0:0:root:/root:/bin/bash:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7:::
      bin:x:1:1:bin:/bin:/sbin/nologin:*:14126:0:99999:7:::
      daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:14126:0:99999:7:::
      <==则通过join,我们把用户名相同的都整合为同一行
      
      注意:在进行合并之前,所处理的文件需要经过排序sort,否则有些对比项会被略过。
    • paste
      paste就是把两行贴在一起,中间以tab键隔开。
      参数 含义
      -d 后面可以接分隔符,默认以tab来分隔
      - 如果file部分写成-,表示来自standard input 的数据的意思
      [root@www~]# paste /etc/passwd /etc/shadow
      root:x:0:0:root:/root:/bin/bash	root:$1$/3AQp5Ee$y9A/D0bh6rE1As:14120:0:99999:7:::
      bin:x:1:1:bin:/bin:/sbin/nologin	bin:*:14126:0:99999:7:::
      daemon:x:2:2:daemon:/sbin:/sbin/nologin	daemon:*:14126:0:99999:7:::
      
  6. split切割命令
    split可以将大文件依据文件大小或行数来切割称为小文件。
    参数 含义
    -b 后面可接欲切割成的文件大小,可加单位b,k,m等
    -l 以行数进行切割
    PREFIX 代表前导符,可作为切割文件的前导文字
    [root@www~]# cd /temp;split -b 300k /etc/termcap termcap
    [root@www~temp]# ll -k termcap*
    -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapaa
    -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapab
    -rw-r--r-- 1 root root 300 Feb 7 16:39 termcapac
    #因为我们的前导符是XXX,所以生成的文件就会以XXXaa,XXXab,XXXac
    
    [root@www~]# cat termcap* >> termcapback
    <==把上面例子的三个文件用数据流重定向定向到同一个文件
    [root@www~]# ls -al / | split -l 10 - lsroot     <==查看/下面的文件,并且按照每10行进行分割
    [root@www~]# wc -l lsroot*
       10 lsrootaa
       10 lsroot1b
         6 lsrootac
       26 total
    #重点在-,一般来说,如果需要stdout/stdin,但是没有文件,只有-,那么-就会被当成stdout或stdin
    
  7. 参数代换xargs
    xargs可以读入stdin数据,并且以空格符或者断字符进行分辨,将stdin分隔成arguments。
    参数 含义
    -0 如果输入的stdin含有特殊字符,例如 ,`,
    -e 是EOF的意思,后面接字符串,当xargs分析到这个字符串时,就会停止工作
    -p 在执行每个命令的参数时,都会询问用户的意思
    -n 后面接次数,每次command命令执行的时候,要使用几个参数的意思
    当xargs后面没有接命令的时候,默认以echo进行输出
    [root@www~]# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger
    Login:root                    Name:root
    Directory:/root             Shell:/bin/bash
    Never logged in.
    No mail
    No Plan
    <==finger accout 可以取得该账号的相关说明内容,例如上面的输出就是finger root后的结果。例子中,我们利用cut取出账号名称,用head取出三个账号,最后用xargs将三个账号名称变成finger需要的参数
    
  8. 关于减号-的用途
    某些命令需要用到文件名来进行处理,该stdin与stdout可以利用减号’-'里替代。
    [root@www~]# tar -cvf - /home | tar -xvf -
    #例子中,我们将/home里面的打包文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道,将tar -cvf - /home 传送到后面的tar -xvf -。后面的这个-则取用前一个命令的stdout。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章