lsof -i 命令用于查询进程打开的网络端口,核心是参数组合与sudo权限;查8080端口占用用 sudo lsof -i :8080,加 -P -n 可禁用解析、提升速度和可读性,输出重点关注 COMMAND、PID 和 NAME 字段。

直接用 lsof -i 加条件就能查进程打开的网络端口,关键在参数组合和权限。
查指定端口被谁占用
最常用场景:服务启动失败提示“Address already in use”。
- sudo lsof -i :8080 —— 查所有使用 8080 端口的连接(LISTEN、ESTABLISHED 都包含)
- sudo lsof -i TCP:22 —— 只看 TCP 协议的 22 端口,排除 UDP 干扰
- sudo lsof -i :80 -i :443 —— 同时查多个端口,-i 参数可重复,逻辑是“或”
- 加 -P -n 更实用:sudo lsof -i :3000 -P -n,避免解析端口名(如把 3000 显示成 http)和域名,输出更快更干净
查所有监听中的端口
想快速扫一遍当前有哪些服务在监听,而不是只盯某一个端口。
- sudo lsof -i -sTCP:LISTEN —— 只列出 TCP 的 LISTEN 状态连接(最常用)
- sudo lsof -iTCP -sTCP:LISTEN —— 效果同上,写法更明确
- sudo lsof -iUDP -sUDP:BOUND —— 查 UDP 监听(UDP 没有 LISTEN,状态是 BOUND)
按协议或范围批量查看
排查系统级问题时,常需扩大范围观察。
- sudo lsof -i TCP:1-1024 —— 查特权端口区(1–1024)所有 TCP 连接
- sudo lsof -i UDP —— 列出全部 UDP 连接,适合查 DNS(53)、NTP(123)等
- sudo lsof -i @192.168.1.100 —— 查与指定 IP 的所有通信(含 TCP/UDP)
看懂输出里的关键字段
结果里真正有用的就三列:COMMAND、PID、NAME。
- COMMAND 是进程名(如 node、java、nginx)
- PID 是进程号,后续 kill 或调试都靠它
- NAME 列显示端点信息,例如 *:3000(LISTEN) 表示监听本机所有 IP 的 3000 端口;127.0.0.1:5432->127.0.0.1:57892(ESTABLISHED) 表示本地 PostgreSQL 正与另一个本地进程通信











