歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux的瑞士軍刀:lsof/fuser/pkill/pgrep

linux的瑞士軍刀:lsof/fuser/pkill/pgrep

日期:2017/3/1 14:46:35   编辑:關於Linux
linux的瑞士軍刀:lsof/fuser/pkill/pgrep lsof命令詳解:lsof命令的原始功能是列出打開的文件的進程,但LINUX下,所有的設備都是以文件的行式存在的,所以,lsof的功能很強大.一般root用戶才能執行lsof命令,普通用戶可以看見/usr/sbin/lsof命令,但是普通用戶執行會顯示“permission denied” sof指令的用法如下: lsof abc.txt 顯示開啟文件abc.txt的進程 lsof -i :22 知道22端口現在運行什麼程序 lsof -c abc 顯示abc進程現在打開的文件 lsof -g gid 顯示歸屬gid的進程情況 lsof +d /usr/local/ 顯示目錄下被進程開啟的文件 lsof +D /usr/local/ 同上,但是會搜索目錄下的目錄,時間較長 lsof -d 4 顯示使用fd為4的進程 lsof -i 用以顯示符合條件的進程情況 語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 –> IPv4 or IPv6 protocol –> TCP or UDP hostname –> Internet host name hostaddr –> IPv4位置 service –> /etc/service中的 service name (可以不只一個) port –> 端口號 (可以不只一個) 例子: TCP:25 – TCP and port 25 @1.2.3.4 – Internet IPv4 host address 1.2.3.4 [email protected]:ftp – TCP protocol hosthaha.ks.edu.tw service name:ftp lsof -n 不將IP轉換為hostname,缺省是不加上-n參數 例子: lsof -i [email protected]:ftp -n lsof -p 12 看進程號為12的進程打開了哪些文件 lsof +|-r [t] 控制lsof不斷重復執行,缺省是15s刷新 -r,lsof會永遠不斷的執行,直到收到中斷信號 +r,lsof會一直執行,直到沒有檔案被顯示 例子:不斷查看目前ftp連接的情況:lsof -i [email protected]:ftp -r lsof -s 列出打開文件的大小,如果沒有大小,則留下空白 lsof -u username 以UID,列出打開的文件 fuser 命令 用途 使用文件或文件結構識別進程。 語法 fuser [ -c | -d | -f ] [ -k ] [ -u ] [ -x ] [ -V ]文件 … 描述 此 fuser 命令列出了本地進程的進程號,那些本地進程使用File 參數指定的本地或遠程文件。對於阻塞特別設備,此命令列出了使用該設備上任何文件的進程。 每個進程號後面都跟隨一個字母,該字母指示進程如何使用文件。 c 將此文件作為當前目錄使用。 e 將此文件作為程序的可執行對象使用。 r 將此文件作為根目錄使用。 s 將此文件作為共享庫(或其它可裝載對象)使用。 進程號被寫入標准輸出(在進程號之間有空格的行中)。一個換行符被寫入標准錯誤(在每個文件操作數的最後一個輸出之後)。其他所有輸出被寫入標准錯誤。 此 fuser 命令不會檢測有 mmap 區域的進程,其中相關的文件描述符已從此被關閉。 標志 -c 包含 File的文件系統中關於任何打開的文件的報告。 -d 暗示使用了 -c 和 -x 標志。關於任何與文件系統(自父目錄刪除的)無鏈接的打開文件的報告。當與 -V 標志一起使用時,它也會報告被刪除文件的節點號和大小。 -f 僅對文件的打開實例報告。 -k 將 SIGKILL 信號發送到每個本地進程。僅有 root 用戶能終止另一用戶的進程。 -u 為進程號後圓括號中的本地進程提供登錄名。 -V 提供詳細輸出。 -x 與 -c 或 -f 連用,報告除標准 fuser 輸出以外的可執行的和可載入的對象。 示例 要列出使用 /etc/passwd 文件的本地進程的進程號,請輸入: fuser /etc/passwd要列出使用 /etc/filesystems 文件的進程的進程號和用戶登錄名,請輸入: fuser -u /etc/filesystems要終止使用給定文件系統的所有進程,請輸入: fuser -k -x -u -c /dev/hd1 或者 fuser -kxuc /home任一命令都列出了進程號和用戶名,然後終止每個正在使用 /dev/hd1 (/home) 文件系統的進程。僅有 root 用戶能終止屬於另一用戶的進程。如果您正在試圖卸下 /dev/hd1 文件系統,而一個正在訪問 /dev/hd1 文件系統的進程不允許這樣,您可能希望使用此命令。 要列出正在使用已從給定文件系統刪除的文件的全部進程,請輸入: fuser -d /usr文件 /dev/kmem 用於系統映像。 /dev/mem 也用於系統映像 名稱 pgrep, pkill – 查找或者發信號給進程通過名稱和其它屬性。 語法 pgrep [-flvx] [-n | -o] [-d delim] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern] pkill [-signal] [-fvx] [-n | -o] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern] 說明   pgrep程序檢查在系統的中活動進程,報告進程屬性匹配命令行上指定條件的進程的ID。每一個進程ID以一個十進制數表示,通過一個分割字符串和下一個ID分開,默認的分割字符串是一個新行。對於每個屬性選項,用戶可以在命令行上指定一個以逗號分割的可能值的集合。例如,   pgrep -G other,daemon   匹配真實組ID是other或者是daemon的進程。如果多個條件被指派,這些匹配條件按邏輯與”AND”規則運算。例如,   pgrep -G other,daemon -U root,daemon   匹配進程它的屬性是:   (真實的組ID是other或者是daemon) 與 (真實的用戶ID是root或者是daemon)   pkill函數和pgrep相同,除了匹配的進程被信號通知就像用kill(1)替代了pgrep的進程ID的輸出。一個信號名稱或者數字可以作為pkill的第一個命令行選項。 選項   支持下面的選項:The following options are supported:   -c ctidlist 僅匹配列表中列出的ID的進程。   -d delim 指定每一個匹配的進程ID之間分割字符串。如果沒有 -d 選項指定,默認的是新行字符。-d 選項僅在pgrep命令中有效。   -f正則表達式模式將執行與完全進程參數字符串 (從/proc/nnnnn/psinfo文件的pr_psargs字段獲得)匹配。如果沒有 -f 選項,表達式僅對執行文件名稱(從/proc/nnnnn/psinfo文件pr_fname字段獲得)匹配。   -g pgrplist僅匹配進程組ID在給定列表中的進程。如果組0包括在列表中,這個被解釋為pgrep或者pkill進程的組ID。   -G gidlist僅匹配真實組ID在給定列表中的進程。每一個組ID可以使用組名稱或者數字的組ID指定。   -J projidlist匹配項目ID在給定列表中的進程。每一個項目ID可以使用項目的名稱或者數字項目ID來指定。   -l長格式輸出。輸出每一個匹配進程的名稱連同進程ID。進程名稱從pr_psargs 或者 pr_fname字段獲得,依賴於-f選項是否指定。-l選項僅在pgrep命令中有效。   -n匹配最新(最近生成的)符合所有其它匹配條件的進程。不能和-o選項一起使用。   -o匹配最舊(最早生成的)符合所有其它匹配條件的進程。不能和-n選項一起使用。   -P ppidlist 僅匹配給定列表中父進程ID的進程。   -s sidlist 僅匹配進程會話ID在給定列表中的進程。如果ID 0在列表中,這個解釋為pgrep或者pikill進程的會話ID。   -t termlist 僅匹配與給定列表中終端關聯的進程。每一個終端指定為在/dev中終端設備路徑名稱的後綴。例如term/a 或者 pts/0。   -T taskidlist 僅匹配在給定列表中任務ID的進程。如果ID 0包括在列表中,這個解釋為pgrep或者pikill進程的會話ID。   -u euidlist 僅匹配有效用戶ID在給定列表中的進程。每個用戶ID可以通過一個登錄名稱或者數字的用戶ID指定。   -U uidlist 僅匹配真實的用戶ID在給定列表中的進程。每個用戶ID可以通過一個登錄名稱或者數字的用戶ID指定。   -v 反向匹配。匹配所有的進程除了符合匹配條件的。   -x 僅認為進程其參數字符串或者執行文件名稱正確匹配規定模式是匹配的進程。模式被認為是准確的當所有在進程參數字符串或者可執行文件名稱的字符匹配模式。   -z zoneidlist 僅匹配區域ID在給定列表中的進程。每一個區域ID可以使用一個區域名稱或者一個數字的區域ID指定。這個選項僅在全局區域中執行有效。如果pkill程序用來往其它區域的進程發信號,進城必須宣稱{PRIV_PROC_ZONE}特權。   -signal 指定發往每一個匹配進程的信號。如果沒有指定,SIGTERM 是默認的信號。-signal僅在pkill命令中作為第一個選項有效。信號可以是在signal.h中定義的沒有SIG前綴的一個符號名字,也可是一個相應的信號數值。 操作 支持如下操作: pattern     指定一個擴展正則表達式(Extended Regular Expression (ERE))模式來匹配可執行文件名稱或者完整的進程參數字符串。ERE語法的完整描述參看regex(5)。 例子 例子1 獲得一個進程ID 獲得sendmail的進程ID: example% pgrep -x -u root sendmail 283 例子2 終止一個進程 終止最近生成的xterm: example% pkill -n xterm Exit Status   如下退出值被返回:   0 一個或者多個進程被匹配。   1 沒有進程被匹配。   2 指定了無效的命令行參數。   3 出現一個致命的錯誤。
Copyright © Linux教程網 All Rights Reserved