Linux 系统管理没有 netstat ,不惆怅! 拥抱 ss ,事半功倍

Linux 系统管理没有 netstat ,不惆怅! 拥抱 ss ,事半功倍

一 背景

在目前众多较新的 Linux 发行版中,已经移除了 net-tools 套件,ifconfig、route、netstat、arp 等一系列工具均无法使用。缺少这些工具,在对系统进行管理时,会不会变得举步维艰呢?

答案是:不会。官方既然删除了 net-tools 套件,就会有新的替代方案。比如:在 CentOS 7.6 中,官方就使用了 iproute-4.11.0-14.el7.x86_64 替代了 net-tools 相关版本。新的工具 ip 代替了 ifconfig, ss 代替了 netstat。这两个工具都是系统管理中非常重要的工具。接下来将在 CentOS Linux release 7.6.1810 (Core) 对 ss 工具进行实践。

二 认识 ss

ss 是 socket statistics 的缩写。顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示与 netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是 cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用 netstat 等于浪费生命,而用 ss 才是最正确的选择。

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

说到这里,大家是不是非常激动了?是不是都想跃跃欲试了?

按照常规 Linux 学习路线,我们先查看一下系统帮助。

Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message
   -V, --version       output version information
   -n, --numeric       don‘t resolve service names # 不解析服务名称
   -r, --resolve       resolve host names # 不解析主机名
   -a, --all           display all sockets # 显示所有的 sockets
   -l, --listening     display listening sockets # 显示监听的 sockets
   -o, --options       show timer information # 显示定时器信息
   -e, --extended      show detailed socket information # 显示详细的 socket 信息
   -m, --memory        show socket memory usage # 显示内存的使用情况
   -p, --processes     show process using socket # 显示使用套接字的进程
   -i, --info          show internal TCP information # 显示 tcp 内部信息
   -s, --summary       show socket usage summary # 显示套接字(socket)使用概况
   -b, --bpf           show bpf filter socket information
   -E, --events        continually display sockets as they are destroyed
   -Z, --context       display process SELinux security contexts
   -z, --contexts      display process and socket SELinux security contexts
   -N, --net           switch to the specified network namespace name

   -4, --ipv4          display only IP version 4 sockets # 仅显示 IPv4 的套接字
   -6, --ipv6          display only IP version 6 sockets # 仅显示 IPv6 的套接字
   -0, --packet        display PACKET sockets # 显示 PACKET 套接字
   -t, --tcp           display only TCP sockets # 仅显示 TCP 套接字
   -S, --sctp          display only SCTP sockets # 仅显示 SCTP 套接字
   -u, --udp           display only UDP sockets # 仅显示  UDP 套接字
   -d, --dccp          display only DCCP sockets # 仅显示 DCCP 套接字
   -w, --raw           display only RAW sockets # 仅显示  RAW 套接字
   -x, --unix          display only Unix domain sockets # 仅显示 Unix 套接字
       --vsock         display only vsock sockets
   -f, --family=FAMILY display sockets of type FAMILY
       FAMILY := {inet|inet6|link|unix|netlink|vsock|help} # 显示 FAMILY 类型的套接字,FAMILY可选  Unix, inet, inet6, link ,  netlink

   -K, --kill          forcibly close sockets, display what was closed
   -H, --no-header     Suppress header line

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE # 从文件中都去过滤信息
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}

三 操作步骤

3.1 显示系统内的 TCP 连接

命令:ss -at

结果

State       Recv-Q Send-Q                                        Local Address:Port                                                         Peer Address:Port
LISTEN      0      128                                                       *:ssh                                                                     *:*

3.2 显示 socket 摘要

命令:ss -s
结果

Total: 558 (kernel 1020)
TCP:   5 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         1020      -         -
RAW       1         0         1
UDP       2         1         1
TCP       5         3         2
INET      8         4         4
FRAG      0         0         0

3.3 显示监听的 sockets

命令:ss -l
结果

Netid State      Recv-Q Send-Q                                      Local Address:Port                                                       Peer Address:Port
nl    UNCONN     0      0                                                    rtnl:NetworkManager/13282                                                   *
nl    UNCONN     0      0                                                    rtnl:kernel                                                                 *                                                             *

3.4 显示进程使用的 sockets

命令:ss -lp
结果

Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port
nl     UNCONN     0      0      audit:auditd/3760            *
u_dgr  UNCONN     0      0      /var/run/chrony/chronyd.sock 26487                 * 0                     users:(("chronyd",pid=3918,fd=5))
udp    UNCONN     0      0         ::1:323                  :::*                     users:(("chronyd",pid=3918,fd=2))
u_seq  LISTEN     0      128    /run/udev/control 18173                 * 0                     users:(("systemd-udevd",pid=2040,fd=3),("systemd",pid=1,fd=42))

3.5 显示所有 UDP 监听的 socket

命令:ss -au
结果

State       Recv-Q Send-Q                                        Local Address:Port                                                         Peer Address:Port
UNCONN      0      0                                                 127.0.0.1:323                                                                     *:*
UNCONN      0      0                                                       ::1:323                                                                    :::*

3.6 显示 dst IP 为 172.31.2.25 且状态为 established 的 TCP 连接,同时显示 timer

命令:ss -t -o state established dst 172.31.2.25
结果

Recv-Q Send-Q                                             Local Address:Port                                                              Peer Address:Port
0      64                                                  172.31.2.101:ssh                                                                172.31.2.25:61159                 timer:(on,461ms,0)

3.7 显示 src IP 为 172.31.2.101 且状态为 established 的 TCP 连接,同时显示 timer

