lsof是最直接、最常用的linux端口占用排查工具,可精准定位监听或连接指定端口的进程,支持权限控制、协议与状态筛选、输出优化及延伸排查,并提供安全清理方法。

Linux端口被占用时,lsof是最直接、最常用的排查工具。它能快速定位哪个进程在监听或连接指定端口,无需依赖网络状态解析,结果清晰可靠。
查端口:精准定位占用进程
执行命令即可看到端口对应的进程名、PID、用户和连接状态:
- lsof -i :8080 —— 查看 8080 端口的占用情况(需普通权限;若无输出,可能是非 root 用户未监听,或端口未被使用)
- sudo lsof -i :3306 —— 查 MySQL 默认端口(部分服务由 root 启动,需 sudo 才可见)
- lsof -iTCP:80 -sTCP:LISTEN —— 仅筛选 TCP 协议中处于 LISTEN 状态的 80 端口(排除 ESTABLISHED 连接干扰)
提效技巧:让输出更干净、更易读
默认输出可能包含主机名解析和端口别名(如把 80 显示成 http),加参数可避免干扰:
- lsof -i :8080 -P -n:-P 强制显示端口号(不转成 service 名),-n 禁用 DNS 反向解析,加快响应且避免卡顿
-
lsof -i :8080 -t:-t 模式只输出 PID,方便配合 kill 使用,例如:
kill -9 $(lsof -ti:8080) - lsof -i4 :22:限定 IPv4(避免混入 IPv6 的 ::1:22 行),适合纯内网调试场景
延伸排查:不只是“谁在监听”
有些问题不是监听冲突,而是连接异常或资源残留:
- lsof -i @192.168.1.100:查看与某 IP 的所有连接(含 ESTABLISHED),排查异常外连
- lsof +L1:列出已被删除但仍被进程打开的文件(常见于日志轮转后磁盘空间不释放)
- lsof -u $USER:检查当前用户所有打开的网络连接和文件,快速收拢排查范围
确认并清理:安全终止占用进程
拿到 PID 后,优先尝试优雅终止;确认无业务影响再强杀:
- 查看进程详情:
ps -fp PID或cat /proc/PID/cmdline - 发送标准终止信号:
kill PID(等待进程自行关闭端口) - 强制结束(慎用):
kill -9 PID(立即释放端口,但可能丢失数据或触发重连风暴)
不复杂但容易忽略:多数端口冲突发生在开发环境重复启动服务时,养成启动前先 lsof -i :端口 检查的习惯,能省下大量调试时间。










