Linux 之 ss 和 netstat 命令
在 Linux 中,ss 和 netstat 都是用于监控网络连接和套接字统计信息的重要工具。
ss 命令
ss(socket statistics)是 netstat 的现代替代品,速度更快,提供的信息更详细。
ss 常用选项
bash
ss --help
# 显示所有连接
ss -a
# 显示 TCP 连接
ss -t
# 显示 UDP 连接
ss -u
# 显示监听端口
ss -l
# 显示数字格式
ss -n
# 显示进程信息
ss -p
# 显示定时器信息
ss -o
# 显示更详细的信息
ss -e
# 显示套接字统计摘要
ss -s查看监听端口
bash
ss -tunlpss 查看端口占用,并从小到大排序
shell
ss -tunlp | sort -n -t: -k2查看特定端口的连接
bash
# 查看 80 端口的连接
ss -t sport = :80
# 查看源端口为 443 的连接
ss -t dport = :443查看特定状态的连接
bash
# 仅显示已建立的 TCP 连接
# 查看所有 ESTABLISHED 状态的 TCP 连接
ss -t state established
# 仅显示监听中的 TCP 连接
# 查看所有 LISTEN 状态的 TCP 连接
ss -t state listening状态说明
常见的 TCP 连接状态:
LISTEN- 监听连接请求ESTABLISHED- 已建立的连接SYN-SENT- 发送连接请求后等待匹配SYN-RECEIVED- 收到连接请求后发送确认CLOSE-WAIT- 等待从本地用户发来的连接中断请求TIME-WAIT- 等待足够的时间以确保远程TCP接收到连接中断请求的确认
netstat 命令
简介
netstat(network statistics)是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息。
netstat 常用选项
bash
# 显示所有连接
netstat -a
# 显示 TCP 连接
netstat -t
# 显示 UDP 连接
netstat -u
# 显示监听端口
netstat -l
# 显示数字格式(不解析主机名和服务名)
netstat -n
# 显示进程信息
netstat -p
# 组合使用示例
netstat -tunlp # 显示所有 TCP/UDP 监听端口及进程信息
netstat -rn # 显示路由表
netstat -i # 显示网络接口统计netstat 查看端口占用,并从小到大排序
shell
netstat -tunlp | sort -n -k 4.2netstat 根据端口号,查询进程名称和进程 ID
shell
[root@localhost ~]# netstat -tunlp | grep 3306
tcp6 0 0 :::3306(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)netstat 根据进程名称,查询进程 ID 和端口号
shell
[root@localhost ~]# netstat -tunlp | grep mysqld
tcp6 0 0 :::33060(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
tcp6 0 0 :::3306 (端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)netstat 根据进程 ID,查询进程名称和端口号
shell
[root@localhost ~]# netstat -tunlp | grep 29520
tcp6 0 0 :::33060(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
tcp6 0 0 :::3306 (端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)主要区别
| 特性 | netstat | ss |
|---|---|---|
| 性能 | 较慢,从 /proc/net 读取 | 快速,直接从内核获取 |
| 信息详细度 | 基本信息 | 更详细的信息(定时器、内存使用等) |
| 状态过滤 | 有限 | 强大的状态过滤功能 |
| 系统资源 | 占用较多 | 占用较少 |
| 现代系统 | 逐渐被淘汰 | 推荐使用 |
建议
在现代 Linux 系统中,推荐使用 ss 命令,因为它:
- 速度更快
- 提供更详细的信息
- 功能更强大
- 是未来发展的方向
不过,了解 netstat 仍然很有用,因为在一些老系统或容器环境中可能只有这个工具可用。
