lsof,list open files,
是一個列出目前系統打開檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以通路正常資料,還可以通路網絡連接配接和硬體。
指令格式:
lsof [參數][檔案]
指令功能:
用于檢視程序打開的檔案,打開檔案的程序,程序打開的端口(tcp、udp)。
lsof 需要通路核心記憶體和各種檔案,是以通常需要root使用者執行。
指令參數:
-a 列出打開檔案存在的程序
-c<程序名> 列出指定程序所打開的檔案
-g 列出gid号程序詳情
-d<檔案号> 列出占用該檔案号的程序
+d<目錄> 列出目錄下被打開的檔案
+d<目錄> 遞歸列出目錄下被打開的檔案,可以遞歸檢視某個目錄的檔案資訊
-n<目錄> 列出使用nfs的檔案
-i<條件> 列出符合條件的程序。(4、6、協定、:端口、 @ip )
-p<程序号> 列出指定程序号所打開的檔案
-u username 檢視使用者打開哪些檔案
-h 顯示幫助資訊
-v 顯示版本資訊
lsof +|-r [t] 控制lsof不斷重複執行,預設是15s重新整理
-r,lsof會永遠不斷的執行,直到收到中斷信号
+r,lsof會一直執行,直到沒有檔案被顯示
例:檢視目前ftp連接配接的情況,每隔3秒不斷執行:lsof -i [email protected]:ftp -r 3
使用執行個體:
1.直接使用lsof 不加任何參數
bingyue@ubuntu:/$ sudo lsof | head -30

command:程序的名稱
pid:程序辨別符
ppid:父程序辨別符(需要指定-r參數)
user:程序所有者
pgid:程序所屬組
fd:檔案描述符,應用程式通過檔案描述符識别該檔案。如cwd、txt等
(1)cwd:表示current work dirctory,即:應用程式的目前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改
(2)txt :該類型的檔案是程式代碼,如應用程式二進制檔案本身或共享庫,如上清單中顯示的 /sbin/init 程式
(3)lnn:library references (aix);
(4)er:fd information error (see name column);
(5)jld:jail directory (freebsd);
(6)ltx:shared library text (code and data);
(7)mxx :hex memory-mapped type number xx.
(8)m86:dos merge mapped file;
(9)mem:memory-mapped file;
(10)mmap:memory-mapped device;
(11)pd:parent directory;
(12)rtd:root directory;
(13)tr:kernel trace file (openbsd);
(14)v86 vp/ix mapped file;
(15)0:表示标準輸出
(16)1:表示标準輸入
(17)2:表示标準錯誤
一般在标準輸出、标準錯誤、标準輸入後還跟着檔案狀态模式:r、w、u等
(1)u:表示該檔案被打開并處于讀取/寫入模式
(2)r:表示該檔案被打開并處于隻讀模式
(3)w:表示該檔案被打開并處于
(4)空格:表示該檔案的狀态模式為unknow,且沒有鎖定
(5)-:表示該檔案的狀态模式為unknow,且被鎖定
同時在檔案狀态模式後面,還跟着相關的鎖
(1)n:for a solaris nfs lock of unknown type;
(2)r:for read lock on part of the file;
(3)r:for a read lock on the entire file;
(4)w:for a write lock on part of the file;(檔案的部分寫鎖)
(5)w:for a write lock on the entire file;(整個檔案的寫鎖)
(6)u:for a read and write lock of any length;
(7)u:for a lock of unknown type;
(8)x:for an sco openserver xenix lock on part of the file;
(9)x:for an sco openserver xenix lock on the entire file;
(10)space:if there is no lock.
type:檔案類型,如dir、reg等,常見的檔案類型
(1)dir:表示目錄
(2)chr:表示字元類型
(3)blk:塊裝置類型
(4)unix: unix 域套接字
(5)fifo:先進先出 (fifo) 隊列
(6)ipv4:網際協定 (ip) 套接字
device:指定磁盤的名稱
size:檔案的大小
node:索引節點(檔案在磁盤上的辨別)
name:打開檔案的确切名稱
2.檢視誰正在使用某個檔案
lsof /bin/bash
清單資訊會顯示user,是以可以通過這個指令檢視誰在使用目前的目錄
3.lsof abc.txt 顯示開啟檔案abc.txt的程序
lsof 目錄名 查找誰在使用檔案目錄系統
lsof -i :22 知道22端口被哪個程序占用
lsof -c abc 顯示abc程序現在打開的檔案
lsof -g gid 顯示歸屬gid的程序情況
lsof -n 不将ip轉換為hostname,預設是不加上-n參數
lsof -p 12 看程序号為12的程序打開了哪些檔案
lsof -u username 檢視使用者打開哪些檔案
lsof -i @192.168.106.128 檢視遠端已打開的網絡連接配接(連接配接到192.168.106.128)