12.6 Linux列出进程调用或打开的文件信息(lsof命令)

举报
开源Linux 发表于 2022/05/01 23:26:46 2022/05/01
【摘要】 我们知道,通过 ps 命令可以查询到系统中所有的进程,那么,是否可以进一步知道这个进程到底在调用哪些文件吗?当然可以,使用 lsof 命令即可。lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。lsof 命令的基本格式如下:[root@loc...

我们知道,通过 ps 命令可以查询到系统中所有的进程,那么,是否可以进一步知道这个进程到底在调用哪些文件吗?当然可以,使用 lsof 命令即可。

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof 命令的基本格式如下:

[root@localhost ~]# lsof [选项]

此命令常用的选项及功能,如表 1 所示。

选项 功能
-c 字符串 只列出以字符串开头的进程打开的文件。
+d 目录名 列出某个目录中所有被进程调用的文件。
-u 用户名 只列出某个用户的进程打开的文件。
-p pid 列出某个 PID 进程打开的文件。

【例 1】

[root@localhost ~]# lsof | more
\#查询系统中所有进程调用的文件
COMMAND PID USER FD  TYPE DEVICE SIZE/OFF NODE NAME
init        1   root  cwd DIR  83    4096    2      /
init        1   root  rtd  DIR  83    4096    2      /
init        1   root  txt   REG  83    145180  130874 /sbin/init
init        1   root  mem REG  83    142472  665291 /lib/ld-2.12.so
init        1   root  mem REG  83    58704   655087 /lib/libnss_files-2.12.so
…省略部分输出…

这个命令的输出非常多。它会按照 PID,从 1 号进程开始列出系统中所有的进程正在调用的文件名。

【例 2】

[root@localhost ~]# lsof /sbin/init
\#查询某个文件被哪个进程调用
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE  NAME
init        1   root  txt REG  83   145180   130874  /sbin/init

lsof 命令也可以反过来查询某个文件被哪个进程调用。这个例子就查询到 /sbin/init 文件是被 init 进程调用的。

【例 3】

[root@localhost ~]# lsof +d /usr/lib
\#查询某个目录下所有的文件是被哪些进程调用的
COMMAND PID  USER  FD   TYPE DEVICE SIZE/OFF  NODE  NAME
rpc.idmap   1196 root   mem REG 83    26400    279930  /usr/lib/libnfsidmap.so.0.3.0
rpc.idmap   1196 root   mem REG 83    108948   276696  /usr/lib/libevent-1.4.so.2.1.3
avahi-dae   1240 avahi  mem REG 83    49124    271310  /usr/lib/libavahi-common.so.3.5.1
avahi-dae   1240 avahi  mem REG 83    23904    283188  /usr/lib/libdaemon.so.0.5.0
avahi-dae   1240 avahi  mem REG 83    227212   268396  /usr/lib/libavahi-core.so.6.0.1
avahi-dae   1241 avahi  mem REG 83    49124    271310  /usr/lib/libavahi-common.so.3.5.1
avahi-dae   1241 avahi  mem REG 83    23904    283188  /usr/lib/libdaemon.so.0.5.0
avahi-dae   1241 avahi  mem REG 83    227212   268396  /usr/lib/libavahi-core.so.6.0.1
cupsd      1251 root   mem REG 83    69564    270210  /usr/lib/libtasn1.so.3.1.6

使用“+d”选项可以搜索某个目录下所有的文件,查看到底哪个文件被哪个进程调用了。

【例 4】

[root@localhost ~]# lsof -c httpd
\#查看以httpd开头的进程调用了哪些文件
COMMAND PID  USER  FD  TYPE  DEVICE SIZE/OFF NODE  NAME
httpd      4689 root   cwd DIR   83    4096    2      /
httpd      4689 root   rtd  DIR   83    4096    2      /
httpd      4689 root   txt   REG  83    1797559 2855   /usr/local/apache2/bin/httpd
httpd      4689 root   mem REG  83    302300  665303 /lib/libfreebl3.so
httpd      4689 root   mem REG  83    58704   655087 /lib/libnss_files-2.12.s
httpd      4689 root   mem REG  83    142472  665291 /lib/ld-2.12.so
httpd      4689 root   mem REG  83    1889704 665292 /lib/libc-2.12.so
…省略部分输出…

使用“-c”选项可以查询以某个字符串开头的进程调用的所有文件,比如执行“lsof-c httpd”命令就会查询出以 httpd 开头的进程调用的所有文件。

【例 5】

[root@localhost ~]# lsof -p 1
\#查询PID1的进程调用的文件
COMMAND PID USER FD  TYPE DEVICE SIZE/OFF NODE NAME
init        1   root cwd DIR  83   4096    2      /
init        1   root rtd   DIR  83   4096    2      /
init        1   root txt   REG  83   145180  130874 /sbin/init
init        1   root mem REG  83   142472  665291 /lib/ld-2.12.so
init        1   root mem REG  83   58704   655087 /lib/libnss_files-2.12.so

当然,我们也可以按照 PID 查询进程调用的文件,比如执行“lsof -p 1”命令就可以查看 PID 为 1 的进程调用的所有文件。

【例 6】

[root@localhost ~]# lsof -u root
\#按照用户名查询某个用户的进程调用的文件
COMMAND PID USER FD   TYPE  DEVICE  SIZE/OFF  NODE NAME
init        1   root  cwd  DIR   83    4096     2      /
init        1   root  rtd   DIR   83    4096     2      /
init        1   root  txt   REG   83    145180   130874 /sbin/init
init        1   root  mem REG   83    142472   665291 /lib/ld-2.12.so
init        1   root  mem REG   83    58704    655087 /lib/libnss_files-2.12.s
init        1   root  mem REG   83    38768    655310 /lib/libnih-dbus.so.1.0.
…省略部分输出…
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。