说明
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
...