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,3       238         64 /
systemd       1                root  rtd       DIR              253,3       238         64 /
systemd       1                root  txt       REG              253,3   1628608   67791946 /usr/lib/systemd/systemd
systemd       1                root  mem       REG              253,3     20064   33717139 /usr/lib64/libuuid.so.1.3.0
systemd       1                root  mem       REG              253,3    265576   34213169 /usr/lib64/libblkid.so.1.1.0
systemd       1                root  mem       REG              253,3     90248   33717133 /usr/lib64/libz.so.1.2.7
systemd       1                root  mem       REG              253,3    157424   33717155 /usr/lib64/liblzma.so.5.2.2
systemd       1                root  mem       REG              253,3     23968   33717159 /usr/lib64/libcap-ng.so.0.0.0
systemd       1                root  mem       REG              253,3     19896   33717355 /usr/lib64/libattr.so.1.1.0
systemd       1                root  mem       REG              253,3     19248   33656645 /usr/lib64/libdl-2.17.so
systemd       1                root  mem       REG              253,3    402384   33717119 /usr/lib64/libpcre.so.1.2.0
systemd       1                root  mem       REG              253,3   2156240   33639071 /usr/lib64/libc-2.17.so
systemd       1                root  mem       REG              253,3    142144   33656665 /usr/lib64/libpthread-2.17.so
systemd       1                root  mem       REG              253,3     88776   33554509 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
systemd       1                root  mem       REG              253,3     43712   33656669 /usr/lib64/librt-2.17.so
systemd       1                root  mem       REG              253,3    277792   34213190 /usr/lib64/libmount.so.1.1.0
systemd       1                root  mem       REG              253,3     91800   33717318 /usr/lib64/libkmod.so.2.2.10
systemd       1                root  mem       REG              253,3    127184   33717162 /usr/lib64/libaudit.so.1.0.0
systemd       1                root  mem       REG              253,3     61680   34354248 /usr/lib64/libpam.so.0.83.1
systemd       1                root  mem       REG              253,3     20048   33717359 /usr/lib64/libcap.so.2.22
systemd       1                root  mem       REG              253,3    155744   33717131 /usr/lib64/libselinux.so.1
systemd       1                root  mem       REG              253,3    163312   33639064 /usr/lib64/ld-2.17.so
systemd       1                root  mem       REG              253,3   1416154   68900363 /etc/selinux/targeted/contexts/files/file_contexts.bin
systemd       1                root  mem       REG              253,3       296   68010597 /etc/selinux/targeted/contexts/files/file_contexts.local.bin
systemd       1                root  mem       REG              253,3     45577   68900365 /etc/selinux/targeted/contexts/files/file_contexts.homedirs.bin
systemd       1                root    0u      CHR                1,3       0t0       1028 /dev/null
systemd       1                root    1u      CHR                1,3       0t0       1028 /dev/null
systemd       1                root    2u      CHR                1,3       0t0       1028 /dev/null
systemd       1                root    3u  a_inode               0,10         0       6415 [timerfd]
systemd       1                root    4u  a_inode               0,10         0       6415 [eventpoll]
systemd       1                root    5u  a_inode               0,10         0       6415 [signalfd]
systemd       1                root    6r      DIR               0,21         0       9228 /sys/fs/cgroup/systemd
systemd       1                root    7u  a_inode               0,10         0       6415 [timerfd]
systemd       1                root    8u  netlink                          0t0      10996 KOBJECT_UEVENT
systemd       1                root    9r      REG                0,3         0       9460 /proc/1/mountinfo
systemd       1                root   10r  a_inode               0,10         0       6415 inotify
systemd       1                root   11r      REG                0,3         0 4026532019 /proc/swaps
systemd       1                root   12u     unix 0xffff8c2434cef2c0       0t0      10129 /run/systemd/private
……

