linux lsof命令詳解

chenfeng發表於2015-12-12
lsof全名list opened files,也就是列舉系統中已經被開啟的檔案。我們都知道,linux環境中,任何事物都是檔案,裝置是檔案,目錄是檔案,甚至sockets也是檔案。所以,用好lsof命令,對日常的linux管理非常有幫助。

lsof語法格式是: lsof [options] filename


常用的引數列表:


lsof filename 顯示開啟指定檔案的所有程式
lsof -a 表示兩個引數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字元的程式所有開啟的檔案
lsof -u username 顯示所屬user程式開啟的檔案
lsof -g gid 顯示歸屬gid的程式情況
lsof +d /DIR/ 顯示目錄下被程式開啟的檔案
lsof +D /DIR/ 同上,但是會搜尋目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定檔案描述符的程式
lsof -n 不將IP轉換為hostname,預設是不加上-n引數
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 –> 埠號 (可以不只一個)


1) lsof test.txt 顯示開啟檔案test.txt的程式


2) lsof -i :80 顯示80埠現在執行什麼程式


3) lsof -c httpd 顯示httpd程式現在開啟的檔案


4) lsof -g gid 顯示歸屬gid的程式情況


5) lsof +d /usr/local/ 顯示/usr/local目錄下被程式開啟的檔案


6) lsof +D /usr/local/ 同上,但是會搜尋目錄下的目錄,時間較長


7) lsof -d 4 顯示使用fd為4的程式


 lsof -i [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


tcp@ohaha.ks.edu.tw:ftp – TCP protocol host:ohaha.ks.edu.tw service name:ftp


9) lsof -n 不將IP轉換為hostname,預設是不加上-n引數


例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n


10) lsof -p 12 看程式號為12的程式開啟了哪些檔案


11) lsof +|-r [t] 控制lsof不斷重複執行,預設是15s重新整理


-r,lsof會永遠不斷的執行,直到收到中斷訊號


+r,lsof會一直執行,直到沒有檔案被顯示


例子:不斷檢視目前ftp連線的情況:lsof -i tcp@ohaha.ks.edu.tw:ftp -r


12) lsof -s 列出開啟檔案的大小,如果沒有大小,則留下空白


附對lsof出來的欄位說明:


COMMAND     PID    USER   FD      TYPE             DEVICE       SIZE       NODE NAME
httpd      4523   vmail  mem       REG                8,6     143336     737809 /usr/lib64/libexpat.so.0.5.0
httpd      4523   vmail  mem       REG                8,6     181832    1092244 /usr/lib64/libapr-0.so.0.9.4
httpd      4523   vmail  mem       REG                8,6      56885    3457249 /lib64/tls/librt-2.3.4.so


每行顯示一個開啟的檔案,若不指定條件預設將顯示所有程式開啟的所有檔案。lsof輸出各列資訊的意義如下:


COMMAND:程式的名稱
PID:程式識別符號
USER:程式所有者
FD:檔案描述符,應用程式透過檔案描述符識別該檔案。如cwd、txt等
TYPE:檔案型別,如DIR、REG等
DEVICE:指定磁碟的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁碟上的標識)
NAME:開啟檔案的確切名稱


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1871009/,如需轉載,請註明出處,否則將追究法律責任。