linux下lsof命令使用方法
阿新 • • 發佈:2018-12-15
lsof命令簡介
lsof 是 linux 下的一個非常實用的系統級的監控、診斷工具,它的意思是 List Open Files,是一個用於列出當前系統開啟檔案的工具。在命令行當中只需輸入 lsof 就可以生成大量的資訊,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能。
常用引數:
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 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4地址 service --> /etc/service中的 service name (可以不只一個) port --> 埠號 (可以不只一個)
lsof的示例輸出:
lsof輸出各列資訊的意義如下:
COMMAND:程序的名稱 PID:程序識別符號
USER:程序所有者
FD:檔案描述符,應用程式通過檔案描述符識別該檔案。如cwd、txt等 TYPE:檔案型別,如DIR、REG等
DEVICE:指定磁碟的名稱
SIZE:檔案的大小
NODE:索引節點(檔案在磁碟上的標識)
NAME:開啟檔案的確切名稱
lsof常用用法
監控網路
檢視指定埠有哪些程序在使用(lsof -i 列出所有的開啟的網路連線):
[[email protected] ~]# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 17909 root 3u IPv4 2089344 0t0 TCP wx.9888.cn:ssh->bogon:61574 (ESTABLISHED) sshd 17911 www 3u IPv4 2089344 0t0 TCP wx.9888.cn:ssh->bogon:61574 (ESTABLISHED) sshd 17933 root 3u IPv4 277791 0t0 TCP *:ssh (LISTEN) sshd 17933 root 4u IPv6 277793 0t0 TCP *:ssh (LISTEN)
使用@host來顯示指定到指定主機的連線
lsof [email protected]
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)
使用@host:port顯示基於主機與埠的連線
lsof [email protected]:22
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)
列出被某個程序開啟所有的網路檔案:
[[email protected] ~]# lsof -i -a -p 29091
或者
[[email protected] ~]#lsof -i -a -c ssh
列出所有 tcp、udp 連線:
lsof -i tcp
lsof -i udp
列出所有 NFS 檔案:
[[email protected] ~]# lsof -N -u www -a
監控開啟的檔案裝置:
檢視檔案、裝置被哪些程序佔用
[[email protected] ~]# lsof /dev/tty1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xorg 1648 root 6u CHR 4,1 0t0 5613 /dev/tty1
監控檔案系統
指定目錄、掛載點,可以看到有哪些程序打開了其下的檔案:
lsof /data/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 15983 jian cwd DIR 8,5 4096 8252 /data/backup
#這在 umount 某個檔案系統失敗時非常有用(通常會報該 FS is busy)
列出某個目錄(掛載點 如 /home 也行)下被開啟的檔案:
lsof +D /var/log/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 488 syslog 1w REG 8,1 1151 268940 /var/log/syslog
rsyslogd 488 syslog 2w REG 8,1 2405 269616 /var/log/auth.log
console-k 144 root 9w REG 8,1 10871 269369 /var/log/ConsoleKit/history
列出被指定程序名開啟的檔案
[[email protected] ~]# lsof -c ssh -c init
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 150352 2228266 /sbin/init
init 1 root mem REG 253,0 65928 1966110 /lib64/libnss_files-2.12.so
init 1 root DEL REG 253,0 1966094 /lib64/libc-2.12.so
監控程序
指定程序號,可以檢視該程序開啟的檔案:
[[email protected] ~]# lsof -p 29084
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 29084 www cwd DIR 253,0 4096 2359841 /apps/product/nginx/conf
nginx 29084 www rtd DIR 253,0 4096 2 /
nginx 29084 www txt REG 253,0 5497249 2359840 /apps/product/nginx/sbin/nginx
當你想要殺掉某個使用者所有開啟的檔案、裝置,你可以這樣:
kill -9 `lsof -t -u www`
#此處 -t 的作用是單獨的列出 程序 id 這一列。
監控使用者
檢視指定使用者開啟的檔案(lsof -u ^www可以排除某使用者)
[[email protected] ~]# lsof -u www
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 2409 www cwd DIR 253,0 4096 2 /
tail 2409 www rtd DIR 253,0 4096 2 /
tail 2409 www txt REG 253,0 61368 670089 /usr/bin/tail
tail 2409 www mem REG 253,0 156928 1972676 /lib64/ld-2.12.so
監控應用程式
檢視指定程式開啟的檔案
[[email protected] ~]# lsof -c nginx
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 28624 root cwd DIR 253,0 4096 2359841 /apps/product/nginx/conf
nginx 28624 root rtd DIR 253,0 4096 2 /
nginx 28624 root txt REG 253,0 5497249 2359840 /apps/product/nginx/sbin/nginx
組合邏輯查詢條件
只有多個查詢條件都滿足, 用 "-a" 引數,預設是 -o
[[email protected] ~]# lsof -a -c bash -u root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 25602 root cwd DIR 253,0 4096 1572865 /root
bash 25602 root rtd DIR 253,0 4096 2 /
bash 25602 root txt REG 253,0 938832 1703983 /bin/bash
bash 25602 root mem REG 253,0 156928 1972676 /lib64/ld-2.12.so
bash 25602 root mem REG 253,0 22536 1972681 /lib64/libdl-2.12.so