管道

  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。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章