route 命令在现代 Linux 中仍可用但非首选,因依赖已淘汰的 net-tools 包、输出隐晦且不支持 IPv6 统一查看;推荐使用 ip route 替代。

route 命令在现代 Linux 中仍能用,但不是首选——它依赖已逐步淘汰的 net-tools 包,输出字段含义隐晦,且不支持 IPv6 路由表统一查看。如果你只是想快速确认默认网关或排查连通性问题,route -n 可行;但若需稳定、可脚本化、兼容新系统的方案,应直接用 ip route。
为什么 route -n 有时会报 command not found
多数较新的发行版(如 Ubuntu 22.04+、Fedora 33+、AlmaLinux 9)默认不预装 net-tools。这不是 bug,而是上游主动弃用:route 属于 legacy 工具集,已被 iproute2 取代。
- Debian/Ubuntu 系统:运行
sudo apt install net-tools - RHEL/CentOS/AlmaLinux:运行
sudo dnf install net-tools(RHEL 8+)或sudo yum install net-tools(RHEL 7) - 容器环境(如 Alpine):几乎肯定未安装,
apk add net-tools才能用
注意:route 不带 -n 时会尝试反向 DNS 查询,可能卡顿数秒——这是常见误判“命令卡死”的原因。
route -n 输出中哪一行是默认网关
关键看 Destination 列为 0.0.0.0 的那行,其 Gateway 列的值就是默认下一跳地址。
- 示例输出中这一行:
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 -
UG标志表示 “Up” + “Gateway”,是默认路由的可靠标识 - 若
Gateway显示*或0.0.0.0,说明该条目是直连网段(非网关),不是你要找的默认路由
别依赖 grep default ——有些系统(尤其某些嵌入式或精简镜像)的 route 输出里根本不写 default 字样,只显示 0.0.0.0。
route 和 ip route 查默认网关的等价写法
二者目标一致,但语法和可靠性差异明显:
-
route -n | awk '$1 == \"0.0.0.0\" {print $2}'—— 提取 Gateway 列,但需注意字段对齐(空格分隔不稳定) -
ip route | grep 'default via' | awk '{print $3}'—— 更健壮,via后固定是 IP,且ip route输出无字段错位风险 -
ip -4 route show default—— 最精准,仅输出 IPv4 默认路由,不含冗余信息
route 无法区分 IPv4/IPv6,默认只查 IPv4;而 ip -6 route 可单独查 IPv6 默认路由,这对双栈环境很关键。
临时加路由时用 route add 还是 ip route add
都行,但行为细节不同,容易踩坑:
-
route add -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.5.1—— 必须显式写netmask,漏掉会当成主机路由 -
ip route add 10.20.0.0/16 via 192.168.5.1—— CIDR 表达更简洁,/16自带掩码语义,不易出错 -
route add default gw 192.168.5.1若已有默认路由,会静默失败(不覆盖);ip route replace default via 192.168.5.1明确支持替换
更重要的是:route 添加的路由在 NetworkManager 或 systemd-networkd 管理的接口上可能被立即覆盖——这些服务监听内核事件,发现“非托管路由”会主动清理。而 ip route 操作同样受此影响,但至少语法一致、调试路径清晰。
route -n 显示了正确的默认网关,如果该网关 IP 不在本地直连子网内、或对应网卡 down 了、或防火墙 DROP 了 ICMP/转发,依然不通。查路由只是第一步,别停在这儿。



















