Linux網管指令-lsof

Linux系統管理的瑞士刀

lsof(lsof的全稱是list open files),此程式主要是用來查看正在運行中的進程打開了哪些文件、目錄和套接字;是系統常用監測工具之一。

lsof常用指令:

lsof  #列出所有開啟的檔案

查詢誰使用某個檔


lsof /path/to/file
#以檔案為參數,列出所有程序中,用此檔案的程序。

lsof /path/to/file1 /path/to/file2
#可同時指定幾個檔,列出所有用這些檔案的程序。

lsof +D /usr/lib
# 在遞迴的目錄中,找所有開啟的檔案,有 +D 的參數lsof會去找該目錄及其子目錄下的所有檔。

lsof | grep '/usr/lib'
# 這個操作會比用 grep 慢些。這是因為先找所有檔案,然後只做輸出。

lsof -u pkrumins
#列出某使用者所開啟檔案的列表。-u的參數是只列某使用者開啟的檔案,也可以用逗號來分隔不同的使用者,來列出這些使用者開了哪些檔。

lsof -u rms,root
#列出rms及root兩個人所開啟所有檔的列表。也可以用 -u 兩次=>
lsof -u rms -u root

lsof -c apache
#以程式名稱為範圍,找所有開啟的檔。-c的參數,列出程序中所開啟的檔名是以apache開頭的列表。
所以原來用這樣的方式列出:
lsof | grep foo 可以改為=>lsof -c foo

也可以只寫檔案的部份名稱:
lsof -c apa
就會列出所有被程序開啟檔案裡檔名以apa開頭的列表。
也可同時用好幾個-c參數使用:
lsof -c apache -c python
#列出被apache及python所開啟的檔案列表。

lsof -u justin -c apache
#列出使用者 或 程序所開啟的檔案
lsof 的各參數可互相結合,預設互相是用 OR 的方式結合,就是會把 -u justin 和 -c apache 的兩輸出結果,共同地列出來。

lsof -a -u justin -c bash
#列出使用者 且由其程序所開啟的檔案,這裡用 -a 參數,列出是使用者justin 身分下,以 bash 程序所開啟的檔案的列表。

lsof -u ^root
#列出 除了 root之外所有使用者所開啟的檔案,root之前的 ^ 符號,就是指出只要不是 root身分的,都列出所開啟的檔案列表。

lsof -p 1
#列出所有某PID程序所開啟的檔案,-p 是過濾出被某程序ID所開啟的檔案。
也可以同時指定多個PID,藉著逗號分隔:
 lsof -p 450,980,333
#列出PID是 450,980,333 的程序所開的檔案。

lsof -p ^1
#列出所有 除了某PID程序 所開啟的檔案。列出不包含 PID為1 的其他PID程序所開的檔案。

lsof -i
#列出所有網路連結。-i 列出所有開啟internet socket的程序。

lsof -i tcp
#列出所有TCP的網路連結,-i 後可以有幾個選項,其中之一為tcp,在此只列出使用 TCP socket 的程序。

lsof -i udp
#列出所有UDP的網路連結,udp 的選項可列出用UDP socket的程序。

找出用某連接埠的程序
# lsof -i :25
:25 的選項列出用TCP或UDP的25連結埠的程序。也可用/etc/services所定義的埠號名稱來取代埠號數字:
# lsof -i :smtp

lsof -i udp:53
#找出用某UDP埠號的程序,同樣地也可用在TCP連接埠=> lsof -i tcp:80

 lsof -a -u hacker -i
#找出某使用者所有網路活動的程序,-a 是把 -u -a 用「且」的方式連結,找出使用者hacker身分跑的相關網路程序所開啟的檔案。

 lsof -N
#列出所有NFS的檔案,-N 是指 NFS

 lsof -U
#列出所有Unix domain socket檔案,-U 是指 Unix。

 lsof -g 1234
#列出某群組程序所開的檔案,列出 PGID 為1234開啟的檔案。

 lsof -d 2
#列出所指定的檔案描述所開啟的檔案,上例是列出以檔案描述為2的被開啟檔案。

也可用範圍的方式來指定:
 lsof -d 0-2
#列出檔案描述為0,1,2的檔案。

#也可用其他的值來指定,像mem列出記憶體對應=>lsof -d mem
# 或用 txt 列出載入記憶體及執行的程式=>lsof -d txt

lsof -t -i
#輸出用某資源程序的PID,-t 選項是只輸出程序的PID。
再加上-i,則是指有關網路連結,所以很容易地來殺掉所有用網路的程序=> kill -9 `lsof -t -i`
重覆執行列出檔案,-r 的選項讓lsof重覆地列出檔案,直到被選中。
而參數 1 是指每隔一秒重列一次。這種用法最好的使用情況是,監看某使用者連網路會用到檔案的情形=> lsof -r 1 -u john -i -a

留言

熱門文章