您的位置:首页 > 运维架构 > Linux

每天一个Linux命令(54):ss

2017-04-18 13:44 585 查看
ss是Socket Statistics的缩写。顾名思义,ss用来获取socket的统计信息,它可以显示和netstat类似的内容。但ss的优势在于,它能够显示更多更详细的TCP连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用
netstat
还是
cat /proc/net/tcp
,执行速度都会很慢。当服务器维持的连接数达到上万个时,使用netstat等于浪费生命,而用ss才节省时间。

天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag,是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢,但仍然比 netstat要快。

1. 命令格式

ss [参数]

ss [参数] [过滤]


2. 命令功能

用来获取socket统计信息,此命令输出的结果类似netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比netstat更快速高效。

3. 命令参数

-h, –help,帮助信息

-V,–version,程序版本信息

-n,–numeric,不解析服务名称

-r,–resolve,解析主机名

-a,–all,显示所有套接字(sockets)

-l,–listening,显示监听状态的套接字(sockets)

-o,–options,显示计时器信息

-e,–extended,显示详细的套接字(sockets)信息

-m,–memory,显示套接字(socket)的内存使用情况

-p,–processes,显示使用套接字(socket)的进程

-I,–info,显示TCP内部信息

-s,–summary,显示套接字(socket)使用概况

-4,–ipv4,仅显示IPv4的套接字(sockets)

-6,–ipv6,仅显示IPv6的套接字(sockets)

-0,–packet,显示 PACKET 套接字(socket)

-t,–tcp,仅显示 TCP套接字(sockets)

-u,–udp,仅显示 UCP套接字(sockets)

-d,–dccp,仅显示 DCCP套接字(sockets)

-w,–raw,仅显示 RAW套接字(sockets)

-x,–unix,仅显示 Unix套接字(sockets)

-f,–family=FAMILY,显示FAMILY类型的套接字(sockets),FAMILY可选,支持unix, inet, inet6, link, netlink

-A,–query=QUERY,–socket=QUERY,QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D,–diag=FILE,将原始TCP套接字(sockets)信息转储到文件

-F,–filter=FILE,从文件中读取过滤器的信息,FILTER := [ state TCP-STATE ] [ EXPRESSION ]

4. 使用实例

例一:显示TCP连接

命令:
ss -t -a


例二:显示 Sockets摘要

命令:
ss -s




说明:列出当前的established,closed,orphaned and waiting TCP sockets

例三:列出所有打开的网络连接端口

命令:
ss -l


# ss -l

Recv-Q Send-Q      Local Address:Port  Peer Address:Port
0      0           127.0.0.1:smux      *:*
0      0           *:3690              *:*
0      0           *:ssh               *:*


例四:查看进程使用的socket

命令:
ss -pl


# ss -pl

Recv-Q Send-Q Local Address:Port  Peer Address:Port
0      0       127.0.0.1:smux   *:*  users(("snmpd",2716,8))
0      0       *:3690        *:*   users:(("svnserve",3590,3))
0      0       *:ssh         *:*   users:(("sshd",2735,3))


例五:找出打开套接字/端口的应用程序

命令:
ss -lp | grep 3306


# ss -lp|grep 1935

0      0    *:1935   *:*   users:(("fmsedge",2913,18))
0      0    127.0.0.1:19350  *:*  users:(("fmsedge",2913,17))

# ss -lp|grep 3306

0      0    *:3306   *:*   users:(("mysqld",2871,10))


例六:显示所有UDP Sockets

命令:
ss -u -a


# ss -u -a

State   Recv-Q Send-Q  Local Address:Port Peer Address:Port
UNCONN  0      0       127.0.0.1:syslog   *:*
UNCONN  0      0       *:snmp             *:*
ESTAB      0      0    192.168.120.203:39641  10.58.119.119:domain


例七:显示所有状态为established的SMTP连接

命令:

ss -o state established '( dport = :smtp or sport = :smtp )'


# ss -o state established '( dport = :smtp or sport = :smtp )'

Recv-Q Send-Q Local  Address:Port  Peer Address:Port


例八:显示所有状态为Established的HTTP连接

命令:
ss -o state established '( dport = :http or sport = :http )'


# ss -o state established '( dport = :http or sport = :http )'

Recv-Q Send-Q Local Address:Port   Peer Address:Port
0      0      75.126.153.214:2164  192.168.10.42:http


例九:列出处于FIN-WAIT-1状态的,源端口为80或443,目标网络为193.233.7/24的所有tcp套接字

命令:
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24


例十:用TCP状态过滤Sockets

命令:

ss -4 state FILTER-NAME-HERE
ss -6 state FILTER-NAME-HERE


# ss -4 state closing

Recv-Q Send-Q   Local Address:Port   Peer Address:Port
1      11094    75.126.153.214:http  192.168.10.42:4669


说明:FILTER-NAME-HERE可以代表以下任何一个:

established

syn-sent

syn-recv

fin-wait-1

fin-wait-2

time-wait

closed

close-wait

last-ack

listen

closing

all,所有以上状态

connected,除了listen and closed的所有状态

synchronized,所有已连接的状态除了syn-sent

bucket,显示状态为maintained as minisockets,如:time-wait和syn-recv

big,和bucket相反

例十一:匹配远程地址和端口号

命令:

ss dst ADDRESS_PATTERN

ss dst 192.168.1.5

ss dst 192.168.119.113:http

ss dst 192.168.119.113:smtp

ss dst 192.168.119.113:443


例十二:匹配本地地址和端口号

命令:

ss src ADDRESS_PATTERN

ss src 192.168.119.103

ss src 192.168.119.103:http

ss src 192.168.119.103:80

ss src 192.168.119.103:smtp

ss src 192.168.119.103:25


例十三:将本地,远程端口与一个数比较

命令:

ss dport OP PORT

ss sport OP PORT


输出:



说明:

ss dport OP PORT,远程端口和一个数比较

ss sport OP PORT,本地端口和一个数比较

OP可以代表以下任意一个:
- <= or le,小于或等于端口号
- >= or ge,大于或等于端口号
- == or eq,等于端口号
- != or ne,不等于端口号
- < or gt,小于端口号
- > or lt,大于端口号


例十四:ss 和 netstat 效率对比

命令:

time netstat -at

time ss


输出:



说明:用time,分别获取netstat和ss占用资源所使用的时间。在服务器连接数比较多的时候,netstat的效率完全没法和ss比。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux