跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在Linux中查看所有的网络连接 Linux使用netstat和ss命令的方法

ss是当前Linux查看网络连接的首选工具,因它直接读取内核tcp_diag模块,毫秒级响应、支持双栈、字段对齐严格且适合脚本解析;而netstat需解析/proc/net/tcp等文本文件,万级连接时易卡顿超时、漏IPv6、输出不规整。
ss
是当前 Linux 查看所有网络连接的首选工具,
netstat
已被标记为废弃,新系统(如 Ubuntu 22.04+、RHEL 8+)默认不带
netstat
,且高并发下它会卡顿甚至超时——这不是“能不能用”的问题,而是“该不该用”的问题。 为什么 ss -tuln 比 netstat -tuln 更可靠
ss -tuln
直接读取内核
tcp_diag
模块,而
netstat -tuln
要逐行解析
/proc/net/tcp
等多个文件。这意味着: 万级连接时,
ss -tuln
响应在毫秒级;
netstat -tuln
可能卡住数秒甚至因超时返回不全结果
ss
默认输出列紧凑、字段对齐严格,适合脚本解析;
netstat
多一列
Proto
,且空格不固定,
awk '{print $7}'
这类操作容易错位
ss -tuln
自动兼容 IPv4/IPv6 双栈;
netstat -tuln
在某些内核版本中会漏掉 IPv6 的
LISTEN
条目 查所有已建立的 TCP 连接,别用 grep ESTABLISHED 直接运行
ss -tn | grep ESTABLISHED
是常见错误:它依赖文本匹配,会漏掉 IPv6 连接(含方括号地址),也匹配不到状态字段不在默认输出列末尾的情况。 正确做法是显式使用
state
关键字:
ss -tn state established
要包含 IPv6,加
-6
;只看 IPv4,加
-4
;想一次覆盖全部,用
ss -t -a | awk '$1 ~ /^(tcp|tcp6)$/ && $NF ~ /^ESTABLISHED$/{i++} END{print i+0}'
注意大小写:
established
小写才有效,
ESTABLISHED
不匹配 ss -tulnp 报 Permission denied 怎么办 这不是权限不足,而是
ss -p
需要读取
/proc/[pid]/fd/
下的 socket 描述符,普通用户无权访问其他用户的
/proc
子目录。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 最简解法:加
sudo
,即
sudo ss -tulnp
某些发行版(如 Ubuntu 22.04+)默认禁用
ss
的
-p
能力,此时可改用
sudo ss -tuln
先定位端口,再用
sudo lsof -i :端口号
补查进程(
lsof
输出含完整路径和用户) 容器内执行时,
ss -tulnp
永远只能看到本容器进程,别指望它显示宿主机上
kube-proxy
或
nginx
的监听 ss -s 统计里真正该盯住的三个数字
ss -s
一行输出里藏着服务健康度的关键信号,别只扫
total
:
TCP: total 12456
—— 总 TCP socket 数,接近 65535 说明端口快耗尽,需检查是否未复用或连接泄漏
estab 892
—— 真实活跃连接数,若远低于
total
,说明大量连接卡在
TIME-WAIT
或
CLOSE-WAIT
,得查应用是否没正确
close()
memory: 0.50MB
—— socket 内存占用,持续 >10MB 很可能有连接未释放,导致内存缓慢上涨 这些数字比“有没有 ESTABLISHED”更能反映系统是否在 quietly rotting。

相关文章