Linux 系统管理命令 - lsof - 查看进程打开的文件
命令详解
重要星级:
★★★★★
功能说明:
全名为 list open files,也就是列举系统中已经被打开的文件,通过 lsof 命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
语法格式:
lsof [option]
lsof [选项]
说明:
在 lsof 命令及后面的选项里,每个元素之间都至少要有一个空格。
选项说明:
-c <进程名>: 显示指定的进程名所打开的文件 -p <进程号>: 显示指定的进程号所打开的文件 -i :通过监听指定的协议、端口和主机等信息,显示符合条件的进程信息 -u:显示指定用户使用的文件 -U:显示所有 socket 文件
使用范例:
显示使用文件的进程 ( lsof 文件名 ):
[root@localhost :~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 1034 root 6w REG 253,0 170555 53630778 /var/log/messages
如果想知道某个特定的文件是由哪个进程在使用,就可以通过 lsof 文件名 的方式来得到。从上面的输出可以得知,/var/log/messages 文件是由 rsyslogd进程在使用。
输出中每列的含义具体如下:
command :命令,进程的名称 pid :进程号 user :进程的所有者 fd : 0 :标准输出。 1 :标准输入。 2 :标准错误。 u :该文件被打开并处于 "读取/写入" 模式。 r :该文件被打开并处于 "只读" 模式。 w :该文件被打开并处于 "写入" 模式。 type :文件类型,REG (regular) 为普通文件。 device :指定磁盘的名称。 size/off :文件的大小 node :索引节点 name :文件名称
显示指定进程所打开的文件 ( lsof -c rsyslog ):
[root@localhost :~]# lsof -c rsyslog COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 1030 root cwd DIR 253,0 224 64 / rsyslogd 1030 root rtd DIR 253,0 224 64 / rsyslogd 1030 root txt REG 253,0 663960 201811 /usr/sbin/rsyslogd
显示指定进程号所打开的文件 ( lsof -p 1030 ):
[root@localhost :~]# lsof -p 1030 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 1030 root cwd DIR 253,0 224 64 / rsyslogd 1030 root rtd DIR 253,0 224 64 / rsyslogd 1030 root txt REG 253,0 663960 201811 /usr/sbin/rsyslogd
监听指定的协议、端口和主机等信息,显示符合条件的进程信息:
语法格式: lsof -i [4,6] [protocol] [@hostname] [:service|port]
含义如下:
4, 6 :4代表 IPv4,6代表 IPv6。 protocol :传输协议,可以是 TCP 或 UDP。 hostname :主机名称或者 IP 地址。 service :进程的服务名,例如 NFS、SSH 或 FTP 等。 port :系统中与服务对应的端口号。例如 HTTP 服务默认对应的端口号为80,SSH 服务默认对应的端口号为22。
使用范例:
[root@localhost :~]# lsof -i # 查看所有进程 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 667 chrony 1u IPv4 17205 0t0 UDP localhost:323 chronyd 667 chrony 2u IPv6 17206 0t0 UDP localhost:323 dhclient 836 root 6u IPv4 19452 0t0 UDP *:bootpc sshd 1029 root 3u IPv4 19989 0t0 TCP *:ssh (LISTEN) sshd 1029 root 4u IPv6 19991 0t0 TCP *:ssh (LISTEN) master 1205 root 13u IPv4 20341 0t0 TCP localhost:smtp (LISTEN) master 1205 root 14u IPv6 20342 0t0 TCP localhost:smtp (LISTEN) sshd 1314 root 3u IPv4 21642 0t0 TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED) [root@localhost :~]# lsof -i tcp # 显示所有 tcp 网络连接的进程信息 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1029 root 3u IPv4 19989 0t0 TCP *:ssh (LISTEN) sshd 1029 root 4u IPv6 19991 0t0 TCP *:ssh (LISTEN) master 1205 root 13u IPv4 20341 0t0 TCP localhost:smtp (LISTEN) master 1205 root 14u IPv6 20342 0t0 TCP localhost:smtp (LISTEN) sshd 1314 root 3u IPv4 21642 0t0 TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED) [root@localhost :~]# lsof -i :22 # 显示端口为22的进程。(这条命令很常用!) COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1029 root 3u IPv4 19989 0t0 TCP *:ssh (LISTEN) sshd 1029 root 4u IPv6 19991 0t0 TCP *:ssh (LISTEN) sshd 1314 root 3u IPv4 21642 0t0 TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED) [root@localhost :~]# lsof -i tcp:22 # 显示同时满足 TCP 和端口为22的进程。 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1029 root 3u IPv4 19989 0t0 TCP *:ssh (LISTEN) sshd 1029 root 4u IPv6 19991 0t0 TCP *:ssh (LISTEN) sshd 1314 root 3u IPv4 21642 0t0 TCP localhost.localdomain:ssh->192.168.61.1:43834 (ESTABLISHED)
显示指定用户使用的文件:
[root@localhost :~]# lsof -u root # 使用 -u 选项显示 root 用户使用的文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 224 64 / systemd 1 root rtd DIR 253,0 224 64 / systemd 1 root txt REG 253,0 1612144 510318 /usr/lib/systemd/systemd systemd 1 root mem REG 253,0 20112 96164 /usr/lib64/libuuid.so.1.3.0 systemd 1 root mem REG 253,0 261488 96173 /usr/lib64/libblkid.so.1.1.0 systemd 1 root mem REG 253,0 90664 51273 /usr/lib64/libz.so.1.2.7 systemd 1 root mem REG 253,0 157424 96153 /usr/lib64/liblzma.so.5.2.2 systemd 1 root mem REG 253,0 23968 96253 /usr/lib64/libcap-ng.so.0.0.0 systemd 1 root mem REG 253,0 19896 78793 /usr/lib64/libattr.so.1.1.0 systemd 1 root mem REG 253,0 19776 49344 /usr/lib64/libdl-2.17.so systemd 1 root mem REG 253,0 402384 78806 /usr/lib64/libpcre.so.1.2.0 systemd 1 root mem REG 253,0 2173512 49338 /usr/lib64/libc-2.17.so systemd 1 root mem REG 253,0 144792 49364 /usr/lib64/libpthread-2.17.so ...
显示所有 socket 文件:
[root@localhost :~]# lsof -U # 使用 -U 选项显示所有 socket 文件 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 12u unix 0xffff8a5835d74800 0t0 13622 /run/systemd/private systemd 1 root 23u unix 0xffff8a583668e800 0t0 9294 /run/systemd/notify systemd 1 root 24u unix 0xffff8a5835d75000 0t0 13644 /run/systemd/shutdownd systemd 1 root 25u unix 0xffff8a583668f000 0t0 9296 /run/systemd/cgroups-agent systemd 1 root 26u unix 0xffff8a5835d70800 0t0 13653 /run/lvm/lvmpolld.socket systemd 1 root 28u unix 0xffff8a583668e400 0t0 9311 /run/systemd/journal/stdout systemd 1 root 29u unix 0xffff8a583668ec00 0t0 9314 /run/systemd/journal/socket systemd 1 root 30u unix 0xffff8a5836218000 0t0 9316 /dev/log systemd 1 root 31u unix 0xffff8a5835d72000 0t0 13770 /run/lvm/lvmetad.socket systemd 1 root 35u unix 0xffff8a5835d73000 0t0 13837 /run/udev/control systemd 1 root 36u unix 0xffff8a5835d70c00 0t0 13853 socket systemd 1 root 37u unix 0xffff8a5835dab000 0t0 16819 /run/dbus/system_bus_socket systemd 1 root 38u unix 0xffff8a5836116800 0t0 14433 /run/systemd/journal/stdout systemd 1 root 39u unix 0xffff8a5836113800 0t0 14435 /run/systemd/journal/stdout systemd 1 root 40u unix 0xffff8a5835e31000 0t0 17026 socket systemd 1 root 41u unix 0xffff8a583809d000 0t0 18626 /run/systemd/journal/stdout systemd 1 root 43u unix 0xffff8a583668f400 0t0 16260 /run/systemd/journal/stdout