image-20230728155054658

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

  • COMMAND: 打开该文件或网络连接的进程的名称。
  • PID: 打开该文件或网络连接的进程的ID。
  • TID: 线程ID(如果有多线程)。
  • USER: 打开该文件或网络连接的进程的所有者。
  • FD: 文件描述符(File descriptor),是一个与文件或网络连接相关联的整数值。文件描述符可以是读取、写入、追加、定位等等,因此一个进程可以打开同一个文件的多个描述符。对于网络连接,文件描述符的格式为:IPv4/TCP@hostname:portIPv6/TCP@[hostname]:portunix@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,2      4096  923072 /www/server/mysql
mysqld_sa 1229  root  rtd    DIR              202,2      4096       2 /
mysqld_sa 1229  root  txt    REG              202,2    964536 1705859 /usr/bin/bash
mysqld_sa 1229  root  mem    REG              202,2    163312 1707642 /usr/lib64/ld-2.17.so
mysqld_sa 1229  root  mem    REG              202,2     26970 1708218 /usr/lib64/gconv/gconv-modules.cache
mysqld_sa 1229  root  mem    REG              202,2    174576 1708269 /usr/lib64/libtinfo.so.5.9
mysqld_sa 1229  root  mem    REG              202,2     19248 1715559 /usr/lib64/libdl-2.17.so
mysqld_sa 1229  root  mem    REG              202,2   2156592 1707902 /usr/lib64/libc-2.17.so
mysqld_sa 1229  root  mem    REG              202,2 106176928 1715553 /usr/lib/locale/locale-archive
mysqld_sa 1229  root  mem    REG              202,2     61560 1715567 /usr/lib64/libnss_files-2.17.so
mysqld_sa 1229  root    0r   CHR                1,3       0t0      17 /dev/null
mysqld_sa 1229  root    1w   CHR                1,3       0t0      17 /dev/null
mysqld_sa 1229  root    2u  unix 0xffff93695bbc5400       0t0   21536 socket
mysqld_sa 1229  root  255r   REG              202,2     27868  923102 /www/server/mysql/bin/mysqld_safe
mysqld    2122 mysql  cwd    DIR              202,2      4096  938320 /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,3   964536 27829 /usr/bin/bash
bash     6198 root txt    REG  253,3   964536 27829 /usr/bin/bash
bash     7743 root txt    REG  253,3   964536 27829 /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,5      4096       67 /home/moonrong
bash    8404 moonrong  rtd    DIR  253,3       238       64 /
bash    8404 moonrong  txt    REG  253,3    964536    27829 /usr/bin/bash
bash    8404 moonrong  mem    REG  253,3 106172832    27824 /usr/lib/locale/locale-archive
bash    8404 moonrong  mem    REG  253,3     61560 33656657 /usr/lib64/libnss_files-2.17.so
bash    8404 moonrong  mem    REG  253,3   2156240 33639071 /usr/lib64/libc-2.17.so
bash    8404 moonrong  mem    REG  253,3     19248 33656645 /usr/lib64/libdl-2.17.so
bash    8404 moonrong  mem    REG  253,3    174576 33717102 /usr/lib64/libtinfo.so.5.9
bash    8404 moonrong  mem    REG  253,3    163312 33639064 /usr/lib64/ld-2.17.so
bash    8404 moonrong  mem    REG  253,3    123267 33717113 /usr/share/locale/zh_CN/LC_MESSAGES/bash.mo
bash    8404 moonrong  mem    REG  253,3     26970 67221303 /usr/lib64/gconv/gconv-modules.cache
bash    8404 moonrong    0u   CHR  136,0       0t0        3 /dev/pts/0
bash    8404 moonrong    1u   CHR  136,0       0t0        3 /dev/pts/0
bash    8404 moonrong    2u   CHR  136,0       0t0        3 /dev/pts/0
bash    8404 moonrong  255u   CHR  136,0       0t0        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,2      4096  938320 /www/server/data
mysqld  2122 mysql  rtd    DIR              202,2      4096       2 /
mysqld  2122 mysql  txt    REG              202,2  27889560  923100 /www/server/mysql/bin/mysqld
mysqld  2122 mysql  mem    REG              202,2    163312 1707642 /usr/lib64/ld-2.17.so
mysqld  2122 mysql  DEL    REG               0,11             22365 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22366 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22367 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22368 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22372 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22369 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22370 /[aio]
mysqld  2122 mysql  DEL    REG               0,11             22371 /[aio]
mysqld  2122 mysql  mem    REG              202,2    142144 1707928 /usr/lib64/libpthread-2.17.so
mysqld  2122 mysql  mem    REG              202,2      6264 1729167 /usr/lib64/libaio.so.1.0.1
mysqld  2122 mysql  mem    REG              202,2     40600 1707906 /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   17061      0t0  UDP *:sunrpc 
rpcbind    603    rpc    7u  IPv4   17062      0t0  UDP *:acmaint_transd 
rpcbind    603    rpc    8u  IPv4   17063      0t0  TCP *:sunrpc (LISTEN)
rpcbind    603    rpc    9u  IPv6   17064      0t0  UDP *:sunrpc 
rpcbind    603    rpc   10u  IPv6   17065      0t0  UDP *:acmaint_transd 
rpcbind    603    rpc   11u  IPv6   17066      0t0  TCP *:sunrpc (LISTEN)
chronyd    632 chrony    5u  IPv4   18059      0t0  UDP localhost:323 
chronyd    632 chrony    6u  IPv6   18060      0t0  UDP localhost:323 
avahi-dae  664  avahi   12u  IPv4   16062      0t0  UDP *:mdns 
avahi-dae  664  avahi   13u  IPv4   16063      0t0  UDP *:55498 
cupsd     1063   root   11u  IPv6   21159      0t0  TCP localhost:ipp (LISTEN)
cupsd     1063   root   12u  IPv4   21160      0t0  TCP localhost:ipp (LISTEN)
sshd      1064   root    3u  IPv4   21145      0t0  TCP *:ssh (LISTEN)
sshd      1064   root    4u  IPv6   21154      0t0  TCP *:ssh (LISTEN)
dnsmasq   1495 nobody    3u  IPv4   24889      0t0  UDP *:bootps 
dnsmasq   1495 nobody    5u  IPv4   24892      0t0  UDP mynewjenkis:domain 
dnsmasq   1495 nobody    6u  IPv4   24893      0t0  TCP mynewjenkis:domain (LISTEN)
master    1508   root   13u  IPv4   24918      0t0  TCP localhost:smtp (LISTEN)
master    1508   root   14u  IPv6   24919      0t0  TCP localhost:smtp (LISTEN)
sshd      6170   root    3u  IPv4 2573749      0t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd      6170   root    8u  IPv6 2573792      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd      6170   root    9u  IPv4 2573793      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd      7735   root    3u  IPv4 2586301      0t0  TCP mynewjenkis:ssh->129.184.157.101:gttaua (ESTABLISHED)
sshd      7735   root    8u  IPv6 2586334      0t0  TCP localhost:6011 (LISTEN)
sshd      7735   root    9u  IPv4 2586335      0t0  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   17063      0t0  TCP *:sunrpc (LISTEN)
rpcbind  603    rpc   11u  IPv6   17066      0t0  TCP *:sunrpc (LISTEN)
cupsd   1063   root   11u  IPv6   21159      0t0  TCP localhost:ipp (LISTEN)
cupsd   1063   root   12u  IPv4   21160      0t0  TCP localhost:ipp (LISTEN)
sshd    1064   root    3u  IPv4   21145      0t0  TCP *:ssh (LISTEN)
sshd    1064   root    4u  IPv6   21154      0t0  TCP *:ssh (LISTEN)
dnsmasq 1495 nobody    6u  IPv4   24893      0t0  TCP mynewjenkis:domain (LISTEN)
master  1508   root   13u  IPv4   24918      0t0  TCP localhost:smtp (LISTEN)
master  1508   root   14u  IPv6   24919      0t0  TCP localhost:smtp (LISTEN)
sshd    6170   root    3u  IPv4 2573749      0t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    6170   root    8u  IPv6 2573792      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    6170   root    9u  IPv4 2573793      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    7735   root    3u  IPv4 2586301      0t0  TCP mynewjenkis:ssh->129.184.157.101:gtaua (ESTABLISHED)
sshd    7735   root    8u  IPv6 2586334      0t0  TCP localhost:6011 (LISTEN)
sshd    7735   root    9u  IPv4 2586335      0t0  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   21145      0t0  TCP *:ssh (LISTEN)
sshd    1064 root    4u  IPv6   21154      0t0  TCP *:ssh (LISTEN)
sshd    6170 root    3u  IPv4 2573749      0t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    7735 root    3u  IPv4 2586301      0t0  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   21159      0t0  TCP localhost:ipp (LISTEN)
cupsd   1063 root   12u  IPv4   21160      0t0  TCP localhost:ipp (LISTEN)
sshd    1064 root    3u  IPv4   21145      0t0  TCP *:ssh (LISTEN)
sshd    1064 root    4u  IPv6   21154      0t0  TCP *:ssh (LISTEN)
master  1508 root   13u  IPv4   24918      0t0  TCP localhost:smtp (LISTEN)
master  1508 root   14u  IPv6   24919      0t0  TCP localhost:smtp (LISTEN)
sshd    6170 root    3u  IPv4 2573749      0t0  TCP mynewjenkis:ssh->129.184.157.101:onbase-dds (ESTABLISHED)
sshd    6170 root    8u  IPv6 2573792      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    6170 root    9u  IPv4 2573793      0t0  TCP localhost:x11-ssh-offset (LISTEN)
sshd    7735 root    3u  IPv4 2586301      0t0  TCP mynewjenkis:ssh->129.184.157.101:gtaua (ESTABLISHED)
sshd    7735 root    8u  IPv6 2586334      0t0  TCP localhost:6011 (LISTEN)
sshd    7735 root    9u  IPv4 2586335      0t0  TCP localhost:6011 (LISTEN)
[root@mynewjenkis ~]# 
4.10根据文件描述列出对应的文件信息

