Skip to content

ss 命令:套接字统计

1. 命令简介

ss(Socket Statistics)是一个用于查看网络连接状态的工具,它是 netstat 命令的替代品。ss 命令可以显示比 netstat 更多的信息,而且速度更快。它可以显示 TCP、UDP、DCCP、RAW、Unix 域套接字等状态信息。

2. 基本语法

bash
ss [选项] [过滤器]

3. 常用选项

  • -n:不解析服务名称
  • -a:显示所有套接字(包括监听和非监听)
  • -t:显示 TCP 套接字
  • -u:显示 UDP 套接字
  • -l:显示监听状态的套接字
  • -p:显示使用套接字的进程
  • -s:显示套接字使用概况
  • -i:显示内部 TCP 信息
  • -4:只显示 IPv4 套接字
  • -6:只显示 IPv6 套接字

4. 基础使用示例

  1. 显示所有 TCP 连接:

    bash
    ss -t -a
  2. 显示所有监听的 TCP 端口:

    bash
    ss -tl
  3. 显示所有 UDP 连接:

    bash
    ss -u -a
  4. 显示所有已建立的 TCP 连接:

    bash
    ss -t state established

5. 进阶使用技巧

  1. 显示进程使用的套接字:

    bash
    ss -p
  2. 显示内部 TCP 信息:

    bash
    ss -ti
  3. 显示 TCP 连接的定时器信息:

    bash
    ss -to
  4. 使用过滤器:

    bash
    ss -t '( dport = :http or sport = :http )'

6. 实用示例

  1. 查找占用特定端口的进程:

    bash
    ss -tlnp | grep :80
  2. 显示连接到特定 IP 的连接:

    bash
    ss dst 192.168.1.100
  3. 显示所有 HTTP 连接:

    bash
    ss -o state established '( dport = :http or sport = :http )'
  4. 统计连接数量:

    bash
    ss -s

7. 注意事项

  • 某些选项(如 -p)需要 root 权限才能执行。
  • ss 命令的输出可能会很长,考虑使用管道和 grep 来过滤结果。
  • 在使用过滤器时,注意语法的正确性。

8. 相关命令

  • netstat:旧版网络连接统计工具
  • lsof:列出打开的文件,可用于查看网络连接
  • iptables:Linux 防火墙工具
  • tcpdump:网络数据包分析工具

9. 技巧与建议

  1. 使用 watch 命令实时监控网络连接:

    bash
    watch -n 1 'ss -t -a'
  2. 结合 awkcut 提取特定信息:

    bash
    ss -tuln | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
  3. 使用 ss 检查系统的网络性能:

    bash
    ss -s
  4. 在脚本中使用 ss 进行网络诊断:

    bash
    if ss -tln | grep -q :80; then
        echo "Web server is running"
    else
        echo "Web server is not running"
    fi

ss 命令是一个强大的网络诊断工具,它提供了比 netstat 更快、更详细的网络连接信息。对于系统管理员和网络工程师来说,掌握 ss 命令可以帮助他们更有效地监控和诊断网络问题。虽然 ss 的某些高级用法可能需要一些时间来熟悉,但其提供的详细信息和性能优势使它成为现代 Linux 系统中不可或缺的网络工具。