命令:ss -ato state established src 172.31.2.102
结果

Recv-Q Send-Q Local Address:Port                 Peer Address:Port
0      64     172.31.2.102:ssh                  172.31.2.25:61179                 timer:(on,398ms,0)

state 可以参考以下:

       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}

3.8 匹配远程地址和端口号

命令:ss dst 172.31.2.25:61895
结果

Netid State      Recv-Q Send-Q                                      Local Address:Port                                                       Peer Address:Port
tcp   ESTAB      0      64                                           172.31.2.100:ssh                                                         172.31.2.25:61895

不指定端口号则匹配所有,查看本地的以此类推。

3.9 显示所有 IPv4 监听在 TCP 端口的进程

命令: ss -a4tlp
结果

State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port
LISTEN     0      128        *:ssh                      *:*                     users:(("sshd",pid=4716,fd=3))
LISTEN     0      100    127.0.0.1:smtp                     *:*                     users:(("master",pid=4926,fd=13))

我们很方便的就能从结果中找到相关的有用信息,比如:pid,fd。

四 总结

4.1 ss 是 Linux 中非常有用的工具,在系统管理过程中很有必要掌握。

4.2 拥抱改变,接受现实,用学习来迎接新的挑战,没有了 netstat, 我们使用 ss 工具一样能完成之前的工作。

原文地址:https://blog.51cto.com/3842834/2376809

时间: 2024-10-16 06:13:26

Linux 系统管理没有 netstat ,不惆怅! 拥抱 ss ,事半功倍的相关文章

Linux系统管理常用命令

Linux系统管理常用命令 分类: Linux2011-01-10 18:26 1538人阅读 评论(0) 收藏 举报 linuxcommandservicenginxuserunix 目录(?)[+] 1. 时间date 1)显示当前时间: date .//Wed Jul 29 11:05:11 CST 2009  2)date修改时间:date -s  date 修改时间2007-08-29 14:41 date -s 14:36:30   //时间为14点36分30秒 date 08291

linux netlink套接字实现类似ss命令 ,统计套接字以及TCP信息

参考了 ss的源代码 以及 netlink相关资料:http://blog.csdn.net/scdxmoe/article/details/27711205 实现结果为: gcc netlink_dig_530_7.c -o netlink_dig_530_7 ./netlink_dig_530_7 state      family     l.addr     l.port       r.addr     r.rport LISTEN     AF_INET   localhost  

Linux系统管理与维护的基本命令

Linux系统管理与维护的基本命令 ls clear last pwd who dmesg cd w free passwd uname ps su uptime top 一.列出目录内容:ls ls 是list(列表,列出)的缩写,ls的基本语法: ls   [options]      [FILE]... 不带任何选项参数的ls命令,用于列出当前目录下所有的文件和子目录. ls 目录 :查看指定的目录 重要选项: -l :以列表形式显示目录内容详细信息 ls -l 第1列  第2列 第3列

Linux系统管理和维护常用命令

Linux系统管理和维护常用命令 Linux系统管理和维护常用命令 ls 命令 功能说明ls 命令显示指定工作目录下的内容,列出工作目录所包含的文件及子目录.语法结构: ls [选项] [路径或文件] ls 选项及说明 -a  显示指定目录下的所有文件以及子目录,包含隐藏文件-d  只显示目录列表,不显示文件-l  除文件名称外,同时将文件或者子目录的权限,使用者和文件大小等详细信息列出-s  在每个文件名后输出该文件的大小-k  以k字节的形式表示文件的大小-u  以文件上次被访问的时间排序-

Linux系统管理11——系统安全及应用

Linux系统管理11--系统安全及应用 一.基本安全措施 1.系统账号清理 (1)将非登录用户的shell设为/sbin/nologin ·方法一: usermod -s ·方法二: chsh命令,交互式修改 ·方法三: chsh -s 示例: 除了上述三种方法,也可以直接vi编辑/etc/passwd文件进行修改. (2)锁定长期不使用的账号 ·方法一: passwd -l  (将在密文前增加2个"!")解锁 passwd -u 查看passwd -S ·方法二: usermod

linux系统管理总结(用户,权限,文件。。。。完善的总结)

linux系统管理 终端字体变大? ?ctrl + shift +? 变大 ctrl + - 变小ls 显示当前路径有什么文件pwd 显示当前路径/:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录.所有的东西都是从这里开始.当你在终端里输入"/home",你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录./bin./usr/bin: 可执行二进制文件的目录,如常用的命令ls.tar.mv.cat等./boot:放置linux系统启动时用到的一些文件,如L

Linux命令大全之一——Linux系统管理命令,非常全!

Linux命令是对Linux系统进行管理的命令. 对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,下面是关于49个Linux系统管理命令的详细讲解! adduser 功能说明:新增用户帐号.语 法:adduser补充说明:在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐号资料,然后再交由真正建立帐号的useradd指令建立新用户,如此可方便管理员建立用户帐号.在R

[转帖]网络分析工具--【ping、tcpdump、netstat、lsof、ss】

网络分析工具--[ping.tcpdump.netstat.lsof.ss]原创小呀小二笙 发布于2019-01-01 15:32:19 阅读数 1314 收藏 https://blog.csdn.net/qq_38790716/article/details/85486681 看原文比较好 复制的话 图片没有过来. 展开 文章目录1. ping1.1 概述1.2 ping的使用1.3 ping常用参数2. tcpdump2.1 概述2.2 tcpdump使用3. netstat3.1 概述3.

Linux系统管理(二)(网络服务)

点击下载:Linux系统管理(二)(网络服务)