当前位置:首页>Linux>Linux lsof 命令详解:进程与文件监控实战

Linux lsof 命令详解:进程与文件监控实战

  • 2026-09-02 17:01:52
Linux lsof 命令详解:进程与文件监控实战

1.什么是lsof

lsof(list open files)是一个查看当前系统文件的工具。Linux系统中的所有事物都以文件的形式存在,包括常规数据、网络连接和硬件等。lsof工具可以列出当前系统上由进程打开的所有文件和网络连接,以及这些文件和网络连接的详细信息,如文件描述符、进程ID、用户、文件类型、文件名、网络连接等。这些信息对于排查文件访问和网络连接问题非常有用,也可以帮助诊断性能问题和释放资源。

2.lsof打开文件类型

lsof打开的文件可以是:

文件类型表示方式
普通文件
REG
目录
DIR
网络文件系统的文件
NFS
字符设备
CHR
块设备
BLK
函数库
LIB
套接字
SOCK
管道
FIFO
命名管道
FIFO
符号链接
LNK
网络socket
INET
Unix域名socket
unix

3.lsof命令格式及参数

lsof命令的基本格式为:

lsof [options]

其中,options为lsof的不同参数,用于指定要显示的信息、过滤结果等。

以下是一些常用的lsof参数:

参数描述
-c
仅显示匹配进程名的结果
-p
仅显示匹配进程ID的结果
-u
仅显示匹配用户名的结果
-g
仅显示匹配用户组的结果
-i
仅显示匹配网络端口的结果
-a
显示所有匹配条件的结果
-t
仅显示进程ID
-F
以指定格式输出结果
-h
不显示表头
-n
不解析主机名
-P
不解析端口号
-s
仅显示匹配协议的结果
-V
显示lsof版本信息

以上只是一部分常用的lsof参数,还有很多其他的参数可以自行查阅lsof的帮助文档。

4.lsof使用实例

4.1无任何参数

在不加任何参数的情况下,lsof会列出所有打开的文件和进程的详细信息。这可能会产生大量的输出,包括很多不必要的信息,因此建议使用其他参数来过滤和限制输出。如果需要列出所有打开的文件和进程的信息,可以使用以下命令:

[root@mynewjenkis ~]# lsof | more
COMMAND     PID  TID           USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1                root  cwd       DIR              253,323864 /
systemd       1                root  rtd       DIR              253,323864 /
systemd       1                root  txt       REG              253,3162860867791946 /usr/lib/systemd/systemd
systemd       1                root  mem       REG              253,32006433717139 /usr/lib64/libuuid.so.1.3.0
systemd       1                root  mem       REG              253,326557634213169 /usr/lib64/libblkid.so.1.1.0
systemd       1                root  mem       REG              253,39024833717133 /usr/lib64/libz.so.1.2.7
systemd       1                root  mem       REG              253,315742433717155 /usr/lib64/liblzma.so.5.2.2
systemd       1                root  mem       REG              253,32396833717159 /usr/lib64/libcap-ng.so.0.0.0
systemd       1                root  mem       REG              253,31989633717355 /usr/lib64/libattr.so.1.1.0
systemd       1                root  mem       REG              253,31924833656645 /usr/lib64/libdl-2.17.so
systemd       1                root  mem       REG              253,340238433717119 /usr/lib64/libpcre.so.1.2.0
systemd       1                root  mem       REG              253,3215624033639071 /usr/lib64/libc-2.17.so
systemd       1                root  mem       REG              253,314214433656665 /usr/lib64/libpthread-2.17.so
systemd       1                root  mem       REG              253,38877633554509 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd       1                root  mem       REG              253,34371233656669 /usr/lib64/librt-2.17.so
systemd       1                root  mem       REG              253,327779234213190 /usr/lib64/libmount.so.1.1.0
systemd       1                root  mem       REG              253,39180033717318 /usr/lib64/libkmod.so.2.2.10
systemd       1                root  mem       REG              253,312718433717162 /usr/lib64/libaudit.so.1.0.0
systemd       1                root  mem       REG              253,36168034354248 /usr/lib64/libpam.so.0.83.1
systemd       1                root  mem       REG              253,32004833717359 /usr/lib64/libcap.so.2.22
systemd       1                root  mem       REG              253,315574433717131 /usr/lib64/libselinux.so.1
systemd       1                root  mem       REG              253,316331233639064 /usr/lib64/ld-2.17.so
systemd       1                root  mem       REG              253,3141615468900363 /etc/selinux/targeted/contexts/files/file_contexts.bin
systemd       1                root  mem       REG              253,329668010597 /etc/selinux/targeted/contexts/files/file_contexts.local.bin
systemd       1                root  mem       REG              253,34557768900365 /etc/selinux/targeted/contexts/files/file_contexts.homedirs.bin
systemd       1                root    0u      CHR                1,30t0       1028 /dev/null
systemd       1                root    1u      CHR                1,30t0       1028 /dev/null
systemd       1                root    2u      CHR                1,30t0       1028 /dev/null
systemd       1                root    3u  a_inode               0,1006415 [timerfd]
systemd       1                root    4u  a_inode               0,1006415 [eventpoll]
systemd       1                root    5u  a_inode               0,1006415 [signalfd]
systemd       1                root    6r      DIR               0,2109228 /sys/fs/cgroup/systemd
systemd       1                root    7u  a_inode               0,1006415 [timerfd]
systemd       1                root    8u  netlink                          0t0      10996 KOBJECT_UEVENT
systemd       1                root    9r      REG                0,309460 /proc/1/mountinfo
systemd       1                root   10r  a_inode               0,1006415 inotify
systemd       1                root   11r      REG                0,304026532019 /proc/swaps
systemd       1                root   12u     unix 0xffff8c2434cef2c00t0      10129 /run/systemd/private
……

