linux ss命令详解

ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

常用选项

-h, --help 帮助
-V, --version 显示版本号
-t, --tcp 显示 TCP 协议的 sockets
-u, --udp 显示 UDP 协议的 sockets
-x, --unix 显示 unix domain sockets,与 -f 选项相同
-n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"
-l, --listening 只显示处于监听状态的端口
-p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)
-a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
-r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

常见用例

如果不添加选项 ss 命令默认输出所有建立的连接(不包含监听的端口),包括 tcp, udp, and unix socket 三种类型的连接:

查看主机监听的端口

$ ss -tnl

通过 -r 选项解析 IP 和端口号

$ ss -tlr

使用 -p 选项查看监听端口的程序名称

$ sudo ss -tlp

最后一列就是运行的程序名称。还可以通过 grep 继续过滤:

$ sudo ss -tlp | grep ssh

查看建立的 TCP 连接

-a --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接

$ ss -tna

显示更多的信息

-o, --options 显示时间信息
-m, --memory 显示 socket 使用的内存
-i, --info 显示更多 TCP 内部的信息

显示概要信息

$ ss -s

dst/src dport/sport 语法

可以通过 dst/src/dport/sprot 语法来过滤连接的来源和目标,来源端口和目标端口。

匹配远程地址和端口号

$ ss dst 192.168.1.5
$ ss dst 192.168.119.113:http
$ ss dst 192.168.119.113:443

匹配本地地址和端口号

$ ss src 192.168.119.103
$ ss src 192.168.119.103:http
$ ss src 192.168.119.103:80

将本地或者远程端口和一个数比较

可以使用下面的语法做端口号的过滤:

$ ss dport OP PORT
$ ss sport OP PORT

OP 可以代表以下任意一个:

<= le 小于或等于某个端口号
>= ge 大于或等于某个端口号
== eq 等于某个端口号
!= ne 不等于某个端口号
> gt 大于某个端口号
< lt 小于某个端口号

下面是一个简单的 demo(注意,需要对尖括号使用转义符):

$ ss -tunl sport lt 50
$ ss -tunl sport \< 50

通过 TCP 的状态进行过滤

ss 命令还可以通过 TCP 连接的状态进程过滤,支持的 TCP 协议中的状态有:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listening
closing

除了上面的 TCP 状态,还可以使用下面这些状态:

all 列出所有的 TCP 状态。
connected 列出除了 listening 和 closing 之外的所有 TCP 状态。
synchronized 列出除了 syn-sent 之外的所有 TCP 状态。
bucket 列出 maintained 的状态,如:time-wait 和 syn-recv。
big 列出和 bucket 相反的状态。

使用 ipv4 时的过滤语法如下:

$ ss -4 state filter

使用 ipv6 时的过滤语法如下:

$ ss -6 state filter

下面是一个简单的例子:

$ ss -4 state listening

同时过滤 TCP 的状态和端口号

(注意下面命令中的转义符和空格,都是必须的。如果不用转义符,可以使用单引号)

下面的命令显示所有状态为 established 的 ssh 连接:

$ ss -4n state listening

下面的两种写法是等价的,要有使用 \ 转义小括号,要么使用单引号括起来:

$ ss -4n state listening \( dport = :ssh \)
$ ss -4n state listening '( dport = :ssh )' 

只是最后的结果稍微让人有些意外,不仅显示了监听的端口,也显示了通过 22 端口建立的连接。

下面我们显示所有状态为 Established 的 HTTP 连接:

$ ss -4n state listening \( dport = :ssh \)
$ ss -4n state listening '( dport = :ssh )' 

下面的命令列出所有连接到 22 端口的连接和对 22 端口的监听:

$ ss state all dport = :22

下面是一个来自 ss man page 的例子,它列举出处于 FIN-WAIT-1状态的源端口为 80 或者 443,目标网络为 193.233.7/24 所有 TCP 套接字:

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

总结

