在 CentOS 服务器上进行网络诊断和监控时,很多管理员习惯使用经典的 `netstat` 命令。然而,如果你最近在新版 CentOS 7 或 8 系统上尝试安装或使用它,可能会发现这个工具已经不再默认安装,或者被告知它属于已弃用的 `net-tools` 软件包。这并非偶然,而是 Linux 网络工具栈向更现代化方向发展的结果。面对这种情况,了解 `netstat` 的功能替代方案变得非常必要,这不仅能帮助你完成当前的网络排查工作,也能让你跟上技术发展的步伐。
首先,理解为什么 `netstat` 会逐渐被弃用是关键。`net-tools` 软件包(包含 `netstat`、`ifconfig`、`route` 等命令)的代码维护停滞已久,它依赖于一个较旧的、与内核交互的 `/proc/net/` 文件系统接口。随着 Linux 内核网络栈的飞速发展,这个老接口在提供某些新型网络协议的详细信息时显得力不从心,效率也较低。因此,社区推出了 `iproute2` 套件作为长远替代方案,其通过更高效的 `netlink` 接口直接与内核通信,功能更强大,信息也更精确。在 CentOS 7 和 Rocky Linux 8/AlmaLinux 8 等现代发行版中,虽然你仍可通过 `yum install net-tools` 强行安装 `netstat`,但官方文档和最佳实践都推荐使用新的工具。
最核心、最直接的替代者是 `ss` 命令,它几乎可以覆盖 `netstat` 所有关于套接字(socket)查看的功能,且速度更快、信息更详细。`ss` 是 “socket statistics” 的缩写,同样包含在 `iproute2` 包中,这个包是系统默认安装的。如果你发现 `ss` 不可用,可以通过以下命令确保安装:
yum install iproute
接下来我们看看如何用 `ss` 实现 `netstat` 的常见用法。查看所有已建立的 TCP 连接,以前用 `netstat -tn`,现在用:
ss -t
`-t` 表示 TCP 协议,`-n` 表示以数字形式显示地址和端口(避免耗时的主机名解析)。想查看所有监听中的端口(对应 `netstat -tlnp`)吗?可以这样做:
ss -tlnp
这里 `-l` 表示只显示监听(LISTEN)状态的套接字,`-p` 会显示出占用该端口的进程名称和 PID,这对于排查端口冲突问题极有帮助。对于 UDP 套接字,只需将 `-t` 替换为 `-u`,即 `ss -ulnp`。一个强大的功能是,你可以使用状态过滤器来精确查找连接。例如,想查看所有处于 `ESTAB`(已建立)状态的连接,可以运行:
ss -t state established
或者查看所有除了监听状态以外的连接(即所有活跃的数据传输连接):
ss -t state connected
`ss` 支持的状态关键词包括 `established`、`syn-sent`、`close-wait` 等,这使得诊断特定网络问题(如大量 `TIME-WAIT` 状态)非常方便。
除了查看套接字连接,`netstat` 另一个常用功能是查看路由表,对应命令是 `netstat -rn`。这个功能的现代替代品是 `ip route` 命令。查看完整路由表只需执行:
ip route show
或简写为 `ip r`。其输出格式清晰,包含了目标网络、网关、网卡等核心信息。而曾经用来查看网络接口统计信息(如收发包数量、错误计数)的 `netstat -i`,现在则被 `ip -s link` 命令完美取代。执行这个命令,你可以看到每个网络接口详尽的数据统计。
当然,`netstat` 的某些功能需要其他工具组合来完全覆盖。例如,`netstat -an` 结合 `grep` 来检查某个端口是否被占用,这用 `ss` 可以更高效地完成。但如果你想获得一个更接近旧版 `netstat -pantu` 风格的、全面的、易于人类阅读的所有连接概览,可以考虑使用较新版本的 `lsof` 命令。`lsof` 本身是一个列出系统打开文件的强大工具,通过 `-i` 选项可以筛选网络文件。安装和基本使用如下:
yum install lsof
lsof -i
它可以非常清晰地展示哪个进程(PID)在通过哪个协议(TCP/UDP)使用哪个端口,并且能解析出服务名称。另一个场景是,如果你需要进行快速的端口扫描来确认服务器开放了哪些端口,`nmap` 工具会是比 `netstat` 更专业的选择。首先安装它:
yum install nmap
然后对自身进行扫描:
nmap -sT -O localhost
这条命令会尝试 TCP 连接扫描并探测操作系统,对于安全检查和合规审计很有用。
在 CentOS 服务器的日常运维中,如何选择和组合这些工具呢?对于快速的连接状态查看和问题诊断,`ss` 应该是你的首选。它的查询速度极快,语法简洁。当你需要配置或查看网络接口、路由、策略路由等更广泛的网络参数时,整个 `ip` 命令家族(如 `ip addr`、`ip link`、`ip route`)是你的新工具箱。而当你需要深度追踪某个端口或网络地址究竟被哪个具体进程文件使用,特别是涉及非常规进程时,`lsof -i` 能提供无与伦比的细节。
从 `netstat` 迁移到新工具,最初可能有点不习惯,但这是提升技能的好机会。你可以尝试在脚本中将旧的 `netstat` 命令逐一替换。例如,一个用于查看所有 IPv4 TCP 监听端口和对应进程的监控脚本,可以从 `netstat -tlnp` 改为使用 `ss -tlnp`,不仅获得相同的信息,执行效率还会更高。
CN
EN