linux Command
lsof 查看文件句柄和端口命令
lsof 查看文件句柄、端口和网络连接占用的常用命令,lsof -iTCP:8080 -sTCP:LISTEN 找端口监听进程、lsof -p <pid> 查进程打开的所有文件、+D 递归扫描目录、+L1 找已删除但仍被打开的文件,配合 /proc/<pid>/limits 判断 nofile 限制。
lsof 适合回答“哪个进程占用了这个端口/文件/目录”。文件句柄耗尽时,先按 PID 统计 fd 类型。
Scenario
什么时候用这组命令
这组命令适合在处理“lsof 查看文件句柄和端口命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。
Input
你需要先准备什么
- 先确定故障资源:CPU、内存、磁盘、网络、权限、文件句柄还是 systemd 生命周期。
- 区分当前状态和故障发生时状态,事故恢复后 free/top 可能已经看不出根因。
- 任何清理或 kill 操作前先记录 PID、命令行、日志和影响范围。
Risk Notes
执行风险
- 生产上不要在来源未确认时 rm -rf 大目录,应先确认目录用途和影响范围。
- kill 进程前先确认它属于哪个服务、是否会触发级联重启,优先使用 SIGTERM 而非 SIGKILL。
- 不要忽略 dmesg 中的 OOM Killer 记录,它往往是应用内存泄漏或配置不当的早期信号。
Commands
命令详解
命令 1: 查看文件句柄或端口
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
- 如果输出为空或权限不足,切换到有权限用户后再判断。
sudo lsof -iTCP:8080 -sTCP:LISTEN -n -P命令 2: 查看文件句柄或端口
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 先替换尖括号占位符,不要原样执行。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
- 如果输出为空或权限不足,切换到有权限用户后再判断。
sudo lsof -p <pid>命令 3: 查看文件句柄或端口
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
- 如果输出为空或权限不足,切换到有权限用户后再判断。
sudo lsof +D /var/log/app命令 4: 查看文件句柄或端口
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
- 如果输出为空或权限不足,切换到有权限用户后再判断。
sudo lsof +L1命令 5: 执行 ls
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 先替换尖括号占位符,不要原样执行。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
ls /proc/<pid>/fd | wc -l命令 6: 执行 cat
用于确认进程打开了哪些文件、socket 或资源限制。适合定位端口占用、deleted 文件和文件句柄耗尽。
- 先替换尖括号占位符,不要原样执行。
- 确认命令运行位置正确。
- 保留关键输出,方便和修复后对比。
cat /proc/<pid>/limits | grep "Max open files"Workflow
建议执行顺序
按顺序执行,不要跳过确认类命令
先用只读命令确认状态,再执行会改变状态的命令。lsof 适合回答“哪个进程占用了这个端口/文件/目录”。文件句柄耗尽时,先按 PID 统计 fd 类型。
- 按端口定位监听进程。
- 按 PID 查看打开的文件和 socket。
- du/df 不一致时查 deleted 文件。
- 句柄过多时按 fd 类型聚合。
- 结合 /proc/<pid>/limits 判断是否接近 nofile 限制。
sudo lsof -iTCP:8080 -sTCP:LISTEN -n -P
sudo lsof -p <pid>
sudo lsof +D /var/log/app把命令输出变成结论
命令本身不是结论。每次执行后要回答:目标是否存在、状态是否异常、异常是否能解释用户看到的现象。
- 记录关键字段,而不是整屏复制
- 把正常路径和异常路径输出对比
- 输出为空也要解释:是确实没有,还是权限/过滤条件不对
sudo lsof -p <pid>
sudo lsof +D /var/log/app
sudo lsof +L1执行前替换占位符并控制影响范围
包含 <service>、<pod>、<namespace>、<pid>、<container> 的命令必须先替换。涉及 reload、restart、KILL、vacuum、prune 的命令要确认影响范围。
- 优先在测试环境或只读模式验证
- 生产执行前保留回滚路径
- 把最终可用命令写入工单或 runbook
ls /proc/<pid>/fd | wc -l
cat /proc/<pid>/limits | grep "Max open files"Verification
怎么判断命令有效
- 命令已在正确机器、正确用户、正确 namespace 或正确仓库下执行。
- 输出能支撑明确判断:正常、异常、权限不足、目标不存在或需要下一跳排查。
- 对有副作用的命令,已确认执行窗口、影响范围和回滚方式。
Prevention
沉淀到日常流程
- 为关键服务配置日志轮转、资源限制和基础监控,避免等到用户报障才发现问题。
- 把 systemd unit、timer 和环境文件纳入版本管理,确保所有变更可追溯可回滚。
- 对清理动作保留可回滚路径,优先移动/截断/轮转,不盲删。
- 建立系统资源基线监控,一旦 CPU、内存、磁盘或文件句柄超过阈值即可自动告警。
常见问题
lsof +D 很慢怎么办?
+D 会递归扫描目录,大目录可能很慢。优先按 PID、端口或更小目录范围定位。
Long-tail SEO
你可能正在搜索这些报错
下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。
- lsof 查看端口占用
- lsof -i 查看网络连接
- lsof 文件句柄排查
- lsof +L1 已删除文件
- lsof -p 进程打开文件
- linux lsof 命令
Need More Help
这组命令还不够贴合你的场景?
把你的系统环境、目标操作和报错贴过来,我会优先补充更具体的命令模板。