ss
命令是一个用于检查 socket 统计信息的工具,它是 netstat
命令的现代替代品,提供更多的信息且更快。ss
命令来自于 iproute2
包,现在在大多数 Linux 发行版中可用。
下面是ss -tunap
各个选项的解释:
-t
(TCP): 显示 TCP sockets。-u
(UDP): 显示 UDP sockets。-n
:不解析服务名称(即不将端口号转换为服务名,如 80 端口转换为 http),直接显示端口号。-a
:显示所有 sockets(默认情况下,仅显示处于监听状态的 sockets)。-p
:显示 socket 对应的进程信息(需要 root 权限)。
组合这些选项,ss -tunap
命令会列出系统上所有 TCP 和 UDP sockets 的详细信息,包括它们的状态、端口号以及相关的进程ID和进程名称。这对于诊断网络问题或仅仅查看哪些服务在监听特定的端口非常有用。使用这个命令可能需要管理员权限(或 sudo),特别是为了能查看各个 socket 对应的进程信息。
举例:
查看所有python程序使用的网络信息:
bash
ss -tunap | grep -E "$(ps -aux | grep python | grep -v 'grep' | awk '{print $2}' | paste -sd '|' -)"
分析:
获取所有python程序的pid:
bash
ps -aux | grep python | grep -v 'grep' | awk '{print $2}'
paste -sd '|' -
:paste
命令用于合并输入的行,-s
选项使得所有行被合并为单一行,-d '|'
指定分隔符为|
,-
表示从标准输入读取。相比于tr '\n' '|'
,这不会在输出的最后添加额外的|
。
bash
| paste -sd '|' -