做什么

socket statistics——netstat现代继承者。更快、信息更全。

实战

sudo ss -tlnp                  # ★ 常用:所有 TCP 监听端口
sudo ss -tnp                   # 已建立的 TCP 连接
sudo ss -ulnp                  # UDP 监听
sudo ss -tunap                 # TCP + UDP + 所有 + 含监听 + 显示进程

参数速查

参数 含义
-t TCP
-u UDP
-l 监听(LISTEN)
-n 不解析端口名(更快)
-p 显示进程(需要 root)
-a 所有(含监听 + 已建立)
-4 / -6 只 IPv4 / IPv6
-s 摘要统计

输出含义

State       Recv-Q  Send-Q  Local Address:Port      Peer Address:Port       Process
LISTEN      0       128     0.0.0.0:80              0.0.0.0:*               users:(("nginx",pid=1234))
ESTAB       0       0       192.168.1.100:51234     1.2.3.4:443             users:(("curl",pid=5678))

实战

端口被谁占了

sudo ss -tlnp | grep :80
# LISTEN  0  128  0.0.0.0:80  0.0.0.0:*  users:(("nginx",pid=1234,fd=6))

看与某 IP 的连接

sudo ss -tnp | grep 1.2.3.4

按状态统计

ss -tn | awk 'NR>1 {print $1}' | sort | uniq -c
#  120 ESTAB
#   35 TIME-WAIT
#   10 CLOSE-WAIT       ← 应用 bug 信号

过滤特定状态

ss -tn state time-wait
ss -tn state established
ss -tn 'dport == :443'

摘要

ss -s
# Total: 425
# TCP:   234 (estab 80, closed 100, ...)

ss vs netstat 对比

ss netstat
速度 慢(大量连接时)
数据来源 直接读内核 解析 /proc/net/*
进程显示 友好 需要 -p
高级过滤
普及度 现代默认 老系统才有

新系统用 ss——netstat 通常需要单独装。

常用别名

alias ports='sudo ss -tlnp'
alias conns='sudo ss -tnp'

  • 没 sudo 看不到 Process 列——别人的进程信息要权限
  • ss 默认显示 IPv4 + IPv6 都有的接口(如 :::80)——-4 可以只看 IPv4