linux中端口检查用lsof命令,本质是将网络端口视为内核管理的“打开文件”(socket类型文件描述符),通过读取/proc下进程的fd/和net/信息直接定位占用者;最常用命令为sudo lsof -i :端口号 -p -n,其中-p禁用端口名解析、-n跳过dns解析,输出需重点关注含:端口号(listen)的pid、command、user字段。

Linux中端口检查用 lsof 命令,本质不是“查找端口文件”,而是把网络端口当作内核管理的“打开的文件”来查——因为 Linux 遵循“一切皆文件”设计,每个监听或连接的端口都对应一个 socket 类型的文件描述符。lsof 通过读取 /proc 下各进程的 fd/ 和 net/ 信息,直接列出谁在用哪个端口。
查指定端口被谁占用
这是最常用场景,例如排查 8080 启动失败:
- 运行 sudo lsof -i :8080 -P -n(必须加 sudo,否则看不到其他用户或 root 进程)
- -i :8080 表示只筛选与该端口相关的网络连接(自动匹配 TCP/UDP)
-
-P 禁用端口名解析(显示
8080而非http-alt) - -n 跳过 DNS 反向解析(避免卡顿、确保 IP 显示为数字)
- 输出中重点关注 PID(进程号)、COMMAND(进程名)、USER(运行用户)、NAME 列里含
:8080 (LISTEN)的行
精准过滤监听中的 TCP 端口
如果只想看真正“监听等待连接”的服务(排除已建立的连接),可限定协议和状态:
- sudo lsof -iTCP -sTCP:LISTEN -P -n:列出所有 TCP LISTEN 状态的端口
- sudo lsof -iTCP:3306 -sTCP:LISTEN -P -n:只查 MySQL 默认端口的监听进程
- 加上 -sTCP:LISTEN 能排除 ESTABLISHED、CLOSE_WAIT 等干扰项,结果更干净
查 UDP 端口或混合协议
UDP 不涉及“监听”概念,但仍有绑定端口行为,lsof 同样支持:
- sudo lsof -iUDP:53 -P -n:查 DNS 服务是否被占用
- sudo lsof -i :53 -P -n:同时查 TCP 和 UDP 的 53 端口(DNS 常两者都用)
- 注意 UDP 输出中 NAME 字段不显示
(LISTEN),而是类似*:domain或127.0.0.1:domain
快速获取 PID 并终止进程(谨慎操作)
确认无误后释放端口,可跳过人工读取 PID:
- 仅输出 PID:sudo lsof -t -i :8080(-t 参数让 lsof 只打印 PID,适合脚本)
- 一键杀掉(高危!务必先核对进程名):sudo lsof -t -i :8080 | xargs kill -9
- 更安全的做法是先用 sudo lsof -i :8080 -P -n 看清 COMMAND 和 USER,再手动 kill -9 PID











