1. 程式人生 > >Linux常用命令詳解(四)_檔案過濾分割、統計、kill

Linux常用命令詳解(四)_檔案過濾分割、統計、kill

grep

grep(global search regular expression(RE) and print out the line,全面搜尋正則表示式並把行打印出來)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。

格式:

grep [option] pattern file

選項:

-a 不要忽略二進位制資料。 

-A<顯示列數> 除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容。 

-b 在顯示符合範本樣式的那一行之外,並顯示該行之前的內容。 

-c 計算符合範本樣式的列數。 

-C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。 

-d<進行動作> 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep命令將回報資訊並停止動作。 

-e<範本樣式> 指定字串作為查詢檔案內容的範本樣式。 

-E 將範本樣式為延伸的普通表示法來使用,意味著使用能使用擴充套件正則表示式。 

-f<範本檔案> 指定範本檔案,其內容有一個或多個範本樣式,讓grep查詢符合範本條件的檔案內容,格式為每一列的範本樣式。 

-F 將範本樣式視為固定字串的列表。 

-G 將範本樣式視為普通的表示法來使用。 

-h 在顯示符合範本樣式的那一列之前,不標示該列所屬的檔名稱。 

-H 在顯示符合範本樣式的那一列之前,標示該列的檔名稱。 

-i 胡列字元大小寫的差別。 

-l 列出檔案內容符合指定的範本樣式的檔名稱。 

-L 列出檔案內容不符合指定的範本樣式的檔名稱。 

-n 在顯示符合範本樣式的那一列之前,標示出該列的編號。 

-q 不顯示任何資訊。 

-R/-r 此引數的效果和指定“-d recurse”引數相同。 

-s 不顯示錯誤資訊。 

-v 反轉查詢。 

-w 只顯示全字符合的列。 

-x 只顯示全列符合的列。 

-y 此引數效果跟“-i”相同。 

-o 只輸出文件中匹配到的部分。

grep正則表示式表示式:

^  #錨定行的開始 如:'^grep'匹配所有以grep開頭的行。

$  #錨定行的結束 如:'grep$'匹配所有以grep結尾的行。

.  #匹配一個非換行符的字元 如:'gr.p'匹配gr後接一個任意字元,然後是p。    

*  #匹配零個或多個先前字元 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。

.*   #一起用代表任意字元。 

[]   #匹配一個指定範圍內的字元,如'[Gg]rep'匹配Grep和grep。

[^]  #匹配一個不在指定範圍內的字元,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。

\(..\)  #標記匹配字元,如'\(love\)',love被標記為1。

\<      #錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。  

\>      #錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。  

x\{m\}  #重複字元x,m次,如:'0\{5\}'匹配包含5個o的行。

x\{m,\}  #重複字元x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。

x\{m,n\}  #重複字元x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。

\w    #匹配文字和數字字元,也就是[A-Za-z0-9],如:'G\w*p'匹配以G後跟零個或多個文字或數字字元,然後是p。

\W    #\w的反置形式,匹配一個或多個非單詞字元,如點號句號等。

\b    #單詞鎖定符,如: '\bgrep\b'只匹配grep。  

POSIX字元:

為了在不同國家的字元編碼中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字元類,如[:alnum:]是[A-Za-z0-9]的另一個寫法。要把它們放到[]號內才能成為正則表示式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支援POSIX的字元類。

[:alnum:]    #文字數字字元   

[:alpha:]    #文字字元   

[:digit:]    #數字字元   

[:graph:]    #非空字元(非空格、控制字元)   

[:lower:]    #小寫字元   

[:cntrl:]    #控制字元   

[:print:]    #非空字元(包括空格)   

[:punct:]    #標點符號   

[:space:]    #所有空白字元(新行,空格,製表符)   

[:upper:]    #大寫字元   

[:xdigit:]   #十六進位制數字(0-9,a-f,A-F)

應用例項:

1.檢視指定程序

$ ps -ef|grep java

2.檢視指定程序個數

$ ps -ef|grep java -c

3.從檔案中讀取關鍵詞進行搜尋

$ cat test1.txt | grep -f test2.txt         //輸出test1.txt 檔案中含有從 test2.txt 檔案中讀取的關鍵詞的內容行

$ cat test1.txt | grep -nf test2.txt        //顯示行號

4.從檔案中查詢關鍵字

$ grep -n "keyword" filename

$ grep -n "keyword" filename1 filename2 ...     //從多個檔案查詢關鍵詞

5.不顯示本身程序

$ ps aux|grep ssh         //顯示grep本身程序

$ ps aux|grep \[s]sh      //不顯示grep本身程序

$ ps aux | grep ssh | grep -v "grep"

6.遞迴搜尋檔案

grep "text" . -r -n        // .表示當前目錄

echo "hello world" |grep -i "HELLO"    //忽略大小寫

7.正則匹配搜尋

$ cat test.txt | grep ^hello     //找出以hello開頭的行的內容

$ cat test.txt | grep -E "com|org"    //顯示包含com 或 org 的行
...

wc命令

Linux系統中wc(word count)命令用來計算數字。利用wc指令我們可以計算檔案的Byte數、字數或是列數,若不指定檔名稱,或是所給予的檔名為“-”,則wc指令會從標準輸入裝置讀取資料。

格式:

wc [option] [para]

選項:

-c或--bytes或——chars:只顯示Bytes數 

-l或——lines:只顯示列數 

-w或——words:只顯示字數

應用例項:

