做什么
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