Linux ss 命令查看网络socket信息 作者:马育民 • 2026-09-25 22:14 • 阅读:10002 # 介绍 `ss`(Socket Statistics)是 Linux 下**替代 netstat** 的套接字查看工具,速度更快、信息更全,内核直接读取 socket 信息,适合高并发服务器。 ### 对比 - `netstat` 遍历 `/proc`,大量连接时很慢 - `ss` 直接调用内核接口。 # 语法 ```bash ss [OPTIONS] [FILTER] ``` ### 常用参数 | 参数 | 说明 | |---|---| | `-t` | TCP 套接字 | | `-u` | UDP 套接字 | | `-x` | Unix 域套接字 | | **`-l`** | 只显示监听端口(Listen) | | `-a` | 所有套接字(监听+已建立) | | **`-n`** | 数字形式,不解析域名/端口名(推荐,更快) | | **`-p`** | 显示进程名和 PID(需要 root 或 `sudo` 权限) | | `-e` | 显示详细信息(uid, inode) | | `-i` | 显示内部 TCP 信息(拥塞窗口、定时器) | | `-s` | 汇总统计,不列出每个连接 | | `-4` | IPv4 | | `-6` | IPv6 | ### -p 显示进程名 **注意:** 非 `root` 用户需要 `sudo` 提权 ``` sudo ss -p ``` [](https://www.malaoshi.top/upload/0/3/1GW478cH8Xhl.png) ### -l 显示端口号(将端口号解析成协议名) ``` ss -l ``` 执行结果如下,将端口号解析成协议名: [](https://www.malaoshi.top/upload/0/3/1GW478fA83X1.png) ### -ln 显示端口号 就显示原始端口号,不会将端口号解析成协议 ``` ss -ln ``` # 例子 **提示:**非root用户需要使用 `sudo`,否则可能不显示程序名 ### 1. 查看所有监听 TCP 端口(数字,带进程) ```bash ss -tlnp ``` ### 2. 查看所有 TCP 连接(包括已建立) ```bash ss -tanp ``` ### 3. 查看 UDP 监听端口 ```bash ss -ulnp ``` ### 4. 连接统计概览 ```bash ss -s ``` 输出示例: ``` Total: 132 (kernel 156) TCP: 18 (estab 4, closed 5, orphaned 0, synrecv 0, timewait 0/0), ports 0 ``` ### 5. 过滤:只看指定端口 ##### 目标端口 80 ```bash ss -t 'dport = :80' ``` ##### 源端口 22 ``` sudo ss -tlnp 'sport = :80' ``` ##### 端口范围 ``` ss -t 'dport >= :8000 and dport <= :8080' ``` ### 6. 过滤指定 IP ```bash ss -t 'src 192.168.1.100' ss -t 'dst 10.0.0.5' ``` ### 7. 查找某程序的端口号 查找nginx程序的端口号 ``` sudo ss -lnp | grep nginx ``` # 返回结果字段说明 `ss -tlnp` 命令的返回结果: ``` State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) ``` - `State`:套接字状态 - `Recv-Q`:接收队列,等待应用读取的数据字节数 - `Send-Q`:发送队列,等待发往对端的数据字节数 - `Local Address:Port`:本机地址端口 - `Peer Address:Port`:对端地址端口 > Recv-Q / Send-Q 不为0:一般代表连接阻塞,需要排查。 原文出处:/show_1GW478N49reL.html