文档首页> 技术教程> ss 命令替代 netstat:看连接状态

ss 命令替代 netstat:看连接状态

发布时间:2026-09-04 15:36        更新时间:2026-09-05 12:33
新装的 CentOS 8 之后或较新的 Debian、Ubuntu 上敲 netstat,大概率提示 command not found。原因很简单:netstat 属于 net-tools 工具包,多年没有实质维护,它读取 /proc 文件的实现方式在连接数大时也慢。替代品是 ss,走 netlink 接口直接从内核拿数据,连接上万条时 netstat 要跑好几秒,ss 基本是瞬间出结果。工具换代不是什么坏事,跟着发行版的推荐走,效率只会更高。 ## 几个参数各管什么 ss 的参数和 netstat 高度相似,记住四个字母就够用。-t 只看 TCP;-l 只看监听状态的套接字;-n 不做域名解析,直接显示 IP 和端口;-p 显示占用端口的进程名和 PID,需要 root。最常用的一条: ``` sudo ss -tlnp ``` 服务器上开着哪些服务、谁在监听,一屏看全。顺手确认有没有不该对公网开的端口,比如数据库监听在 0.0.0.0 上,就该挪到防火墙后面。输出里的 Recv-Q、Send-Q 两列在监听状态下另有含义:前者是当前排在 accept 队列里的连接数,后者是队列上限,排满说明应用处理不过来。 ## 状态统计与过滤 排查连接数暴涨时,按状态汇总比逐条翻有用: ``` ss -s ss -ant | awk '{print $1}' | sort | uniq -c ``` 前者给总体摘要,后者数出各状态的连接条数,TIME-WAIT 是否异常一眼可见。TIME-WAIT 多本身不全是坏事,说明刚处理完大量短连接;真正要警惕的是 established 持续顶在高位下不来。定位攻击来源时,统计某端口各来源 IP 的连接数: ``` ss -tn state established '( sport = :80 )' | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -nr | head ``` 排查数据库连接堆积,则按目标端口过滤:ss -tn state established '( dport = :3306 )'。过滤语法里端口号带冒号,也可以写成具体 IP 精确到来源。 ## 和 netstat 怎么选 老脚本里的 netstat 不用急着改,新写的命令一律用 ss。两者的输出列名略有差异,照抄旧参数前先手工跑一遍确认。极老系统上没有 ss,安装 iproute 包即可获得。机器上有没有它,which ss 一下便知,输出为空就装。 日常巡检把 sudo ss -tlnp 和 ss -s 放进备忘,看连接这类事基本用不着别的命令了。