lsof -p 1234输出前六列分别为command(进程名)、pid(进程号)、user(所属用户)、fd(文件描述符及模式)、type(资源类型)、name(路径或地址),用于精准定位nginx等进程打开的文件、端口、设备等资源。

看懂 lsof -p 输出的六列关键字段
执行 lsof -p 1234(以 Nginx worker 进程为例)后,每行代表一个打开的文件描述符。输出默认含七列,最常用的是前六列:
-
COMMAND:进程名,如
nginx,注意 master 和 worker 可能同名但 PID 不同 - PID:进程 ID,用于确认是否查对了目标进程
-
USER:进程所有者,Nginx worker 常为
www-data或nginx,权限异常时这里会暴露线索 -
FD:文件描述符编号或类型缩写,
0、1、2是标准输入/输出/错误;cwd是当前工作目录;txt是可执行文件;mem是内存映射段;3u、4u等是普通打开文件(u表示读写模式) -
TYPE:资源类型,
REG是常规文件,DIR是目录,IPv4/IPv6是网络套接字,CHR是字符设备,socket是 Unix 域套接字 -
NAME:实际路径或地址,这是定位句柄的核心——比如
/var/log/nginx/access.log、*:80、/dev/null,甚至/var/cache/nginx/client_temp/xxx (deleted)
快速识别 Nginx 关键句柄类型
Nginx 运行中典型占用的句柄有固定模式,结合 NAME 和 TYPE 能一眼判断用途:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
日志文件:TYPE=REG,NAME 含
access.log或error.log,FD 多为较大数字(如9u、10u),若显示(deleted),说明日志被logrotate删除但 Nginx 未重载,磁盘空间不会释放 -
配置与静态资源:TYPE=REG,NAME 是
/etc/nginx/nginx.conf、/usr/share/nginx/html/index.html等,通常 FD 较小且为只读(r或ur) -
监听端口:TYPE=IPv4 或 IPv6,NAME 形如
*:80、*:443、127.0.0.1:8080,FD 常为6u或7u,状态列(未显示在基础列中,加-v可见)含(LISTEN) -
临时文件与缓存:NAME 含
client_body_temp、proxy_temp、fastcgi_temp路径,TYPE=DIR 或 REG,大量存在可能表示上传卡住或缓存积压 -
已删除仍占句柄:NAME 末尾带
(deleted)字样,是磁盘空间不释放的常见原因,需kill -USR1重载 Nginx 或重启进程才能释放
精准过滤,避开干扰信息
默认输出包含大量系统级资源(如 libc.so、/dev/null、cwd),排查具体业务问题时建议组合参数精简:
- 跳过解析延迟:lsof -n -P -p 1234,避免 DNS 或 /etc/services 查询卡顿
- 只看真实读写文件:lsof -p 1234 -a -d ^cwd,^txt,^mem,排除工作目录、程序本体和共享库,聚焦业务相关句柄
- 筛选特定路径:lsof -p 1234 | grep "/var/log" 或 grep "access\.log"
- 统计总数(不含表头):lsof -p 1234 | tail -n +2 | wc -l,便于对比 ulimit 限制值
验证与交叉检查:用 /proc/PID/fd 直接查看
当 lsof 权限受限或结果存疑,可绕过工具直读内核视图:
- 执行 ls -l /proc/1234/fd/,列出所有 fd 符号链接,输出格式更原始但绝对真实
- 每个链接目标即为 NAME 列内容,例如
3 -> /var/log/nginx/error.log对应 lsof 中的一行 - 若看到
5 -> /tmp/upload.XYZ (deleted),就确认该句柄正占用已删文件,且未被 Nginx 关闭 - 配合 readlink -f /proc/1234/fd/5 可还原完整路径,尤其在软链接嵌套时比 lsof 更可靠










