netstat -tunlp 是 linux 中用于精准查看所有 tcp/udp 监听端口及对应进程的命令组合,需 root 权限才能完整显示系统服务 pid 和程序名,常用于排查端口冲突、服务启动异常与安全审计。

netstat -tunlp 是 Linux 系统中最常用、最实用的网络诊断组合之一,专用于快速定位“谁在监听哪个端口”。它不查域名、不列非监听连接、不遗漏进程信息,适合排查服务启动失败、端口冲突、安全审计等场景。
各选项含义与作用
-t:只显示 TCP 协议相关的连接和监听项(排除 UDP)
-u:只显示 UDP 协议相关的连接和监听项(常与 -t 并用,覆盖主流传输层协议)
-n:禁用 DNS 反向解析,直接显示 IP 地址和端口号(加快输出、避免卡顿)
-l:仅列出处于 LISTEN 状态的套接字(即正在等待连接的服务端口)
-p:显示占用该端口的进程 ID(PID)和程序名(需 root 权限才可看到所有进程)
为什么必须加 sudo?
普通用户执行 netstat -tunlp 时,-p 选项只能显示自己有权限查看的进程。系统级服务(如 nginx、sshd、mysql)通常由 root 启动,其 PID 和程序名对非 root 用户不可见——此时会显示 "-:" 或报错 "(Not all processes could be identified)"。
所以实际使用中应写成:
sudo netstat -tunlp- 或更明确地:
sudo netstat -tulnp(顺序不影响功能)
典型输出字段解读
运行后常见输出类似:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshd tcp6 0 0 [::]:80 [::]:* LISTEN 852/httpd udp 0 0 127.0.0.1:323 0.0.0.0:* 524/chronyd
- Proto:协议类型,tcp / tcp6 / udp / udp6
- Local Address:监听地址。0.0.0.0 表示监听所有 IPv4 接口;[::] 表示监听所有 IPv6 接口;127.0.0.1 表示仅本地回环
- State:TCP 才有此列,LISTEN 表示服务已就绪;UDP 没有状态概念,该列为空
-
PID/Program name:进程号与命令名,如
852/httpd表示 PID 为 852 的 httpd 进程占用了该端口
常见变体与实用技巧
-
sudo netstat -tuln | grep :80:快速筛选监听 80 端口的服务 -
sudo netstat -tuln | awk '{print $7}' | cut -d',' -f1 | sort -u:提取所有唯一进程名 -
sudo netstat -tulnp | grep ':3306':确认 MySQL 是否在运行且绑定正确端口 -
watch -n 2 'sudo netstat -tulnp | grep LISTEN':每 2 秒刷新一次,动态观察监听端口变化










