1. 写在前面
本文主要介绍 Linux ss (socket statistics)
命令: 用于显示 socket 统计信息的 CLI 命令。ss
命令是现已过时的 netstat
命令的简化版,相对速度更快、显示更多更详细关于 TCP 和连接状态的信息。
本文概述了如何使用 ss
命令,并举例说明了最常见的使用情况。
2. Linux ss 命令示例
ss
命令基本用法:ss [options]
不带任何参数,输出已建立连接的开放非监听套接字列表。
root@dev:~# ss
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796
u_str ESTAB 0 0 /run/containerd/containerd.sock 25659 * 23929
u_str ESTAB 0 0 /run/systemd/journal/stdout 23410 * 25645
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810556 * 2810555
显示以下详细信息:
-
Netid :套接字(socket)类型,常见类型有 TCP、UDP、u_str(Unix stream)和 u_seq(Unix sequence);
-
State :套接字(socket)状态,常见
ESTAB
(已建立)、UNCONN
(未连接)、LISTEN
(正在监听); -
Recv-Q :队列中已接收数据包的数量;
-
Send-Q :队列中已发送数据包的数量;
-
Local Address:Port :本机地址和端口;
-
Peer Address:Port :远程主机地址和端口;
要获得更详细的输出结果,可在 ss
命令中添加选项:
ss <options>
或
ss <option 1> <option 2> <option 3>
【注意】:如果在运行 ss
命令时遇到以下错误:
```
ss: command not found
```
可以根据 Linux 发行版安装以下软件包:
```
Debian: apt-get install iproute2
Ubuntu: apt-get install iproute2
Alpine: apk add iproute2
Arch Linux: pacman -S iproute2
Kali Linux: apt-get install iproute2
CentOS: yum install iproute
Fedora: dnf install iproute
Raspbian: apt-get install iproute2
```
2.1 列出所有连接
列出所有监听和非监听的连接:
root@dev:~# ss -a
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:systemd-resolve/609 *
nl UNCONN 0 0 rtnl:dockerd/907 *
nl UNCONN 0 0 rtnl:systemd/1 *
或:
ss --all
2.2 监听套接字列表
仅显示监听套接字(默认情况下省略);
ss -l
或
ss --listen
2.3 列出 TCP 连接
要列出 TCP
连接,请在 ss
命令中添加 -t
选项;
ss -t
或
ss --tcp
列出所有 TCP 连接
将选项 -a
和 -t
与 ss
命令结合使用,可输出所有 TCP 连接的列表:
root@dev:~# ss -at
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*
列出所有监听 TCP 连接
将选项 -l
和 -t
与 ss
命令结合使用,可以列出所有监听的 TCP 连接:
root@dev:~# ss -lt
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*
LISTEN 0 128 127.0.0.1:43829 0.0.0.0:*
2.4 列出 UDP 连接
显示 UDP 连接列表;
ss -u
或
ss --udp
列出所有 UDP 连接
将选项 -a
和 -u
与 ss
结合使用,可输出所有 TCP 连接的列表:
ss -au
列出所有监听的 UDP 连接
列出所有正在监听的 UDP 连接,使用带有 -l
和 -u
选项的 ss
命令:
ss -lu
2.5 列出 Unix 套接字
显示所有 Unix 系列套接字;
root@dev:~# ss -f unix
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796
u_str ESTAB 0 0 /run/containerd/containerd.sock 25659 * 23929
或者使用更短的别名:
ss -x
2.6 原始套接字列表
列出原始套接字;
ss -w
或
ss --raw
2.7 列出与特定 IP 地址的连接
列出与特定目标 IP 地址的连接:
ss dst <address>
示例:
root@dev:~# ss dst 10.100.0.111
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 10.100.0.111:33474 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:60820 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:35706 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:35624 10.100.0.111:6379
显示与特定源地址的连接:
ss src <addresss>
示例:
root@dev:~# ss src 10.100.0.111
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 10.100.0.111:33474 10.100.0.111:6379
tcp ESTAB 0 0 10.100.0.111:60820 10.100.0.111:6379
2.8 显示进程 ID (PID)
root@dev:~# ss -p
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 /run/systemd/journal/stdout 19228 * 21675 users:(("systemd-journal",pid=373,fd=31),("systemd",pid=1,fd=76))
u_str ESTAB 0 0 /run/containerd/containerd.sock.ttrpc 2810571 * 2811796 users:(("containerd",pid=684,fd=66))
2.9 列表汇总统计
列出以下连接的汇总统计信息
root@dev:~# ss -s
------------------------------------------------------------------------------------
Total: 471
TCP: 461 (estab 75, closed 306, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 1 0 1
UDP 2 2 0
TCP 155 117 38
INET 158 119 39
FRAG 0 0 0
2.10 列出 IPv4 和 IPv6 套接字连接
IPv4:
ss -4
IPv6:
ss -6
例如,用以下命令列出所有 IPv6 UDP 连接:
ss -au6
2.11 过滤连接
使用 ss
命令可以对结果进行高级过滤,并搜索特定端口或 TCP 状态;
使用 TCP 状态进行过滤:
使用 TCP 预定义状态过滤 TCP 连接:
ss state <name of state>
例如,查找所有正在监听的 TCP 连接:
root@dev:~# ss -t state listening
------------------------------------------------------------------------------------
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 4096 0.0.0.0:http 0.0.0.0:*
0 128 127.0.0.1:41331 0.0.0.0:*
按端口号筛选:
筛选特定目标端口号或端口名称:
ss <options> dst :<port number or name>
示例:
root@dev:~# ss dst :9000
------------------------------------------------------------------------------------
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp CLOSE-WAIT 1 0 10.100.0.111:34054 10.100.0.111:9000
tcp CLOSE-WAIT 1 0 10.100.0.111:43514 10.100.0.111:9000
或使用端口名称:
ss dst :https
组合多个查询,进行更高级的过滤。例如,查找目标端口为 5228 或源端口为 mysql 的所有连接:
ss -a dst :5228 or src :mysql
2.12 帮助手册或列出所有命令
有关如何使用该命令的详细介绍:
man ss
或
ss -h
3. netstat VS ss
ss
命令被认为是过时的 netstat
命令的替代命令,与 net-tools
软件包相比,iproute2
软件包的 CLI 实用程序速度更快,过滤选项更好。
效率对比:
root@dev:~# time netstat -at
------------------------------------------------------------------------------------
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
... ...
real 0m0.301s
user 0m0.000s
sys 0m0.016s
root@dev:~# time ss -at
------------------------------------------------------------------------------------
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:http 0.0.0.0:*
LISTEN 0 128 127.0.0.1:41331 0.0.0.0:*
... ...
real 0m0.011s
user 0m0.000s
sys 0m0.011s
从上面的执行效率可以清晰地看到,ss
命令的执行速度是 netstat
的 27 倍(不同环境可能执行效率不一样),可以看到 ss
命令的执行之快的优势,体现的尤为突出。也为我们的工作解决执行节省时间(即使当服务器效率较低时)。
4. 结论
该工具可利用高级过滤选项查找套接字和网络统计数据,从而获得更好的故障排除体验。该工具是任何系统和网络管理员都必须掌握的工具。
感谢您花时间阅读文章!
收藏本站不迷路!
原文始发于微信公众号(滑翔的纸飞机):Linux 命令:ss (socket statistics)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260907.html