要列出进程ID1234的进程打开的文件描述符为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,10        0      6415 [timerfd]
systemd-j  384    root    3u     unix 0xffff8c2434ce9100      0t0      9487 /run/systemd/journal/stdout
lvmetad    402    root    3u     unix 0xffff8c2434cef700      0t0     13448 /run/lvm/lvmetad.socket
systemd-u  421    root    3u     unix 0xffff8c2434cefb40      0t0     13478 /run/udev/control
auditd     570    root    3u  netlink                         0t0     14286 AUDIT
audispd    572    root    3u     unix 0xffff8c2434ceaa80      0t0     14288 socket
rtkit-dae  601   rtkit    3u     sock                0,7      0t0     17124 protocol: UNIX
udisksd    602    root    3u     unix 0xffff8c2335d96e80      0t0     17223 socket
rpcbind    603     rpc    3u     unix 0xffff8c24396561c0      0t0     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,3      238         64 /
systemd   1 root  rtd       DIR              253,3      238         64 /
……
systemd   1 root    1u      CHR                1,3      0t0       1028 /dev/null
systemd   1 root    2u      CHR                1,3      0t0       1028 /dev/null
systemd   1 root    3u  a_inode               0,10        0       6415 [timerfd]
systemd   1 root    4u  a_inode               0,10        0       6415 [eventpoll]
systemd   1 root    5u  a_inode               0,10        0       6415 [signalfd]
systemd   1 root    6r      DIR               0,21        0       9228 /sys/fs/cgroup/systemd
systemd   1 root    7u  a_inode               0,10        0       6415 [timerfd]
systemd   1 root    8u  netlink                         0t0      10996 KOBJECT_UEVENT
systemd   1 root    9r      REG                0,3        0       9460 /proc/1/mountinfo
systemd   1 root   10r  a_inode               0,10        0       6415 inotify
systemd   1 root   11r      REG                0,3        0 4026532019 /proc/swaps
systemd   1 root   12u     unix 0xffff8c2434cef2c0      0t0      10129 /run/systemd/private
systemd   1 root   13u     unix 0xffff8c243783c400      0t0      27380 /run/systemd/journal/stdout
posted @ 2023-07-28 15:54  寻梦99  阅读(412)  评论(0)    收藏  举报