ss(socket statistics)是 Linux 上查看套接字状态的常用工具,属于 iproute2 套件(与 ip 命令同源)。
在多数发行版里,它已经是替代 netstat 的推荐方式:直接从内核取信息,列表大时通常更快,参数表达也更贴近现代 TCP 状态机。
日常排障里,ss 最常用来回答三件事:谁在监听、连向哪里、当前连接处于什么状态。
一、ss 能做什么
- 列出 TCP/UDP/UNIX 等套接字的监听与已建立连接
- 按端口、地址、状态过滤输出
- 结合
-p查看关联进程(需足够权限) - 配合脚本做轻量监控或巡检
二、常见参数速查
| 选项 | 含义 |
|---|---|
-t |
仅 TCP |
-u |
仅 UDP |
-l |
仅监听(listening) |
-a |
所有状态(含 ESTAB、TIME-WAIT 等) |
-n |
数字形式显示地址与端口(不做 DNS 反解) |
-p |
显示进程信息(PID/程序名) |
-4 / -6 |
仅 IPv4 / 仅 IPv6 |
-s |
打印套接字统计摘要 |
状态过滤可用 state 关键字,例如:ss state established。
三、常用案例
1)一眼看完本机监听端口(最常用)
ss -tlnp
-t TCP,-l 监听,-n 避免反查主机名拖慢输出,-p 显示进程(无 root 时可能看不到其他用户的进程)。
典型输出片段含义:
Local Address:Port:本机绑定地址与端口(*或0.0.0.0表示监听所有接口)Peer Address:Port:监听套接字下多为*:*或0.0.0.0:*
2)同时看 TCP 与 UDP 监听
ss -tulnp
适合快速确认 Web、DNS、代理 等常见服务是否在预期端口上监听。
3)查某个端口是否被占用(例如 8080)
ss -tlnp 'sport = :8080'
也可配合 grep:
ss -tlnp | grep ':8080'
前者由 ss 自己过滤,套接字极多时更省事。
4)查看当前已建立的 TCP 连接
ss -tn state established
排查 连接数暴涨、异常外连 时,可先跑这条看量级与对端地址。
5)按对端 IP 过滤(例如只看连到 192.168.1.1 的 TCP)
ss -tn dst 192.168.1.1
6)查看 UNIX 域套接字(本机进程间通信)
ss -xlp
-x UNIX socket,-l 监听,-p 进程。排查 数据库本地 socket、容器/应用 IPC 时有用。
7)套接字总体统计(快速健康检查)
ss -s
输出里会看到 TCP/UDP 等各协议的 总数、各状态计数,适合写进简单巡检脚本。
四、与 netstat 的对应关系(便于迁移)
习惯 netstat 的同学可以大致对照:
netstat -tlnp→ss -tlnpnetstat -an→ss -tan(或ss -uan等按协议拆开)
ss 的过滤语法更丰富(如 sport、dport、dst),复杂场景下往往一条命令就够。
五、权限与注意事项
-p显示其他用户的进程 通常需要 root(或CAP_NET_ADMIN等能力,视内核与配置而定)。- 生产环境批量执行时,建议默认加
-n,避免 DNS 反解导致卡顿或泄露查询行为。 - 若系统提示没有
ss,请安装 iproute2(包名在 Debian/Ubuntu 多为iproute2,在 RHEL 系多为iproute)。
六、小结
ss 是现代 Linux 上查看套接字的首选工具:速度快、过滤灵活、与 ip 工具链一致。
记住 ss -tlnp / ss -tulnp / ss -tn state established / ss -s 四条,多数日常排障已经足够;需要精细条件时再查 man ss 里的 filter 语法即可。