在Linux和Unix-like系统中,查看当前网络连接状态是网络管理和故障排查的常见需求,通过命令行工具,可以实时监控系统的网络连接、端口占用、进程关联等信息,以下是几种常用的查看当前连接的命令及其详细用法。

ss 命令
ss 是netstat的替代工具,速度更快,功能更强大,默认安装在现代Linux发行版中,它可以显示套接字统计信息,包括TCP、UDP、RAW等协议的连接状态。
-
基本用法:
ss -tulnp
-t:显示TCP连接-u:显示UDP连接-l:仅显示监听端口-n:以数字形式显示地址和端口(不解析域名)-p:显示进程ID和名称
-
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) ESTAB 0 0 192.168.1.100:22 10.0.0.5:12345 users:(("sshd",pid=1235,fd=4))
netstat 命令
netstat是传统工具,仍广泛使用,尤其在旧系统中,功能与ss类似,但性能稍差。

-
基本用法:
netstat -tulnp
参数与
ss命令一致,但需注意netstat可能需要安装net-tools包。 -
输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 192.168.1.100:22 10.0.0.5:12345 ESTABLISHED 1235/sshd
lsof 命令
lsof(List Open Files)可以列出系统打开的文件,包括网络连接,通过指定-i参数,可筛选网络相关连接。
-
基本用法:
lsof -i -P -n
-i:显示网络文件-P:不解析端口号-n:不解析主机名
-
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN) sshd 1235 root 4u IPv4 12346 0t0 TCP 192.168.1.100:ssh->10.0.0.5:12345 (ESTABLISHED)
netstat 与 ss 的对比
| 特性 | ss 命令 |
netstat 命令 |
|---|---|---|
| 默认安装 | 是(现代Linux) | 否(需安装net-tools) |
| 性能 | 更快,基于内核API | 较慢,扫描/proc文件系统 |
| 功能 | 支持更多统计信息(如-w) |
功能相对基础 |
| 推荐场景 | 生产环境、高并发系统 | 兼容旧系统或简单检查 |
高级用法
- 查看特定端口的连接:
ss -tulnp | grep :80 # 查看80端口相关连接
- 统计连接状态:
ss -s # 显示连接总数及各状态统计
- 实时监控连接变化:
watch -n 1 'ss -tulnp' # 每秒刷新一次连接状态
相关问答FAQs
Q1: ss 和 netstat 有什么区别?哪个更推荐?
A1: ss 是netstat的升级版,基于内核API,性能更高,默认支持更多功能(如TCP状态统计),推荐在Linux系统优先使用ss,除非需要兼容旧环境或依赖netstat的特定输出格式。
Q2: 如何查看某个进程占用的所有网络连接?
A2: 使用lsof命令结合进程名或PID,
lsof -i -P -n -p 1234 # 查看PID为1234的进程的网络连接
或通过ss/netstat过滤:
ss -tulnp | grep 'pid=1234'
