linux lsof 用法簡介


1.簡介:

lsof(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 的示例輸出:

[root@localhost ~]# lsof 
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

lsof輸出各列信息的意義如下:

lsof輸出各列信息的意義如下:
COMMAND:進程的名稱 PID:進程標識符 USER:進程所有者 FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等 TYPE:文件類型,如DIR、REG等 DEVICE:指定磁盤的名稱 SIZE:文件的大小 NODE:索引節點(文件在磁盤上的標識) NAME:打開文件的確切名稱 

2.lsof常用用法:

2.1 監控網絡

查看指定端口有哪些進程在使用(lsof -i 列出所有的打開的網絡連接):

[root@localhost ~]# 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)

列出被某個進程打開所有的網絡文件:

[root@localhost ~]# lsof -i -a -p 29091
或者
[root@localhost ~]#lsof -i -a -c ssh

列出所有 tcp、udp 連接:

lsof -i tcp;
lsof -i udp;

列出所有 NFS 文件:

[root@E08-8th02 ~]# lsof -N -u www -a

2.2 監控打開的文件設備:

查看文件、設備被哪些進程占用 

[root@localhost ~]# lsof /dev/tty1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Xorg    1648 root    6u   CHR    4,1      0t0 5613 /dev/tty1

2.3 監控文件系統:

指定目錄、掛載點,可以看到有哪些進程打開了其下的文件: 

# 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

列出被指定進程名打開的文件

[root@localhost ~]# 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

2.4 監控進程:

指定進程號,可以查看該進程打開的文件: 

[root@localhost ~]# 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 這一列。 

2.5 監控用戶:

查看指定用戶打開的文件(lsof -u ^www可以排除某用戶): 

[root@localhost ~]# 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

2.6 監控應用程序:

查看指定程序打開的文件:

[root@localhost ~]# 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

2.7 組合邏輯查詢條件:

只有多個查詢條件都滿足, 用 "-a" 參數,默認是 -o 。

[root@localhost ~]# 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

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM