在类 Unix 系统(Linux、macOS)中,查看进程打开了哪些文件常用以下几种方法,按使用频率从高到低说明。
lsof(最常用、最直观)lsof -p <PID>
示例:
lsof -p 1234
输出包括:
lsof -p 1234 | grep REG
lsof /path/to/file
lsof -u username
/proc 文件系统(Linux 特有,最底层)ls -l /proc/<PID>/fd
示例:
ls -l /proc/1234/fd
输出示例:
0 -> /dev/null
1 -> /dev/null
2 -> /dev/null
3 -> /var/log/app.log
ls -l /proc/<PID>/cwd
ls /proc/<PID>/fd | wc -l
ps + /proc(辅助)查看进程 PID:
ps aux | grep process_name
然后结合 /proc/<PID>/fd 使用。
macOS 也支持 lsof,但 /proc 不完整,推荐直接用:
lsof -p <PID>
或查看某个端口:
lsof -i :8080
lsof | grep deleted
lsof -p <PID> | wc -l
或:
cat /proc/<PID>/limits | grep "open files"
lsof -i
sudosudo lsof -p <PID>
| 需求 | 命令 |
|---|---|
| 查看进程打开的文件 | lsof -p PID |
| 查看文件被谁打开 | lsof 文件路径 |
| Linux 底层查看 | /proc/PID/fd |
| 查看删除但未释放的文件 | `lsof |
| 查看网络文件 | lsof -i |
如果你愿意,可以告诉我:
我可以给你更精确的命令和排查思路。