首页/系统/Linux 运维命令速查/ss 过滤表达式进阶
网络命令82 条

ss 过滤表达式进阶

ss 支持类 tcpdump 的过滤语法:按端口、状态、地址、进程名筛选,海量连接时快速定位目标。

Linux 运维命令速查系统更新于 2026-10-13

ss 过滤表达式是什么

ss 支持类似 tcpdump 的过滤表达式,可以按端口、状态、地址条件筛选套接字,并且在内核侧完成:匹配的是字段语义,而不是输出里的文本片段,所以不会出现 grep 误命中的情况,海量连接时开销也更低。

基本信息

适用平台Linux(iproute2 套件)
命令语法ss [选项] '过滤表达式'
常用条件sport、dport、src、dst、state 以及括号组合
书写要点表达式整体加引号,状态名使用连字符

典型使用场景

  • 定位监听者:直接用源端口条件找出监听某个端口的进程
  • 按对端筛选:只看与某个数据库地址之间的连接,排除其他流量
  • 组合条件:用或与括号表达双向端口匹配这类复杂条件
  • 状态排查:筛出半关闭请求堆积的连接,判断应用是否漏关闭
  • 先筛后排:过滤后再交给 grep 排除已知进程,缩小范围

常用示例

常用示例
ss -tlnp 'sport = :443'                       # 谁在监听 443
ss -tnp dst 10.0.0.9                          # 与指定地址之间的 TCP 连接
ss -tnp '( dport = :443 or sport = :443 )'    # 443 双向流量
ss -tan state close-wait | head               # 揪出卡在 CLOSE-WAIT 的连接
ss -tan state time-wait | wc -l               # 统计 TIME-WAIT 数量
ss -tnp sport = :22 | grep -v sshd            # 过滤后再排除已知进程

常用条件

条件含义示例
sport 与 dport源端口与目标端口sport = :443
src 与 dst源地址与目标地址dst 10.0.0.9
state连接状态state close-wait
and 与 or条件组合( dport = :443 or sport = :443 )
取反排除某类连接写法随版本不同,先小范围验证
半关闭一侧堆积说明应用没有正确关闭连接;TIME-WAIT 多为短连接的正常现象,数量异常巨大时再考虑内核参数调优。
表达式里的地址条件也支持整个网段写法,排查某一网段的连接时比反复过滤文本更快也更准。
过滤结果为空不代表服务正常,先去掉过滤条件看全量输出,确认进程确实在监听再下结论。
过滤表达式必须整体加引号,不加会被 shell 拆成多个参数,ss 会报语法错误。
过滤是在内核里完成的,比先输出全部连接再交给 grep 过滤快得多,连接数上万时差别很明显。多个状态可以用括号与 or 组合,写不确定时先不加过滤跑一次全量输出,看清状态名与地址写法后再逐步收窄条件。

易错点

  • 过滤表达式不加引号会被 shell 拆成参数,ss 只报语法错误而不提示原因
  • 状态名使用连字符(如 close-wait),写成下划线或带空格会直接报错
  • 不写 -t 或 -u 时默认只列 TCP,排查 UDP 服务时会误判为没有任何连接
  • 端口方向写反(该用 sport 却写了 dport)会得到空结果,看起来像服务没起来
  • 只给表达式的一部分加引号:括号会被 shell 当成子 shell 语法,报出与过滤无关的错误,条件复杂时把整个表达式放在一对引号里

数据来源与参考

  • man 8 ss(iproute2 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