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