lsof输出各列信息的意义如下:

  • COMMAND: 打开该文件或网络连接的进程的名称。
  • PID: 打开该文件或网络连接的进程的ID。
  • TID: 线程ID(如果有多线程)。
  • USER: 打开该文件或网络连接的进程的所有者。
  • FD: 文件描述符(File descriptor),是一个与文件或网络连接相关联的整数值。文件描述符可以是读取、写入、追加、定位等等,因此一个进程可以打开同一个文件的多个描述符。对于网络连接,文件描述符的格式为:IPv4/TCP@hostname:port 或 IPv6/TCP@[hostname]:port 或 unix@filename。
  • TYPE: 打开该文件或网络连接的类型,如REG(常规文件)、DIR(目录)、FIFO(命名管道)、CHR(字符设备)、BLK(块设备)、UNIX(Unix域套接字)、IPv4(IPv4套接字)等。
  • DEVICE: 设备的名称或主设备号和次设备号,对于网络连接为IP地址和端口号。
  • SIZE/OFF: 文件的大小或网络连接的偏移量。
  • NODE: 节点号,对于网络连接为远程主机名和端口号或本地套接字地址。对于文件则是索引节点号(Inode)或文件名。
4.2列出某个程序进程所打开的文件信息
[root@ctyun-mymobile ~]# lsof -c mysqld
COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
mysqld_sa 1229  root  cwd    DIR              202,24096923072 /www/server/mysql
mysqld_sa 1229  root  rtd    DIR              202,240962 /
mysqld_sa 1229  root  txt    REG              202,29645361705859 /usr/bin/bash
mysqld_sa 1229  root  mem    REG              202,21633121707642 /usr/lib64/ld-2.17.so
mysqld_sa 1229  root  mem    REG              202,2269701708218 /usr/lib64/gconv/gconv-modules.cache
mysqld_sa 1229  root  mem    REG              202,21745761708269 /usr/lib64/libtinfo.so.5.9
mysqld_sa 1229  root  mem    REG              202,2192481715559 /usr/lib64/libdl-2.17.so
mysqld_sa 1229  root  mem    REG              202,221565921707902 /usr/lib64/libc-2.17.so
mysqld_sa 1229  root  mem    REG              202,21061769281715553 /usr/lib/locale/locale-archive
mysqld_sa 1229  root  mem    REG              202,2615601715567 /usr/lib64/libnss_files-2.17.so
mysqld_sa 1229  root    0r   CHR                1,30t0      17 /dev/null
mysqld_sa 1229  root    1w   CHR                1,30t0      17 /dev/null
mysqld_sa 1229  root    2u  unix 0xffff93695bbc54000t0   21536 socket
mysqld_sa 1229  root  255r   REG              202,227868923102 /www/server/mysql/bin/mysqld_safe
mysqld    2122 mysql  cwd    DIR              202,24096938320 /www/server/data
……

