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
發佈了46 篇原創文章 · 獲贊 48 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章