lsof(list open files ~~~ 「ls + of」的組合)是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。在終端下輸入lsof即可顯示系統開啟的檔案,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能。
0x01
lsof 常見的用法是查詢應用程式開啟的檔案的名稱和數目。可用於查詢出某個特定應用程式將日誌資料記錄到何處,或者正在跟蹤某個問題。例如,linux限制了程序能夠開啟檔案的數目。通常這個數值很大,所以不會產生問題,並且在需要時,應用程式可以請求更大的值(直到某個上限)。如果你懷疑應用程式耗盡了檔案描述符,那麼可以使用 lsof 統計開啟的檔案數目,以進行驗證。
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,例如 -i 4 或者 -i 6
protocol --> tcp or udp
hostname --> internet host name
hostaddr --> ipv4位址
service --> /etc/service中的 service name (可以不只乙個)
port --> 埠號 (可以不只乙個),例如lsof -i 4 1.1.1.1@110-135
1、列出某個使用者開啟的檔案
# lsof -u user_name 例如root@kali:~# lsof -u root ,lsof -u ^root檢視非root使用者的檔案使用情況
2、列出在某個埠執行的程序
# lsof -i :port_number 例如root@kali:~# lsof -i:9392,root@kali:~# lsof -i:100-10000,root@kali:~# lsof -i:9392,9293,33218
3、根據程序名稱列出開啟的檔案
# lsof -c process_name 例如root@kali:~# lsof -c ssh ,root@kali:~# lsof -a -c ssh -u root可以組合查詢root使用者的ssh
4、列出所有網路連線
#lsof -i 例如root@kali:~# lsof -i ,root@kali:~# lsof -i tcp,root@kali:~# lsof -i tcp@localhost,
5、根據程序id來列出開啟的檔案
# lsof -p pid 例如root@kali:~# lsof -p 9371,root@kali:~# lsof -i -a -p 9371 ,root@kali:~# lsof `which httpd` (哪個程序在使用apache的可執行檔案)
6、 列出某個目錄中被開啟的檔案
# lsof +d path_of_the_directory 例如 root@kali:~# lsof +d /var/log/
7、殺掉某個使用者的所有活動程序
# killall -9 `lsof -t -u username` 例如root@kali:~#kill -9 `lsof -t -u root`(謹慎:如果是單一使用者,這命令一敲就黑屏了)
8、恢復刪除的檔案
第一步:
lsof檢視---當前是否有程序開啟/var/logmessages檔案,如下: # lsof |grep /var/log/messages
syslogd 1283 root 2w reg 3,3 5381017 1773647 /var/log/messages (deleted)
第二步:獲取資訊--從上面的資訊可以看到 pid 1283(syslogd)開啟檔案的檔案描述符為 2,/var/log/messages已被標記刪除了。
第三步:因此我利用i/o 重定向檢視 /proc/1283/fd/2 (fd下的每個以數字命名的檔案表示程序對應的檔案描述符)的同時恢復該檔案。
cat /proc/1283/fd/2 > /var/log/messages
Linux中lsof的使用
常用lsof i 來檢視 埠被什麼程式正在使用 使用lsof時若提示command not found則可以通過 yum install lsof y來安裝lsof 1.列出所有開啟的檔案 lsof 備註 如果不加任何引數,就會開啟所有被開啟的檔案,建議加上一下引數來具體定位 2.檢視誰正在使用某個...
Linux 中lsof 命令的使用
使用hexo時,本機以4000埠啟動server sh 3.2 hexo server info hexo is running at press ctrl c to stop.此時,4000埠被hexo占用,如果想檢視4000埠的占用情況,使用 sh 3.2 lsof i 4000 command...
lsof命令的使用
今天發現了這個命令lsof感覺蠻有用的尤其是對伺服器管理的人來說應該更加有用.這個命令可以看程序所需要開啟的檔案.當在lsof後邊沒有跟任何引數時,該命令將會列出當前系統中被所有程序開啟的所有檔案 下邊這幾個命令指出開啟某檔案的程序 lsof which httpd 那個程序在使用apache的可執...