命令简介

ss 是一个用于显示Socket统计信息的命令,它可以查看Socket的详细信息,包括Socket类型、状态、进程等。ss 命令是较新的工具,它比老的 netstat 命令有更多的功能,输出信息也更加详细清晰。因此,在现代 Linux 系统中,ss 命令被推荐作为查看网络连接信息的首选工具。

命令格式

1
ss [options] [filter]

参数说明

参数 说明 备注
-h, –help 显示帮助信息 -
-V, –version 显示版本信息 -
-n, –numeric 不解析服务名称,直接显示端口号 -
-r, –resolve 解析主机名、端口号为服务名 -
-a, –all 显示所有Socket -
-l, –listening 仅显示监听状态的Socket -
-o, –options 显示计时器信息 -
-e, –extended 显示详细的Socket信息 -
-m, –memory 显示Socket的内存使用情况 -
-p, –processes 显示使用Socket的进程信息 -
-i, –info 显示Socket的 TCP 内部信息 -
-s, –summary 显示Socket汇总统计信息 -
-4, –ipv4 仅显示 IPv4 Socket -
-6, –ipv6 仅显示 IPv6 Socket -
-0, –packet 显示 PACKET 类型的 Socket -
-t, –tcp 仅显示 TCP Socket -
-u, –udp 仅显示 UDP Socket -
-d, –dccp 仅显示 DCCP Socket -
-w, –raw 仅显示 RAW Socket -
-x, –unix 仅显示 Unix Socket -
-f, –family=FAMILY 显示指定协议家族的 Socket -
-A, –query=QUERY, –socket=QUERY 由 QUERY 决定显示哪些 Socket -
state TCP-STATE-FILTER 仅显示处于指定状态的 TCP Socket -
TCP-STATE-FILTER 可选值: all, bucket, big, connected, synchronized, bucket, close-wait, close-wait, close-wait, established, syn-recv, syn-sent, fin-wait-1, fin-wait-2, time-wait, last-ack, closing, unknown -

命令实例

基础用法

1.显示所有监听状态的 Socket

1
$ ss -l

2.显示所有 TCP Socket 连接

1
$ ss -t -a

3.显示所有 UDP Socket 连接

1
$ ss -u -a

4.显示所有 TCP/UDP Socket 连接

1
$ ss -tu

5.显示所有进程使用的 Socket

1
$ ss -p

6.显示所有进程使用的 TCP Socket

1
$ ss -pt

7.显示所有进程使用的 UDP Socket

1
$ ss -pu

8.显示指定状态的 TCP Socket

1
2
$ ss -nt state established
$ ss -nt state listen

9.显示指定端口的 Socket 连接

1
2
$ ss -nt sport = :80
$ ss -nt dport = :22

10.显示指定地址的 Socket 连接

1
2
$ ss -nt dst 192.168.1.1
$ ss -nt src 10.0.0.1

扩展使用方法

1.显示详细的 Socket 信息

1
$ ss -e

这个命令会显示更多的 Socket 信息,如 Socket 类型、状态、计时器等。

2.显示内存使用情况

1
$ ss -m

这个命令会显示每个 Socket 的内存使用情况。

3.显示 TCP 内部信息

1
$ ss -ti

这个命令会显示 TCP Socket 的内部信息,如重传队列、拥塞窗口等。

4.显示汇总统计信息

1
$ ss -s

这个命令会显示 Socket 的汇总统计信息,如已使用的 Socket 数量、内存使用情况等。

5.用于显示正在监听的 TCP 和 UDP Socket 连接信息,同时显示进程信息

1
2
3
4
5
6
$ ss -lntp
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))
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2345,fd=6))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1234,fd=4))
LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=2345,fd=7))

通过这个命令,你可以查看系统上所有正在监听的 TCP 和 UDP 端口,以及哪些进程在监听这些端口。这对于确认系统上运行的网络服务、排查网络连接问题等非常有用。

高级使用方法

1.过滤特定协议族的 Socket

1
2
3
$ ss -f inet   # 显示 IPv4 和 IPv6 Socket
$ ss -f inet6 # 仅显示 IPv6 Socket
$ ss -f unix # 仅显示 Unix Socket

2.使用查询语句过滤 Socket

ss 命令支持使用查询语句来过滤 Socket,语法为 ss -A query。常用的查询语句包括:

  • dport / sport: 目标/源端口号
  • dst / src: 目标/源地址
  • state: TCP 连接状态
  • uid: 用户 ID
  • inum: inode 号
  • kernel: 内核 Socket

例如:

1
2
3
$ ss -A 'dport = :80'   # 显示目标端口为 80 的 Socket
$ ss -A 'src 10.0.0.1' # 显示源地址为 10.0.0.1 的 Socket
$ ss -A 'state fin-wait-1 uid 1000' # 显示 UID 为 1000 且状态为 FIN-WAIT-1 的 Socket

3.将输出结果保存到文件

1
$ ss > socket.txt

这个命令会将 ss 的输出结果保存到 socket.txt 文件中。

以上就是关于 ss 命令的详细介绍和使用示例,希望对你有所帮助。如果还有任何疑问或需要进一步的帮助,欢迎随时提出。