一句话先给结论:
你解决不了的问题,80% 都能用lsof找到“是谁在占用”。
不会lsof,等于在 Linux 里闭着眼排错。
一、为什么 Linux 运维一定离不开 lsof?
在 Linux 世界里:
一切皆文件
普通文件 → 文件描述符
端口 → socket 文件
设备 → 设备文件
目录 → 文件系统对象
而 lsof 做的事只有一件:
列出“进程打开的文件”
这也是它的名字:
List Open Files
二、最基础用法:lsof
1️⃣ 直接执行
lsof你会看到成百上千行输出。
📌 结论:
✔ 命令没错
❌ 实战几乎没用
lsof 一定要配条件使用

三、最常用场景一:端口被占用(运维第一高频)
场景
服务起不来,提示:
Address already in use
正确姿势
lsof -i :8080示例输出:
java 12345 root 123u IPv4 123456 TCP *:8080 (LISTEN)你能一眼看懂:
进程名:java
PID:12345
端口:8080
状态:LISTEN
下一步你就知道该干嘛了:
kill 12345查看某个进程占用的所有端口
lsof -i -p 12345

四、最常用场景二:查看工作目录的进程
例:目录 / 挂载点卸载失败
场景
umount /data报错:
target is busy正确排查方式
lsof +D /data输出示例:
bash 2345 user cwd DIR /data📌 意味着:
PID 2345 的 bash
当前工作目录就在
/data
👉 解决方法:
cd /或:
kill 2345
五、最常用场景三:文件删不掉(但磁盘空间不释放)
场景
rm已执行df -h空间没变
这是 Linux 非常经典的问题。
排查方法
lsof | grep deleted示例:
java 3456 root 10u REG /var/log/app.log (deleted)含义:
文件已被删除
但进程仍然占用
解决方法只有一个:
kill 3456或重启服务
六、按用户排查(共享服务器非常有用)
lsof -u kylin查看某个用户:
打开了哪些文件
占用了哪些端口
是否存在异常进程

七、按进程排查(精确打击)
lsof -p 12345你可以看到:
程序读了哪些配置文件
日志写到哪里
是否打开了异常文件
📌 这是定位“程序行为异常”的利器
八、只看网络相关
lsof -i只看 TCP
lsof -i tcp只看 UDP
lsof -i udp只看监听端口
lsof -i -sTCP:LISTEN九、lsof 常用参数速查表(实战向)
示例(脚本常用)
kill $(lsof -t -i :8080)十、lsof vs 其他命令(别混用)
只有 lsof 能把“进程 ↔ 文件 ↔ 端口”连起来
十一、国产化 / 麒麟环境下的注意点
lsof不是默认安装属于独立包
sudo apt install lsof离线环境只需一个
.deb,依赖极少
十二、运维级总结(可直接写进规范)
端口冲突 →
lsof -i :PORT挂载失败 →
lsof +D 目录空间不释放 →
lsof | grep deleted精确定位问题 →
lsof -p PIDlsof 是 Linux 排障的“最后一公里”。
结语:为什么说 lsof 是“高手分水岭”?
因为它不是“看状态”,
而是看因果关系。
谁在用 → 用了什么 → 为什么用 → 怎么停
当你真正把 lsof 用熟,
你会发现:
很多 Linux 问题,其实一点都不复杂。