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