netstat 是排查端口占用的经典工具,需 sudo 权限查看监听状态及进程信息;常用命令如 sudo netstat -tulnp | grep :8080,可结合 grep 精确过滤多端口,替代工具有 ss 和 lsof。

排查端口被谁占用,netstat 是一个经典且有效的工具,尤其在较老或未预装 ss 的 Linux 系统中仍广泛使用。它能列出当前所有网络连接、监听端口及对应进程信息,但需注意:普通用户默认看不到其他用户的进程,通常需加 sudo 才能准确定位。
查看指定端口是否被监听
快速确认某个端口(比如 8080)是否处于监听状态:
sudo netstat -tuln | grep :8080
参数说明:
- -t:显示 TCP 连接
- -u:显示 UDP 连接
- -l:仅显示监听中的套接字(即服务端口)
- -n:以数字形式显示地址和端口(不解析主机名和服务名,更快更可靠)
输出中若含 LISTEN,说明该端口正被某进程监听。
查出占用端口的进程 PID 和程序名
要看到具体是哪个进程占用了端口,必须加上 -p 参数(需 root 权限):
sudo netstat -tulnp | grep :3306
输出示例:tcp6 0 0 *:3306 *:* LISTEN 1234/mysqld
其中 1234 是 PID,mysqld 是进程名。若显示 - 或提示 Permission denied,说明权限不足或进程属于其他用户且未授权查看。
结合 grep 精确过滤常见服务端口
一次性检查多个关键端口(如 Web、数据库、SSH),可这样写:
sudo netstat -tulnp | grep -E ':(80|443|22|3306|5432|6379)'
这样能快速定位常用服务是否启动、是否冲突。注意:部分容器化或 systemd socket 激活的服务可能不会始终显示为 LISTEN,需结合 systemctl status 判断。
替代方案与注意事项
netstat 在新系统中已逐渐被 ss(socket statistics)取代,后者更快、更轻量。等效命令为:
sudo ss -tulnp | grep :8080
如果系统没有 netstat,可通过安装 net-tools 包补全(如 Ubuntu/Debian:sudo apt install net-tools;CentOS/RHEL:sudo yum install net-tools)。另外,lsof -i :端口号 也是常用补充手段,逻辑更直观。










