说明

  lsof命令的全称为:list open file,也就是列出系统中已经打开的文件,通过该命令就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
  如果系统中没有lsof名,可以使用后面的命令进行安装:yum -y install lsof

基本格式

  lsof [option]

监听指定协议、端口和主机等信息格式

  lsof -i [46] [protocol][@hostname][:service|port]

各项的含义:

  • 46:4代表IPv4,6代表IPv6
  • protocol:传输协议,可以是TCP或者UDP
  • hostname:主机名或者IP地址
  • service:进程的服务号,如:SSH、FTP等
  • port:系统中与服务对应的端口号
常用参数说明
  • -c<进程名>:显示指定进程名所打开的文件
  • -p<进程号>:显示指定进程号所打开的文件
  • -i:通过监听指定的协议、端口和主机等信息,显示符合条件的进程信息
  • -u:显示指定用户使用的文件
  • -U:显示所有socket文件
示例

1、显示使用文件的进程
如果想知道某个指定的文件是有哪个进程在使用,可以通过”lsof 文件名”来查看。

[root@localhost ~]# lsof /var/log/messages
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
rsyslogd 853 root    4w   REG  253,1    40869 7250440 /var/log/messages

对上面每列进行解释说明:

  • COMMAND:命令,进程的名称
  • PID:进程号
  • USER:进程的所有者
  • FD:文件描述符
  • TYPE:文件类型,REG为不同文件
  • DEVICE:指定磁盘的名称
  • SIZE/OFF:文件的大小
  • NODE:索引节点
  • NAME:文件名称

2、显示指定进程所打开的文件

[root@localhost ~]# lsof -c rsyslog
COMMAND  PID USER   FD      TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 853 root  cwd       DIR  253,1     4096      128 /
rsyslogd 853 root  rtd       DIR  253,1     4096      128 /
rsyslogd 853 root  txt       REG  253,1   555392 67824457 /usr/sbin/rsyslogd
rsyslogd 853 root  mem       REG   0,18  6422528    13012 /run/log/journal/65bff0ae72184425ac3afb8eee8079f8/system.journal
rsyslogd 853 root  mem       REG  253,1    68192 70138441 /usr/lib64/libbz2.so.1.0.6
rsyslogd 853 root  mem       REG  253,1    91448 67265034 /usr/lib64/libelf-0.158.so
...

3、显示指定进程号所打开的文件

[root@localhost ~]# lsof -p 853
COMMAND  PID USER   FD      TYPE DEVICE SIZE/OFF     NODE NAME
rsyslogd 853 root  cwd       DIR  253,1     4096      128 /
rsyslogd 853 root  rtd       DIR  253,1     4096      128 /
rsyslogd 853 root  txt       REG  253,1   555392 67824457 /usr/sbin/rsyslogd
rsyslogd 853 root  mem       REG   0,18  6422528    13012 /run/log/journal/65bff0ae72184425ac3afb8eee8079f8/system.journal
rsyslogd 853 root  mem       REG  253,1    68192 70138441 /usr/lib64/libbz2.so.1.0.6
...

4、查看所有进程

[root@localhost ~]# lsof -i
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  850 avahi   12u  IPv4  15617      0t0  UDP *:mdns 
avahi-dae  850 avahi   13u  IPv4  15618      0t0  UDP *:39550 
sshd      1100  root    3u  IPv4  18112      0t0  TCP *:ssh (LISTEN)
sshd      1100  root    4u  IPv6  18114      0t0  TCP *:ssh (LISTEN)
nginx     1642  root    6u  IPv4  18186      0t0  TCP *:http (LISTEN)
nginx     1646 nginx    6u  IPv4  18186      0t0  TCP *:http (LISTEN)
mysqld    2147 mysql   15u  IPv6  18596      0t0  TCP *:mysql (LISTEN)
php-fpm   2163  root    8u  IPv4  18563      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   2164 nginx    0u  IPv4  18563      0t0  TCP localhost:cslistener (LISTEN)
php-fpm   2165 nginx    0u  IPv4  18563      0t0  TCP localhost:cslistener (LISTEN)
mongod    2168  root   11u  IPv4  18579      0t0  TCP *:27017 (LISTEN)
sshd      2222  root    3u  IPv4  18853      0t0  TCP 192.168.71.108:ssh->192.168.71.1:50699 (ESTABLISHED)

5、查看指定协议和端口的进程

[root@localhost ~]# lsof -i tcp:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1100 root    3u  IPv4  18112      0t0  TCP *:ssh (LISTEN)
sshd    1100 root    4u  IPv6  18114      0t0  TCP *:ssh (LISTEN)
sshd    2222 root    3u  IPv4  18853      0t0  TCP 192.168.71.108:ssh->192.168.71.1:50699 (ESTABLISHED)

6、显示指定用户使用的文件

[root@localhost ~]# lsof -u nginx
COMMAND  PID  USER   FD      TYPE             DEVICE  SIZE/OFF      NODE NAME
nginx   1646 nginx  cwd       DIR              253,1      4096       128 /
nginx   1646 nginx  rtd       DIR              253,1      4096       128 /
nginx   1646 nginx  txt       REG              253,1   5656851  67351015 /apps/nginx-1.12.2/sbin/nginx
nginx   1646 nginx  mem       REG              253,1     62184  68431504 /usr/lib64/libnss_files-2.17.so
nginx   1646 nginx  mem       REG              253,1    155744  67277017 /usr/lib64/libselinux.so.1
nginx   1646 nginx  mem       REG              253,1    111080  68431514 /usr/lib64/libresolv-2.17.so
nginx   1646 nginx  mem       REG              253,1     15688  67292495 /usr/lib64/libkeyutils.so.1.5
nginx   1646 nginx  mem       REG              253,1     58728  67503425 /usr/lib64/libkrb5support.so.0.1
nginx   1646 nginx  mem       REG              253,1    210768  67369346 /usr/lib64/libk5crypto.so.3.1
nginx   1646 nginx  mem       REG              253,1     15848  67277014 /usr/lib64/libcom_err.so.2.1
nginx   1646 nginx  mem       REG              253,1    963504  67369356 /usr/lib64/libkrb5.so.3.3
...

7、显示所有socket文件

[root@localhost ~]# lsof -U
COMMAND    PID    USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
systemd      1    root   12u  unix 0xffff880036658b40      0t0 12609 /run/systemd/private
systemd      1    root   22u  unix 0xffff88003c176180      0t0  7512 /run/systemd/notify
systemd      1    root   23u  unix 0xffff88003c176540      0t0  7514 /run/systemd/cgroups-agent
systemd      1    root   24u  unix 0xffff88003c177080      0t0  7532 /run/systemd/journal/stdout
systemd      1    root   27u  unix 0xffff88003c177440      0t0  7535 /run/systemd/journal/socket
systemd      1    root   28u  unix 0xffff88003c177800      0t0  7537 /dev/log
...