檢視檔案的位元組數、字數、行數

wc test.txt

ps命令

ps命令用於報告當前系統的程序狀態。可以搭配kill指令隨時中斷、刪除不必要的程式。ps命令是最基本同時也是非常強大的程序檢視命令,使用該命令可以確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有僵死、哪些程序佔用了過多的資源等等,總之大部分資訊都是可以通過執行該命令得到的。

程序有五種狀態:

  • 執行(正在執行或在執行佇列中等待)

  • 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號)

  • 不可中斷(收到訊號不喚醒和不可執行, 程序必須等待直到有中斷髮生)

  • 僵死(程序已終止, 但程序描述符存在, 直到父程序呼叫wait4()系統呼叫後釋放)

  • 停止(程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU訊號後停止執行執行)

ps工具標識程序的5種狀態碼:

  • D 不可中斷 uninterruptible sleep (usually IO)

  • R 執行 runnable (on run queue)

  • S 中斷 sleeping

  • T 停止 traced or stopped

  • Z 僵死 a defunct (”zombie”) process

引數:

-a:顯示所有終端機下執行的程式,除了階段作業領導者之外。 

a:顯示現行終端機下的所有程式,包括其他使用者的程式。 

-A:顯示所有程式。 

-c:顯示CLS和PRI欄位。 

c:列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,選項或常駐服務的標示。 

-C<指令名稱>:指定執行指令的名稱,並列出該指令的程式的狀況。 

-d:顯示所有程式,但不包括階段作業領導者的程式。 

-e:此選項的效果和指定"A"選項相同。 

e:列出程式時,顯示每個程式所使用的環境變數。 

-f:顯示UID,PPIP,C與STIME欄位。 

f:用ASCII字元顯示樹狀結構,表達程式間的相互關係。 

-g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業領導者的名稱來指定。 

g:顯示現行終端機下的所有程式,包括群組領導者的程式。 

-G<群組識別碼>:列出屬於該群組的程式的狀況,也可使用群組名稱來指定。 

h:不顯示標題列。 

-H:顯示樹狀結構,表示程式間的相互關係。 

-j或j:採用工作控制的格式顯示程式狀況。 

-l或l:採用詳細的格式來顯示程式狀況。 

L:列出欄位的相關資訊。 

-m或m:顯示所有的執行緒。 

n:以數字來表示USER和WCHAN欄位。 

-N:顯示所有的程式,除了執行ps指令終端機下的程式之外。 

-p<程式識別碼>:指定程式識別碼,並列出該程式的狀況。 

p<程式識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。 

r:只列出現行終端機正在執行中的程式。 

-s<階段作業>:指定階段作業的程式識別碼,並列出隸屬該階段作業的程式的狀況。 

s:採用程式訊號的格式顯示程式狀況。 

S:列出程式時,包括已中斷的子程式資料。 

-t<終端機編號>:指定終端機編號,並列出屬於該終端機的程式的狀況。 

t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。 

-T:顯示現行終端機下的所有程式。 

-u<使用者識別碼>:此選項的效果和指定"-U"選項相同。 

u:以使用者為主的格式來顯示程式狀況。 

-U<使用者識別碼>:列出屬於該使用者的程式的狀況,也可使用使用者名稱稱來指定。 

U<使用者名稱稱>:列出屬於該使用者的程式的狀況。 

v:採用虛擬記憶體的格式顯示程式狀況。 

-V或V:顯示版本資訊。 

-w或w:採用寬闊的格式來顯示程式狀況。  

x:顯示所有程式,不以終端機來區分。 

X:採用舊式的Linux i386登陸格式顯示程式狀況。 

-y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。

應用例項:

$ ps -A        //顯示所有程序

$ ps -u root   //顯示指定使用者的程序資訊

$ ps -ef       //顯示所有程序資訊連同命令列

$ ps -ef|grep java //ps和grep一起使用檢視Java所有程序

kill命令

kill命令用來刪除執行中的程式或工作。kill可將指定的資訊送至程式。預設的資訊為SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用SIGKILL(9)資訊嘗試強制刪除程式。程式或工作的編號可利用ps指令或job指令檢視。

格式:

kill [option] [para]

選項:

-l  訊號,若果不加訊號的編號引數,則使用“-l”引數會列出全部的訊號名稱

-a  當處理當前程序時,不限制命令名和程序號的對應關係

-p  指定kill 命令只打印相關程序的程序號,而不傳送任何訊號

-s  指定傳送訊號

-u  指定使用者 

常用指令:

$ kill process_num

$ kill -9 process_num

常用訊號(SIGKILL):

訊號 數字 含義
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)

killall命令

killall命令使用程序的名稱來殺死程序,使用此指令可以殺死一組同名程序。我們可以使用kill命令殺死指定程序PID的程序,如果要找到我們需要殺死的程序,我們還需要在之前使用ps等命令再配合grep來查詢程序,而killall把這兩個過程合二為一,是一個很好用的命令。

格式:

killall [option] [process_name]

選項:

-Z 只殺死擁有scontext 的程序

-e 要求匹配程序名稱

-I 忽略小寫

-g 殺死程序組而不是程序

-i 互動模式,殺死程序前先詢問使用者

-l 列出所有的已知訊號名稱

-q 不輸出警告資訊

-s 傳送指定的訊號

-v 報告訊號是否成功傳送

-w 等待程序死亡

應用例項:

1.殺死所有同名程序

$ kill process_name

2.殺掉所有登入的shell

$ killall -9 bash