由于性能出色且功能丰富,ss 命令可以用来替代 netsate 命令成为我们日常查看 socket 相关信息的利器。其实抛弃 netstate 命令已经是大势所趋,有的 Linux 版本默认已经不再内置 netstate 而是内置了 ss 命令。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Linux命令详解之less命令
(0)

相关推荐

  • Linux命令详解之less命令

    less命令 与 more命令 非常类似,但less命令 可以更加随意地浏览文件,而且 less 在查看之前不会加载整个文件. 相比较于more命令,很多人更喜欢使用 less命令. 一.Linux less命令语法 less [参数] 文件 less命令非常强大,在此只介绍几个常用的参数,更多参数使用man less来查看Linux帮助手册. -b <缓冲区大小> 设置缓冲区的大小 -e 当文件显示结束后,自动离开 -f 强迫打开特殊文件,例如外围设备代号.目录和二进制文件 -g 只标志最后

  • linux ss命令详解

    ss 是 Socket Statistics 的缩写.ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似.但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快.当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢.ss 命令利用到了 TCP 协议栈中 tcp_diag.tcp_diag 是一个用于分析统计的模块,可以获得 L

  • 基于使用paramiko执行远程linux主机命令(详解)

    paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件. 关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上做一些封装,便于扩展与编写脚本. 下面直接给出代码: # coding: utf-8 import paramiko import re from time import sleep # 定义一个类,表示一台远端linux主机 class Linux(object): # 通过IP, 用户名,密码,

  • linux mkdir命令详解

    mkdir命令用来创建目录.该命令创建由dirname命名的目录.如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录:如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录.在创建目录时,应保证新建的目录与它所在目录下的文件没有重名. 注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件.最好采用前后一致的命名方式来区分文件和目录.例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面. 在一个子目录

  • linux lsof命令详解及实例

    linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过

  • linux sed命令详解(推荐)

    概述 sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的.在shell中,使用sed来批量修改文本内容是非常方便的. sed命令的选项 sed [选项] [动作] 选项与参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e :直接在命令列模式上进行 sed 的动作编辑:

  • Linux curl命令详解

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. 语法: # curl [option] [url] 常见参数: -A/--user-agent <string> 设置用户代理发送给服务器 -b/--cookie <name=string/file> cookie字符串或文件读取位置 -c/--cookie-jar <file> 操作

  • linux top命令详解与输出结果说明

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析. top命令说明 [www.jb51.net@jb51 ~]$ top top - 16:07:37 up 241 days, 20:11, 1 user, load average: 0.96, 1.13, 1.25 Tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie Cpu(s): 12.7%us, 8.4%sy

  • linux top命令详解

    top 命令主要用于查看进程的相关信息,同时它也会提供系统平均负载,cpu 信息和内存信息.下面的截图展示了 top 命令默认提供的信息: 系统平均负载 top 命令输出中的第一行是系统的平均负载,这和 uptime 命令的输出是一样的: 13:05:49 表示系统当前时间. up 7 days 表示系统最后一次启动后总的运行时间. 1 user 表示当前系统中只有一个登录用户. load average: 0.01, 0.04, 0.00 表示系统的平均负载,最后的三个数字分别表示最后一分钟的

  • linux free命令详解

    本文介绍了linux free命令详解,分享给大家,具体如下: free 命令显示系统内存的使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. 如果加上 -h 选项,输出的结果会友好很多: 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数: $ free -h -s 3 上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c. (Ubuntu 16.04 中默认的 free 版本有 bug,使用 -s 选项时报错,所以这张图是在 Cent

  • Linux cut 命令详解

    cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来. 在本文中,我们通过一些例子来了解 cut 命令的使用,这些使用方法在我们的日常工作中也是非常常用的. Cut 命令和语法 cut 命令的基本语法如下: $ cut OPTION... [FILE]... 我们先来了解一下 cut 的一些选项,cut 命令必须要指定选项才能执行. -f : 提取指定的字段

随机推荐