加 -n 是因为不加时域名解析会导致列偏移和状态字段错位或换行,使 grep 漏匹配;可靠统计需用 awk 提取 $NF 并忽略大小写与空格;推荐改用预装的 ss 命令替代 netstat。

netstat -ant 为什么必须加 -n 才能准确定义状态字段
因为 netstat -ant 输出中,状态(state)总在最后一列($NF),但若不加 -n,域名解析可能把输出撑宽、导致列偏移,awk 取值错位;更严重的是,某些系统在解析失败时会在状态前插入空格或换行,使 grep ESTABLISHED 漏匹配。加 -n 强制数字地址后,格式稳定,$NF 始终可靠指向状态字符串。
统计 ESTABLISHED 连接数时 grep 会漏判的三种情况
netstat -ant | grep ESTABLISHED | wc -l 看似简单,实际容易漏掉:
- 状态字段带尾部空格:如
"ESTABLISHED "(注意末尾空格),grep ESTABLISHED不匹配 - 大小写混用:部分内核或 netstat 版本输出
established小写 - 字段被截断:长域名导致状态列被挤到下一行,
grep扫不到
正确做法是用 awk 提取最后一列再匹配:netstat -ant | awk '$NF ~ /^[Ee][Ss][Tt][Aa][Bb][Ll][Ii][Ss][Hh][Ee][Dd]$/ {++c} END {print c+0}'
按所有 TCP 状态分类统计的可靠写法
别用多次 grep,效率低还易漏。直接用 awk 一次性分组计数:
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for (s in S) print s, S[s]}'
关键点:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用
/^tcp/过滤开头为 tcp 的行,排除 udp、unix 等干扰 -
$NF是最后一列,即状态名(如ESTABLISHED、TIME_WAIT、CLOSE_WAIT) - 输出无序,加
| sort -k2nr可按数量倒序排列 - 注意:
LISTEN算监听套接字,不是连接,别和ESTABLISHED混为一谈
netstat 在新系统上跑不通的典型报错和应对
执行 netstat 报 command not found 是常态,不是你环境坏了:
- CentOS 8+/Rocky 9、Ubuntu 20.04+ 默认不装
net-tools包 - Alpine、distroless 容器镜像根本没它,硬装会增大镜像体积且无必要
- 装了也可能冲突:比如和
systemd-resolved共享 socket 时触发权限拒绝
真要兼容老脚本,优先装包而非硬扛:
yum install -y net-tools(RHEL/CentOS/Rocky)apt-get install -y net-tools(Debian/Ubuntu)
但更推荐直接切到 ss:它预装、快、格式稳定,ss -tan | awk '{print $1}' | sort | uniq -c 效果一致且无兼容风险。
真正难处理的不是命令怎么写,而是你看到 CLOSE_WAIT 数量持续上涨时,得立刻去查应用层是否忘了 close() 或 fclose() —— 那才是连接泄漏的根源,工具只是照妖镜。

















