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

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

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

lsof 命令的基本格式如下:

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

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

表 1 lsof 命令常用选项及功能
选项功能
-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/initlsof 命令也可以反过来查询某个文件被哪个进程调用。这个例子就查询到 /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”选项可以搜索某个目录下所有的文件,查看到底哪个文件被哪个进程调用了。
 

 

#查看以httpd开头的进程调用了哪些文件

【例 4】

[root@localhost ~]# lsof -c 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 开头的进程调用的所有文件。
 

#查询PID是1的进程调用的文件

【例 5】

[root@localhost ~]# lsof -p 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.
…省略部分输出…

我们还可以查看某个用户的进程调用了哪些文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Linux 中常用的 100 条检测命令: 1. `ls`:列出目录内容。 2. `cd`:切换目录。 3. `pwd`:显示当前目录的路径。 4. `cat`:显示文件内容。 5. `less`:分页显示文件内容。 6. `tail`:显示文件的末尾内容。 7. `head`:显示文件的头部内容。 8. `grep`:在文件中查找匹配的字符串。 9. `find`:在目录中查找文件。 10. `diff`:比较两个文件的内容。 11. `file`:显示文件类型。 12. `stat`:显示文件的状态信息。 13. `du`:显示目录或文件的磁盘使用情况。 14. `df`:显示文件系统的磁盘使用情况。 15. `top`:显示系统的进程和资源占用情况。 16. `ps`:显示系统的进程列表。 17. `kill`:终止一个进程。 18. `nice`:设置进程的优先级。 19. `chown`:修改文件的所有者。 20. `chmod`:修改文件的权限。 21. `umask`:设置默认的文件权限。 22. `tar`:打包文件或目录。 23. `gzip`:压缩文件。 24. `bzip2`:压缩文件。 25. `zip`:压缩文件。 26. `unzip`:解压缩文件。 27. `wget`:下载文件。 28. `curl`:下载文件。 29. `ssh`:远程登录。 30. `scp`:远程拷贝文件。 31. `rsync`:远程同步文件。 32. `ping`:测试网络连通性。 33. `traceroute`:显示数据包到达目的地的路径。 34. `ifconfig`:显示网络接口的配置信息。 35. `route`:显示路由表。 36. `netstat`:显示网络状态信息。 37. `ss`:显示网络状态信息。 38. `iptables`:设置防火墙规则。 39. `systemctl`:管理系统服务。 40. `journalctl`:查看系统日志。 41. `dmesg`:查看内核日志。 42. `uname`:显示系统信息。 43. `hostname`:显示主机名。 44. `whoami`:显示当前用户的用户名。 45. `id`:显示当前用户的 UID 和 GID。 46. `su`:切换用户。 47. `sudo`:以超级用户身份执行命令。 48. `visudo`:编辑 sudoers 文件。 49. `useradd`:添加用户。 50. `userdel`:删除用户。 51. `usermod`:修改用户信息。 52. `passwd`:修改用户密码。 53. `groupadd`:添加用户组。 54. `groupdel`:删除用户组。 55. `groups`:显示用户所属的用户组。 56. `adduser`:添加用户。 57. `deluser`:删除用户。 58. `chpasswd`:批量修改用户密码。 59. `crontab`:管理定时任务。 60. `at`:一次性定时任务。 61. `systemd-analyze`:分析系统启动时间。 62. `uptime`:显示系统运行时间。 63. `free`:显示系统内存使用情况。 64. `vmstat`:显示系统虚拟内存使用情况。 65. `iostat`:显示系统磁盘 I/O 使用情况。 66. `sar`:系统性能监测工具。 67. `ip`:网络配置工具。 68. `route`:路由配置工具。 69. `sshd`:SSH 服务。 70. `ftp`:FTP 服务。 71. `httpd`:HTTP 服务。 72. `nginx`:Web 服务器。 73. `mysql`:数据库服务。 74. `redis`:缓存服务。 75. `memcached`:缓存服务。 76. `postfix`:邮件服务。 77. `sendmail`:邮件服务。 78. `sssd`:身份验证和授权服务。 79. `ldap`:目录服务。 80. `kerberos`:认证服务。 81. `samba`:Windows 文件共享服务。 82. `nfs`:网络文件系统。 83. `rpcbind`:RPC 服务。 84. `dhcpd`:DHCP 服务。 85. `dnsmasq`:DNS 服务。 86. `bind`:DNS 服务。 87. `iptables`:防火墙服务。 88. `fail2ban`:入侵检测和防范服务。 89. `logrotate`:日志轮换服务。 90. `crash`:内核转储分析工具。 91. `perf`:系统性能分析工具。 92. `gprof`:性能分析工具。 93. `strace`:系统调用跟踪工具。 94. `lsof`:显示文件、目录和网络连接的信息。 95. `tcpdump`:网络数据包捕获工具。 96. `wireshark`:网络协议分析工具。 97. `nc`:网络交互工具。 98. `telnet`:远程登录工具。 99. `sshfs`:远程文件系统挂载工具。 100. `screen`:多窗口终端工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值