linux下的lsof的使用及其在取證分析時的應用

2021-07-13 12:44:37 字數 2540 閱讀 2906

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的可執...