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 -tlnpss -tlnp
  • netstat -anss -tan(或 ss -uan 等按协议拆开)

ss 的过滤语法更丰富(如 sportdportdst),复杂场景下往往一条命令就够。


五、权限与注意事项

  • -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 语法即可。