netstat 常用高效技巧包括:加 -n 避免解析延迟,-lnt/-lnu 查监听端口,-ant 结合 head 查连接,awk/grep 提取进程与状态,-p 需 root 查 PID,-c 或 watch 实现动态监控。

netstat 输出信息丰富但原始,直接阅读效率低。掌握几个简单格式化技巧,能快速定位监听端口、排查异常连接或提取进程信息,不用依赖复杂脚本。
用 -n 和 -t/-u 组合避免解析延迟
默认 netstat 会尝试反向解析 IP 和端口名(比如把 80 显示成 http),拖慢速度且可能卡住。日常排查必须加 -n,配合协议筛选更精准:
-
netstat -lnt:只看 TCP 监听端口,数字显示,最常用 -
netstat -lnu:只看 UDP 监听端口 -
netstat -ant | head -20:查看全部连接前 20 行,-a 包含监听和已建立,-n 避免卡顿
用 awk 或 grep 提取关键字段
原始输出列数固定,可用空格分隔提取特定内容。例如查占用 3306 端口的进程:
-
netstat -lntp | grep ':3306':过滤含 3306 的行 -
netstat -lntp | awk '$4 ~ /:80$/ {print $7}':打印第 7 列(PID/程序名),条件是第 4 列以 :80 结尾 -
netstat -ant | awk '$6 == "TIME_WAIT" {count++} END {print "TIME_WAIT:", count+0}':统计 TIME_WAIT 连接数
用 -p 显示进程时注意权限和格式
加 -p 能看到 PID 和程序名,但需 root 权限才显示所有进程;普通用户只能看到自己启动的服务。输出中 PID/Program name 是一列,格式为 1234/nginx 或 5678/java:
-
sudo netstat -ltnp | grep ':22':确认 sshd 是否在运行及 PID - 若显示
-或???,说明无权限或进程已退出但端口未释放 - 部分 Java 进程名过长会被截断,可结合
ps -p PID -o comm=查完整命令
用 -c 实现动态监控,配合 watch 更直观
-c 参数让 netstat 每秒刷新一次,适合观察连接变化。但原生刷新较简陋,建议搭配 watch:
-
watch -n 2 'netstat -s | grep -A 2 "Tcp:"':每 2 秒看一次 TCP 统计摘要 -
watch -n 1 'netstat -an | grep ESTABLISHED | wc -l':实时统计活跃连接数 - 注意:-c 本身不支持管道,所以用 watch 封装更灵活

















