天天看點

Linux-(ps,grep)

grep [option] pattern file

用于過濾/搜尋的特定字元。可使用正規表達式能多種指令配合使用,使用上十分靈活。

Linux系統中grep指令是一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來。grep全稱是Global Regular Expression Print,表示全局正規表達式版本,它的使用權限是所有使用者。

grep的工作方式是這樣的,它在一個或多個檔案中搜尋字元串模闆。如果模闆包括空格,則必須被引用,模闆後的所有字元串被看作檔案名。搜尋的結果被送到标準輸出,不影響原檔案内容。

grep可用于shell腳本,因為grep通過傳回一個狀态值來說明搜尋的狀态,如果模闆搜尋成功,則傳回0,如果搜尋不成功,則傳回1,如果搜尋的檔案不存在,則傳回2。我們利用這些傳回值就可進行一些自動化的文本處理工作。 

-a   --text   #不要忽略二進制的資料。   

-A<顯示行數>   --after-context=<顯示行數>   #除了顯示符合範本樣式的那一列之外,并顯示該行之後的内容。   

-b   --byte-offset   #在顯示符合樣式的那一行之前,标示出該行第一個字元的編号。   

-B<顯示行數>   --before-context=<顯示行數>   #除了顯示符合樣式的那一行之外,并顯示該行之前的内容。   

-c    --count   #計算符合樣式的列數。   

-C<顯示行數>    --context=<顯示行數>或-<顯示行數>   #除了顯示符合樣式的那一行之外,并顯示該行之前後的内容。   

-d <動作>      --directories=<動作>   #當指定要查找的是目錄而非檔案時,必須使用這項參數,否則grep指令将回報資訊并停止動作。   

-e<範本樣式>  --regexp=<範本樣式>   #指定字元串做為查找檔案内容的樣式。   

-E      --extended-regexp   #将樣式為延伸的普通表示法來使用。   

-f<規則檔案>  --file=<規則檔案>   #指定規則檔案,其内容含有一個或多個規則樣式,讓grep查找符合規則條件的檔案内容,格式為每行一個規則樣式。   

-F   --fixed-regexp   #将樣式視為固定字元串的清單。   

-G   --basic-regexp   #将樣式視為普通的表示法來使用。   

-h   --no-filename   #在顯示符合樣式的那一行之前,不标示該行所屬的檔案名稱。   

-H   --with-filename   #在顯示符合樣式的那一行之前,表示該行所屬的檔案名稱。   

-i    --ignore-case   #忽略字元大小寫的差别。   

-l    --file-with-matches   #列出檔案内容符合指定的樣式的檔案名稱。   

-L   --files-without-match   #列出檔案内容不符合指定的樣式的檔案名稱。   

-n   --line-number   #在顯示符合樣式的那一行之前,标示出該行的列數編号。   

-q   --quiet或--silent   #不顯示任何資訊。   

-r   --recursive   #此參數的效果和指定“-d recurse”參數相同。   

-s   --no-messages   #不顯示錯誤資訊。   

-v   --revert-match   #顯示不包含比對文本的所有行。   

-V   --version   #顯示版本資訊。   

-w   --word-regexp   #隻顯示全字元合的列。   

-x    --line-regexp   #隻顯示全列符合的列。   

-y   #此參數的效果和指定“-i”參數相同。

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)  

查找指定程序個數

指令:ps -ef|grep svn -c

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

指令:cat test.txt | grep -f test2.txt

grep不顯示本身程序

指令:ps aux | grep ssh | grep -v "grep"

輸出非u開頭的行内容

指令:cat test.txt |grep ^[^u]

顯示目前目錄下面以.txt 結尾的檔案中的所有包含每個字元串至少有7個連續小寫字元的字元串的行

指令:grep '[a-z]\{7\}' *.txt

Linux中的ps指令是Process Status的縮寫。ps指令用來列出系統中目前運作的那些程序。ps指令列出的是目前那些程序的快照,就是執行ps指令的那個時刻的那些程序,如果想要動态的顯示程序資訊,就可以使用top指令。ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果并不動态連續的;如果想對程序時間監控,應該用 top 工具。

要對程序進行監測和控制,首先必須要了解目前程序的情況,也就是需要檢視目前程序,而 ps 指令就是最基本同時也是非常強大的程序檢視指令。使用該指令可以确定有哪些程序正在運作和運作的狀态、程序是否結束、程序有沒有僵死、哪些程序占用了過多的資源等等。總之大部分資訊都是可以通過執行該指令得到的。

linux上程序有5種狀态:

運作(正在運作或在運作隊列中等待)

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

不可中斷(收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生)

僵死(程序已終止, 但程序描述符存在, 直到父程序調用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

ps [參數]

a 顯示所有程序

-a 顯示同一終端下的所有程式

-A 顯示所有程序

c 顯示程序的真實名稱

-N 反向選擇

-e 等于“-A”

e 顯示環境變量

f 顯示程式間的關系

-H 顯示樹狀結構

r 顯示目前終端的程序

T 顯示目前終端的所有程式

u 指定使用者的所有程序

-au 顯示較詳細的資訊

-aux 顯示所有包含其他使用者的行程

-C<指令> 列出指定指令的狀況

--lines<行數> 每頁顯示的行數

--width<字元數> 每頁顯示的字元數

--help 顯示幫助資訊

--version 顯示版本顯示

顯示所有程序資訊

指令:ps -A

顯示指定使用者資訊

指令:ps -u root

顯示所有程序資訊,連同指令行

指令:ps -ef

目前屬于您自己這次登入的 PID 與相關資訊列示出來

指令:ps -l

列出目前所有的正在記憶體當中的程式

指令:ps aux

輸出指定的字段

指令:ps -o pid,ppid,pgrp,session,tpgid,comm

 說明:

各相關資訊的意義:

F 代表這個程式的旗标 (flag), 4 代表使用者為 super user

S 代表這個程式的狀态 (STAT),關于各 STAT 的意義将在内文介紹

UID 程式被該 UID 所擁有

PID 就是這個程式的 ID !

PPID 則是其上級父程式的ID

C CPU 使用的資源百分比

PRI 這個是 Priority (優先執行序) 的縮寫

NI 這個是 Nice 值

ADDR 這個是 kernel function,指出該程式在記憶體的那個部分。如果是個 running的程式,一般就是 "-"

SZ 使用掉的記憶體大小

WCHAN 目前這個程式是否正在運作當中,若為 - 表示正在運作

TTY 登入者的終端機位置

TIME 使用掉的 CPU 時間。

CMD 所下達的指令為何

在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,是以, 當我使用 ps -l 的時候,隻有三個 PID。

說明:

USER:該 process 屬于那個使用者賬号的

PID :該 process 的号碼

%CPU:該 process 使用掉的 CPU 資源百分比

%MEM:該 process 所占用的實體記憶體百分比

VSZ :該 process 使用掉的虛拟記憶體量 (Kbytes)

RSS :該 process 占用的固定的記憶體量 (Kbytes)

TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程式,若為 pts/0 等等的,則表示為由網絡連接配接進主機的程式。

STAT:該程式目前的狀态,主要的狀态有

R :該程式目前正在運作,或者是可被運作

S :該程式目前正在睡眠當中 (可說是 idle 狀态),但可被某些訊号 (signal) 喚醒。

T :該程式目前正在偵測或者是停止了

Z :該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀态

START:該 process 被觸發啟動的時間

TIME :該 process 實際使用 CPU 運作的時間

COMMAND:該程式的實際指令