lsof(list open files)是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 (tcp) 和使用者資料報協議 (udp) 套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠檢視這個列表對系統監測以及排錯將是很有幫助的。
每行顯示乙個開啟的檔案,若不指定條件預設將顯示所有程序開啟的所有檔案。
lsof輸出各列資訊的意義如下:
command:程序的名稱 pid:程序識別符號
user:程序所有者
fd:檔案描述符,應用程式通過檔案描述符識別該檔案。如cwd、txt等 type:檔案型別,如dir、reg等
device:指定磁碟的名稱
size:檔案的大小
node:索引節點(檔案在磁碟上的標識)
name:開啟檔案的確切名稱
fd 列中的檔案描述符cwd 值表示應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改,txt 型別的檔案是程式**,如應用程式二進位制檔案本身或共享庫,如上列表中顯示的 /sbin/init 程式。
其次數值表示應用程式的檔案描述符,這是開啟該檔案時返回的乙個整數。如上的最後一行檔案/dev/initctl,其檔案描述符為 10。u 表示該檔案被開啟並處於讀取/寫入模式,而不是唯讀 ® 或只寫 (w) 模式。同時還有大寫 的w 表示該應用程式具有對整個檔案的寫鎖。該檔案描述符用於確保每次只能開啟乙個應用程式例項。初始開啟每個應用程式時,都具有三個檔案描述符,從 0 到 2,分別表示標準輸入、輸出和錯誤流。所以大多數應用程式所開啟的檔案的 fd 都是從 3 開始。
與 fd 列相比,type 列則比較直觀。檔案和目錄分別稱為 reg 和 dir。而chr 和 blk,分別表示字元和塊裝置;或者 unix、fifo 和 ipv4,分別表示 unix 域套接字、先進先出 (fifo) 佇列和網際協議 (ip) 套接字。
這裡主要用案例的形式來介紹lsof 命令的使用
1.列出所有開啟的檔案:
lsof
備註: 如果不加任何引數,就會開啟所有被開啟的檔案,建議加上一下引數來具體定位
2. 檢視誰正在使用某個檔案
lsof /filepath/file
3.遞迴檢視某個目錄的檔案資訊
lsof +d /filepath/filepath2/
備註: 使用了+d,對應目錄下的所有子目錄和檔案都會被列出
4. 比使用+d選項,遍歷檢視某個目錄的所有檔案資訊 的方法
lsof | grep 『/filepath/filepath2/』
5. 列出某個使用者開啟的檔案資訊
lsof -u username
備註: -u 選項,u其實是user的縮寫
6. 列出某個程式所開啟的檔案資訊
lsof -c mysql
備註: -c 選項將會列出所有以mysql開頭的程式的檔案,其實你也可以寫成lsof | grep mysql,但是第一種方法明顯比第二種方法要少打幾個字元了
7. 列出多個程式多開啟的檔案資訊
lsof -c mysql -c apache
8. 列出某個使用者以及某個程式所開啟的檔案資訊
lsof -u test -c mysql
9. 列出除了某個使用者外的被開啟的檔案資訊
lsof -u ^root
備註:^這個符號在使用者名稱之前,將會把是root使用者開啟的程序不讓顯示
10. 通過某個程序號顯示該進行開啟的檔案
lsof -p 1
11. 列出多個程序號對應的檔案資訊
lsof -p 123,456,789
12. 列出除了某個程序號,其他程序號所開啟的檔案資訊
lsof -p ^1
13 . 列出所有的網路連線
lsof -i
14. 列出所有tcp 網路連線資訊
lsof -i tcp
15. 列出所有udp網路連線資訊
lsof -i udp
16. 列出誰在使用某個埠
lsof -i :3306
17. 列出誰在使用某個特定的udp埠
lsof -i udp:55
特定的tcp埠
lsof -i tcp:80
18. 列出某個使用者的所有活躍的網路埠
lsof -a -u test -i
19. 列出所有網路檔案系統
lsof -n
20.網域名稱socket檔案
lsof -u
21.某個使用者組所開啟的檔案資訊
lsof -g 5555
22. 根據檔案描述列出對應的檔案資訊
lsof -d description(like 2)
23. 根據檔案描述範圍列出檔案資訊
lsof -d 2-3
後端開發核心技術 第7章網路IO模型 poll
include intpoll struct pollfd fds,unsigned int nfds,int timeout 1 fds 指向乙個結構體陣列的第0個元素的指標,每個陣列元素都是乙個struct pollfd結構,用於指定測試某個給定的fd的條件 2 nfds 表示fds結構體陣列的...
後端開發核心技術 第5章除錯 strace
所有作業系統在其核心都有一些內建的函式,這些函式可以用來完成一些系統級別的功能,這些函式被稱為系統呼叫,這些函式代表了使用者空間到核心空間的一種轉換 例如使用者空間呼叫open函式,在核心空間中則會呼叫sys open。系統呼叫並不直接返回錯誤碼,而是將錯誤碼放入到乙個名為errno的全域性變數中。...
後端開發核心技術 第4章編譯 靜態鏈結和動態連線
add.h ifndef add h define add h intadd int a,int b endif add.cpp include add.h intadd int a,int b sub.h ifndef sub h define sub h intsub int a,int b e...