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

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

我们知道,通过 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  8,3    4096    2      /
init        1   root  rtd  DIR  8,3    4096    2      /
init        1   root  txt   REG  8,3    145180  130874 /sbin/init
init        1   root  mem REG  8,3    142472  665291 /lib/ld-2.12.so
init        1   root  mem REG  8,3    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  8,3   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 8,3    26400    279930  /usr/lib/libnfsidmap.so.0.3.0
rpc.idmap   1196 root   mem REG 8,3    108948   276696  /usr/lib/libevent-1.4.so.2.1.3
avahi-dae   1240 avahi  mem REG 8,3    49124    271310  /usr/lib/libavahi-common.so.3.5.1
avahi-dae   1240 avahi  mem REG 8,3    23904    283188  /usr/lib/libdaemon.so.0.5.0
avahi-dae   1240 avahi  mem REG 8,3    227212   268396  /usr/lib/libavahi-core.so.6.0.1
avahi-dae   1241 avahi  mem REG 8,3    49124    271310  /usr/lib/libavahi-common.so.3.5.1
avahi-dae   1241 avahi  mem REG 8,3    23904    283188  /usr/lib/libdaemon.so.0.5.0
avahi-dae   1241 avahi  mem REG 8,3    227212   268396  /usr/lib/libavahi-core.so.6.0.1
cupsd      1251 root   mem REG 8,3    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   8,3    4096    2      /
httpd      4689 root   rtd  DIR   8,3    4096    2      /
httpd      4689 root   txt   REG  8,3    1797559 2855   /usr/local/apache2/bin/httpd
httpd      4689 root   mem REG  8,3    302300  665303 /lib/libfreebl3.so
httpd      4689 root   mem REG  8,3    58704   655087 /lib/libnss_files-2.12.s
httpd      4689 root   mem REG  8,3    142472  665291 /lib/ld-2.12.so
httpd      4689 root   mem REG  8,3    1889704 665292 /lib/libc-2.12.so
…省略部分输出…

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

【例 5】

[root@localhost ~]# lsof -p 1
\#查询PID是1的进程调用的文件
COMMAND PID USER FD  TYPE DEVICE SIZE/OFF NODE NAME
init        1   root cwd DIR  8,3   4096    2      /
init        1   root rtd   DIR  8,3   4096    2      /
init        1   root txt   REG  8,3   145180  130874 /sbin/init
init        1   root mem REG  8,3   142472  665291 /lib/ld-2.12.so
init        1   root mem REG  8,3   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   8,3    4096     2      /
init        1   root  rtd   DIR   8,3    4096     2      /
init        1   root  txt   REG   8,3    145180   130874 /sbin/init
init        1   root  mem REG   8,3    142472   665291 /lib/ld-2.12.so
init        1   root  mem REG   8,3    58704    655087 /lib/libnss_files-2.12.s
init        1   root  mem REG   8,3    38768    655310 /lib/libnih-dbus.so.1.0.
…省略部分输出…
目录
相关文章
|
12月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1083 1
二、Linux文本处理与文件操作核心命令
|
12月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
788 137
|
12月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1723 58
|
11月前
|
监控
ps 进程中的字段信息
该表介绍了进程管理中的关键字段,包括进程ID、用户、CPU与内存使用情况、运行时间、状态及优先级等信息,用于监控和分析系统中各进程的资源占用与运行状态。
400 10
|
11月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1656 2
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
909 16
|
12月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
1035 0
Linux内存问题排查命令详解
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
2248 0
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
322 20