-c 选项将会列出所有以mysql这个进程开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符。

4.3查找某个文件相关的进程
[root@mynewjenkis ~]# lsof /bin/bash
COMMAND   PID USER  FD   TYPE DEVICE SIZE/OFF  NODE NAME
ksmtuned  697 root txt    REG  253,396453627829 /usr/bin/bash
bash     6198 root txt    REG  253,396453627829 /usr/bin/bash
bash     7743 root txt    REG  253,396453627829 /usr/bin/bash
[root@mynewjenkis ~]# 
4.4列出某个用户打开的文件信息
[root@mynewjenkis ~]# lsof -u moonrong
COMMAND  PID     USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    8404 moonrong  cwd    DIR  253,5409667 /home/moonrong
bash    8404 moonrong  rtd    DIR  253,323864 /
bash    8404 moonrong  txt    REG  253,396453627829 /usr/bin/bash
bash    8404 moonrong  mem    REG  253,310617283227824 /usr/lib/locale/locale-archive
bash    8404 moonrong  mem    REG  253,36156033656657 /usr/lib64/libnss_files-2.17.so
bash    8404 moonrong  mem    REG  253,3215624033639071 /usr/lib64/libc-2.17.so
bash    8404 moonrong  mem    REG  253,31924833656645 /usr/lib64/libdl-2.17.so
bash    8404 moonrong  mem    REG  253,317457633717102 /usr/lib64/libtinfo.so.5.9
bash    8404 moonrong  mem    REG  253,316331233639064 /usr/lib64/ld-2.17.so
bash    8404 moonrong  mem    REG  253,312326733717113 /usr/share/locale/zh_CN/LC_MESSAGES/bash.mo
bash    8404 moonrong  mem    REG  253,32697067221303 /usr/lib64/gconv/gconv-modules.cache
bash    8404 moonrong    0u   CHR  136,00t0        3 /dev/pts/0
bash    8404 moonrong    1u   CHR  136,00t0        3 /dev/pts/0
bash    8404 moonrong    2u   CHR  136,00t0        3 /dev/pts/0
bash    8404 moonrong  255u   CHR  136,00t0        3 /dev/pts/0
[root@mynewjenkis ~]# 
4.5通过某个进程号显示该进程打开的文件
[root@ctyun-mymobile ~]# lsof -p 2122
COMMAND  PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
mysqld  2122 mysql  cwd    DIR              202,24096938320 /www/server/data
mysqld  2122 mysql  rtd    DIR              202,240962 /
mysqld  2122 mysql  txt    REG              202,227889560923100 /www/server/mysql/bin/mysqld
mysqld  2122 mysql  mem    REG              202,21633121707642 /usr/lib64/ld-2.17.so
mysqld  2122 mysql  DEL    REG               0,1122365 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122366 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122367 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122368 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122372 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122369 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122370 /[aio]
mysqld  2122 mysql  DEL    REG               0,1122371 /[aio]
mysqld  2122 mysql  mem    REG              202,21421441707928 /usr/lib64/libpthread-2.17.so
mysqld  2122 mysql  mem    REG              202,262641729167 /usr/lib64/libaio.so.1.0.1
mysqld  2122 mysql  mem    REG              202,2406001707906 /usr/lib64/libcrypt-2.17.so
……
4.6列出所有的网络连接
[root@mynewjenkis ~]# lsof -i
COMMAND    PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
rpcbind    603    rpc    6u  IPv4   170610t0  UDP *:sunrpc 
rpcbind    603    rpc    7u  IPv4   170620t0  UDP *:acmaint_transd 
rpcbind    603    rpc    8u  IPv4   170630t0  TCP *:sunrpc (LISTEN)
rpcbind    603    rpc    9u  IPv6   170640t0  UDP *:sunrpc 
rpcbind    603    rpc   10u  IPv6   170650t0  UDP *:acmaint_transd 
rpcbind    603    rpc   11u  IPv6   170660t0  TCP *:sunrpc (LISTEN)
chronyd    632 chrony    5u  IPv4   180590t0  UDP localhost:323
chronyd    632 chrony    6u  IPv6   180600t0  UDP localhost:323
avahi-dae  664  avahi   12u  IPv4   160620t0  UDP *:mdns 
avahi-dae  664  avahi   13u  IPv4   160630t0  UDP *:55498
cupsd     1063   root   11u  IPv6   211590t0  TCP localhost:ipp (LISTEN)
cupsd     1063   root   12u  IPv4   211600t0  TCP localhost:ipp (LISTEN)
sshd      1064   root    3u  IPv4   211450t0  TCP *:ssh (LISTEN)
sshd      1064   root    4u  IPv6   211540t0  TCP *:ssh (LISTEN)
dnsmasq   1495 nobody    3u  IPv4   248890t0  UDP *:bootps 
dnsmasq   1495 nobody    5u  IPv4   248920t0  UDP mynewjenkis:domain 
dnsmasq   1495 nobody    6u  IPv4   248930t0  TCP mynewjenkis:domain (LISTEN)
master    1508   root   13u  IPv4   249180t0  TCP localhost:smtp (LISTEN)
master    1508   root   14u  IPv6   249190t0  TCP localhost:smtp (LISTEN)
sshd      6170   root    3u  IPv4 25737490t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd      6170   root    8u  IPv6 25737920t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd      6170   root    9u  IPv4 25737930t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd      7735   root    3u  IPv4 25863010t0  TCP mynewjenkis:ssh->129.184.157.101:gttaua (ESTABLISHED)
sshd      7735   root    8u  IPv6 25863340t0  TCP localhost:6011 (LISTEN)
sshd      7735   root    9u  IPv4 25863350t0  TCP localhost:6011 (LISTEN)
[root@mynewjenkis ~]# 
4.7列出所有tcp 网络连接信息
[root@mynewjenkis ~]# lsof -i tcp
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
rpcbind  603    rpc    8u  IPv4   170630t0  TCP *:sunrpc (LISTEN)
rpcbind  603    rpc   11u  IPv6   170660t0  TCP *:sunrpc (LISTEN)
cupsd   1063   root   11u  IPv6   211590t0  TCP localhost:ipp (LISTEN)
cupsd   1063   root   12u  IPv4   211600t0  TCP localhost:ipp (LISTEN)
sshd    1064   root    3u  IPv4   211450t0  TCP *:ssh (LISTEN)
sshd    1064   root    4u  IPv6   211540t0  TCP *:ssh (LISTEN)
dnsmasq 1495 nobody    6u  IPv4   248930t0  TCP mynewjenkis:domain (LISTEN)
master  1508   root   13u  IPv4   249180t0  TCP localhost:smtp (LISTEN)
master  1508   root   14u  IPv6   249190t0  TCP localhost:smtp (LISTEN)
sshd    6170   root    3u  IPv4 25737490t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    6170   root    8u  IPv6 25737920t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    6170   root    9u  IPv4 25737930t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    7735   root    3u  IPv4 25863010t0  TCP mynewjenkis:ssh->129.184.157.101:gtaua (ESTABLISHED)
sshd    7735   root    8u  IPv6 25863340t0  TCP localhost:6011 (LISTEN)
sshd    7735   root    9u  IPv4 25863350t0  TCP localhost:6011 (LISTEN)
[root@mynewjenkis ~]# 
4.8列出谁在使用某个端口
[root@mynewjenkis ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    1064 root    3u  IPv4   211450t0  TCP *:ssh (LISTEN)
sshd    1064 root    4u  IPv6   211540t0  TCP *:ssh (LISTEN)
sshd    6170 root    3u  IPv4 25737490t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    7735 root    3u  IPv4 25863010t0  TCP mynewjenkis:ssh->129.184.157.101:gtaua (ESTABLISHED)
[root@mynewjenkis ~]# 
4.9列出某个用户的所有活跃的网络端口
[root@mynewjenkis ~]# lsof -a -u root -i
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
cupsd   1063 root   11u  IPv6   211590t0  TCP localhost:ipp (LISTEN)
cupsd   1063 root   12u  IPv4   211600t0  TCP localhost:ipp (LISTEN)
sshd    1064 root    3u  IPv4   211450t0  TCP *:ssh (LISTEN)
sshd    1064 root    4u  IPv6   211540t0  TCP *:ssh (LISTEN)
master  1508 root   13u  IPv4   249180t0  TCP localhost:smtp (LISTEN)
master  1508 root   14u  IPv6   249190t0  TCP localhost:smtp (LISTEN)
sshd    6170 root    3u  IPv4 25737490t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    6170 root    8u  IPv6 25737920t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    6170 root    9u  IPv4 25737930t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    7735 root    3u  IPv4 25863010t0  TCP mynewjenkis:ssh->129.184.157.101:gtaua (ESTABLISHED)
sshd    7735 root    8u  IPv6 25863340t0  TCP localhost:6011 (LISTEN)
sshd    7735 root    9u  IPv4 25863350t0  TCP localhost:6011 (LISTEN)
[root@mynewjenkis ~]# 
4.10根据文件描述列出对应的文件信息

要列出进程ID为1234的进程打开的文件描述符为3的文件信息,可以使用以下命令:

[root@mynewjenkis ~]# lsof -p 1234 -d 3
COMMAND    PID    USER   FD      TYPE             DEVICE SIZE/OFF      NODE NAME
systemd      1    root    3u  a_inode               0,1006415 [timerfd]
systemd-j  384    root    3u     unix 0xffff8c2434ce91000t0      9487 /run/systemd/journal/stdout
lvmetad    402    root    3u     unix 0xffff8c2434cef7000t0     13448 /run/lvm/lvmetad.socket
systemd-u  421    root    3u     unix 0xffff8c2434cefb400t0     13478 /run/udev/control
auditd     570    root    3u  netlink                         0t0     14286 AUDIT
audispd    572    root    3u     unix 0xffff8c2434ceaa800t0     14288 socket
rtkit-dae  601   rtkit    3u     sock                0,70t0     17124 protocol: UNIX
udisksd    602    root    3u     unix 0xffff8c2335d96e800t0     17223 socket
rpcbind    603     rpc    3u     unix 0xffff8c24396561c00t0     15767 /var/run/rpcbind.sock
……
4.11列出1号进程打开的文件
[root@mynewjenkis local]# lsof -p 1
COMMAND PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd   1 root  cwd       DIR              253,323864 /
systemd   1 root  rtd       DIR              253,323864 /
……
systemd   1 root    1u      CHR                1,30t0       1028 /dev/null
systemd   1 root    2u      CHR                1,30t0       1028 /dev/null
systemd   1 root    3u  a_inode               0,1006415 [timerfd]
systemd   1 root    4u  a_inode               0,1006415 [eventpoll]
systemd   1 root    5u  a_inode               0,1006415 [signalfd]
systemd   1 root    6r      DIR               0,2109228 /sys/fs/cgroup/systemd
systemd   1 root    7u  a_inode               0,1006415 [timerfd]
systemd   1 root    8u  netlink                         0t0      10996 KOBJECT_UEVENT
systemd   1 root    9r      REG                0,309460 /proc/1/mountinfo
systemd   1 root   10r  a_inode               0,1006415 inotify
systemd   1 root   11r      REG                0,304026532019 /proc/swaps
systemd   1 root   12u     unix 0xffff8c2434cef2c00t0      10129 /run/systemd/private
systemd   1 root   13u     unix 0xffff8c243783c4000t0      27380 /run/systemd/journal/stdout

最新文章

随机文章