管線命令 ( pipe ) bash
就如同前面所說的, bash 命令執行的時候有輸出的數據會出現!那麼若是這羣數據必須要通過幾道手續以後才能獲得咱們所想要的格式,應該如何來設定?這就牽涉到管線命令的問題了( pipe ),管線命令使用的是『 | 』這個界定符號!另外,管線命令與『連續下達命令』是不同的呦!這點底下咱們會再說明。底下咱們先舉一個例子來講明一下簡單的管線命令。工具
假設咱們要讀取 last 這個指令中,那個 root 登入的『次數』應該怎麼做?注意呦!咱們只須要『次數』。那麼我所進行的步驟是:.net
執行 last ,將全部這個月的全部人登入數據取出來; 排序
使用 grep 將上面的輸出數據(stdout)當中的 root 擷取出來,其它的不要; ip
使用 wc 這個能夠計算行數的指令將上一步的數據計算行數! 字符串
因爲 last 的輸出是一行表明一次登入,因此只要計算幾行就表明登入幾回的意思,因此囉!經由上面三個步驟,將 last 數據逐步的篩選,就能夠獲得咱們的數據了!整個命令能夠寫成以下: get
[test @test bin]# last it
[test @test bin]# last | grep root pip
[test @test bin]# last | grep root | wc -l ast
你能夠分別執行『 last 』而後再逐步增長爲『 last | grep root 』,最後到上面那一行,那麼就立刻能夠清楚的知道爲什麼會這麼作囉!這個管線命令『 | 』僅能處理經由前面一個指令傳來的正確信息,也就是 standard output ( STDOUT ) 的信息,對於 stdandard error 並無直接處理的能力,請記得。那麼總體的管線命令可使用下圖表示之:
在每一個管線的部分都是『指令』呢!然後一個指令的輸入乃是由前一個指令的輸出而來的!底下咱們來談一談一些基本的管線命令指令介紹:
--------------------------------------------------------------------------------
cut
語法: [root @test /root ]# cut -d "分隔字符" [-cf] fields
參數說明:
-d :後面接的是用來分隔的字符,預設是『空格符』
-c :後面接的是『第幾個字符』
-f :後面接的是第幾個區塊?
範例:
[root @test /root]# cat /etc/passwd | cut -d ":" -f 1
將 passwd 這個檔案裏面,每一行裏頭的 : 用來做爲分隔號,
而列出第一個區塊!也就是姓名所在啦!
[root @test /root]# last | cut -d " " -f1
以空格符爲分隔,並列出第一個區間!
[root @test /root]# last | cut -c1-20
將 last 以後的數據,每一行的 1-20 個字符取出來!
說明:
這個 cut 實在很好用!不過,說真的,除非你經常在分析 log 檔案,不然使用到 cut 的機會並很少!好了! cut 主要的用途在於將『同一行裏面的數據進行分解!』,最常使用在分析一些數據或文字數據的時候!這是由於有時候咱們會以某些字符看成分割的參數,而後來將數據加以切割,以取得咱們所須要的數據。我也很常使用這個功能呢!尤爲是在分析 log 檔案的時候!
--------------------------------------------------------------------------------
sort
語法: [root @test /root ]# sort [-t 分隔符] [(+起始)(-結束)] [-nru]
參數說明:
-t 分隔符:使用分隔符來隔開不一樣區間,預設是 tab
+start -end:由第 start 區間排序到 end 區間
-n :使用『純數字』排序(不然就會以文字型態來排序)
-r :反向排序
-u :相同出現的一行,只列出一次!
範例:
[root @test /root]# cat /etc/passwd | sort
將列出來的我的帳號排序!
[root @test /root]# cat /etc/passwd | sort -t: +2n
將我的帳號中,以使用者 ID 來排序(以 : 來分隔,第三個爲 ID ,
但第一個代號爲 0 之故)
[root @test /root]# cat /etc/passwd | sort -t: +2nr
反相排序囉!
說明:
sort 一樣是很經常使用的指令呢!由於咱們經常須要比較一些信息啦!舉個上面的第二個例子來講好了!今天假設你有不少的帳號,並且你想要知道最大的使用者 ID 目前到哪一號了!呵呵!使用 sort 一會兒就能夠知道答案咯!固然其使用還不止此啦!有空的話不妨玩一玩!
--------------------------------------------------------------------------------
wc
語法: [root @test /root ]# wc [-lmw]
參數說明:
-l :多少行
-m :多少字符
-w :多少字?
範例:
[root @test /root]# cat /etc/passwd | wc -l
這個檔案裏頭有多少行?
[root @test /root]# cat /etc/passwd | wc -w
這個檔案裏頭有多少字!?
說明:
wc 也能夠看成指令?呵呵!這可不是上洗手間的 WC 呢!這是至關有用的計算檔案內容的一個工具組喔!舉個例子來講,當你要知道目前你的帳號檔案中有多少個帳號時,就使用上面的 wc -l 啦!由於 /etc/passwd 裏頭一行表明一個使用者呀!因此知道行數就曉得有多少的帳號在裏頭了!而若是要計算一個檔案裏頭有多少個字符時,呵呵!就使用 wc -w 這個參數吧!
--------------------------------------------------------------------------------
uniq
語法: [root @test /root ]# uniq
參數說明:
範例:
[root @test /root]# last | cut -d" " -f1 | sort | uniq
說明:
這個指令用來將『重複的行刪除掉只顯示一個』,舉個例子來講,你要知道這個月份登入你主機的使用者有誰,而不在意他的登入次數,那麼就使用上面的範例,(1)先將全部的數據列出;(2)再將人名獨立出來;(3)通過排序;(4)只顯示一個!因爲這個指令是在將重複的東西減小,因此固然須要『配合排序過的檔案』來處理囉!
--------------------------------------------------------------------------------
tee
語法: [root @test /root ]# last | tee last.list | cut -d " " -f1
參數說明:
範例:
[root @test /root]# last | tee last.list | cut -d " " -f1
說明:
有沒有發如今命令重導向的時候,若是咱們要將數據送出到檔案的時候,屏幕上就不會出現任何的數據!那麼若是咱們須要將數據同時顯示在屏幕上跟檔案中呢?呵呵!這個時候就須要 tee 這個指令囉!使用 last 能夠查看到這個月份的登入數據,而使用了 tee 以後,會將數據同時傳給下一個命令去執行,也會將數據寫入 last.list 這個檔案中!也是個好幫手!
--------------------------------------------------------------------------------
tr
語法: [root @test /root ]# tr [-ds] SET1
參數說明:
-d :刪除 SET1 這個字符串
-s :取代掉重複的字符!
範例:
[root @test /root]# last | tr '[a-z]' '[A-Z]' <==將小寫改爲大寫
[root @test /root]# cat /etc/passwd | tr -d : <==嘿嘿! : 這個符號在 /etc/passwd 中不見了!
[root @test /root]# cat /home/test/dostxt | tr -d '\r' > dostxt-noM <==將 DOS 檔案的字尾符號 ^M 的符號去除!
說明:
其實這個指令也能夠寫在『正規表示法』裏頭!由於他也是由正規表示法的方式來取代數據的!以上面的例子來講,使用 [] 能夠設定一串字呢!也經常用來取代檔案中的怪異符號!例如上面第三個例子當中,能夠去除 DOS 檔案留下來的 ^M 這個斷行的符號!這東西至關的有用!相信處理 Linux & Windows 系統中的人們最麻煩的一件事就是這個事情啦!亦便是 DOS 底下會自動的在每行行尾加入 ^M 這個斷行符號!這個時候咱們可使用這個 tr 來將 ^M 去除! ^M 可使用 \r 來代替之!
--------------------------------------------------------------------------------
split
語法: [root @test /root ]# split [-bl] 輸入檔案 輸出檔案前導字符
參數說明:
-b :以檔案 size 來分
-l :以行數來分
範例:
[root @test /root]# split -l 5 /etc/passwd test <==會產生 testaa, testab, testac... 等等的檔案
說明:
在 Windows 的狀況下,你要將檔案分割須要如何做?!傷腦筋吧!呵呵!在 Linux 底下就簡單的多了!你要將檔案分割的話,那麼就使用 -b size 來將一個分割的檔案限制其大小,若是是行數的話,那麼就使用 -l line 來分割!好用的很!如此一來,你就能夠輕易的將你的檔案分割成 floppy 的大小,方便你 copy 囉!
管線命令在 bash 的連續的處理程序中是至關重要的!另外,在 log file 的分析當中也是至關重要的一環,因此請特別留意!好嘛!?