ZBLOG

linux 系统查看某个进程占用了哪些文件

在 Linux 系统中,可以通过以下方法查看某个进程占用了哪些文件(包括普通文件、目录、套接字、设备文件等):


1. 使用 lsof 命令(推荐)

功能:列出指定进程打开的所有文件及相关信息(最全面)。
语法

lsof -p <PID>

示例

# 查看 PID 为 1234 的进程打开的文件
lsof -p 1234

# 结合 grep 过滤特定类型的文件(如 TCP 套接字)
lsof -p 1234 | grep TCP

输出字段说明

  • COMMAND:进程名称。
  • FD:文件描述符(如 cwd=当前目录,mem=内存映射文件,数字表示普通 FD)。
  • TYPE:文件类型(REG=普通文件,DIR=目录,IPv4/IPv6=网络套接字)。
  • DEVICE/SIZE/OFF:设备、大小或偏移量。
  • NODE:Inode 号。
  • NAME:文件名或路径。

2. 使用 /proc 文件系统

原理:Linux 内核通过 /proc/<PID>/fd/ 目录暴露进程打开的文件描述符。
操作步骤

# 查看进程的所有文件描述符符号链接
ls -l /proc/<PID>/fd/

# 示例:查看 PID 为 1234 的文件描述符
ls -l /proc/1234/fd/

输出示例

lr-x------ 1 root root 64 Jan  1  10:00  0 -> /dev/null
lrwx------ 1 root root 64 Jan 1  10:00  1 -> socket:[12345678]
lr-x------ 1 root root 64 Jan 1  10:00  2 -> /var/log/app.log
  • 符号链接指向的实际路径即是被占用的文件或资源

3. 使用 pmap(查看内存映射文件)

功能:显示进程的内存映射,包括加载的库文件和共享内存。

pmap -x <PID>

常见场景扩展

a. 查找特定类型的占用

# (1)只查看网络连接(TCP/UDP)
lsof -p <PID> | grep -E 'TCP|UDP'

# (2)只查看普通文件(排除套接字、管道等)
lsof -p <PID> | grep REG

# (3)查找被删除但未释放的文件(空间未回收)
lsof -p <PID> | grep deleted

b.反向查找某文件的占用者

lsof /path/to/file

注意事项

  1. 权限要求:非 root用户只能查看自己拥有的进程信息。
  2. 动态变化性: 实时运行结果可能因进程状态变化而不同。
  3. 容器环境: 若目标进程在容器内,需进入容器命名空间执行命令。

如果需要分析具体场景或解释输出内容,可以提供更多细节!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8120

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?