lsof命令詳解
一、命令概述
lsof,全稱為“l(fā)ist open files”,是一個在Linux和Unix系統(tǒng)上非常有用的命令行工具,用于列出當前系統(tǒng)打開的文件。這里的“文件”不僅僅指傳統(tǒng)意義上的數(shù)據(jù)文件,還包括網(wǎng)絡(luò)連接、硬件設(shè)備等。通過lsof,用戶可以查看哪些進程打開了哪些文件,這對于診斷程序錯誤、系統(tǒng)掛起等問題特別有用。
二、功能作用
查看進程打開的文件:可用于查看程序訪問情況,如哪些程序正在訪問某個特定文件。
查看網(wǎng)絡(luò)連接信息:可以查看所有打開的網(wǎng)絡(luò)連接和套接字,適用于網(wǎng)絡(luò)監(jiān)控和故障排除。
快速查看目錄下被打開的文件:可以快速定位目錄下哪些文件被哪些進程打開。
與其他命令組合定位程序問題:如與strace合用追蹤程序訪問系統(tǒng)調(diào)用。
查看用戶打開的文件信息:可以指定用戶查看其打開的文件情況。
查看偽設(shè)備、管道等打開的文件情況:如內(nèi)存映射文件、設(shè)備文件等。
三、常見參數(shù)
-a:表示兩個參數(shù)都必須滿足時才顯示結(jié)果。
-c <進程名>:列出指定進程所打開的文件。
-g:列出GID號進程詳情。
-d <文件號>:列出占用該文件號的進程。
+d <目錄>:列出目錄下被打開的文件。
+D <目錄>:遞歸列出目錄下被打開的文件。
-n <目錄>:列出使用NFS的文件。
-i <條件>:列出符合條件的進程(如IP地址、端口號等)。
-p <進程號>:列出指定進程號所打開的文件。
-u:列出UID號進程詳情。
四、輸出信息說明
lsof命令的輸出信息包含多列,每列都有其特定的含義:
COMMAND:進程的名稱或命令名。
PID:進程ID,標識正在打開文件的進程。
USER:進程的用戶名,表示擁有該進程的用戶。
FD:文件描述符,描述進程打開文件的方式。常見的標識符包括cwd(當前工作目錄)、txt(可執(zhí)行文件)、mem(內(nèi)存映射文件)等。
TYPE:文件類型,指示打開文件的類型,包括普通文件、目錄、套接字等。
DEVICE:文件所在的設(shè)備號和設(shè)備的名稱。
SIZE/OFF:文件大小或文件偏移量。
NODE:文件的節(jié)點號。
NAME:打開文件的路徑和名稱。
五、注意事項
要查看所有用戶的文件信息,通常需要root權(quán)限。
lsof的輸出可能非常龐大,通常需要結(jié)合管道命令或其他過濾器使用。
通過lsof命令,管理員可以方便地查看系統(tǒng)打開的文件情況,從而進行故障排查和系統(tǒng)監(jiān)控。