tldr 仓库中的 `ip route list` 使用指南:Linux 路由表查询命令速查与原理解析
tldr 仓库中的 ip route list 使用指南:Linux 路由表查询命令速查与原理解析
本文以 tldr 开源协作式命令速查表仓库中的
pages.ar/linux/ip-route-list.md文档为主体,系统讲解 Linux 下查看 IP 路由表的核心命令ip route list的完整用法,涵盖 main/local/all 三类路由表、按接口与 scope 过滤、路由缓存查询以及 IPv4/IPv6 切换等场景。读完本文,你将掌握路由表查询的全部常用参数组合,并能将该速查页与仓库中ip route系列页面联动使用,快速完成网络故障排查与路由策略验证。
一、命令定位:tldr 速查页中的 ip route list
ip route list 是 ip 命令家族中用于显示 IP 路由表的子命令,其核心职责是从 Linux 内核的路由数据库中读出当前生效的转发规则,供网络管理员观察与排障。在 tldr 仓库中,该命令被独立整理为一个速查页面,英文原版位于 pages/linux/ip-route-list.md,而本文所述的关联文档则是其阿拉伯语翻译版 pages.ar/linux/ip-route-list.md,二者结构完全一一对应,均包含 8 个覆盖最常见使用场景的命令示例。
tldr 项目本身是一个「协作式命令行速查表集合」(项目描述原文:Collaborative cheatsheets for console commands),其核心设计理念是用简短、带示例、可复制的条目替代冗长的 man 手册。因此该速查页的每条示例都采用「一句话说明 + 一条命令」的紧凑结构,配合 {{占位符}} 语法标记需要用户替换的变量。
值得注意的是,ip route list 与 ip route show 是同一个命令的两种写法。仓库中的 pages/linux/ip-route-show.md 明确说明:ip route show 是 ip route list 的别名("This command is an alias of ip route list"),并建议通过 tldr ip route list 查看原命令文档。因此本文所有用法对 show 同样适用。
二、路由表基础:main、local、all 与数字 ID
Linux 内核支持**多路由表(routing table)**机制,不同表存放不同类型的路由规则。速查页的前四个示例全部围绕路由表的选择展开,理解这三张表是掌握命令的前提:
| 路由表 | 数字 ID | 用途 |
|---|---|---|
main |
254 |
主路由表,存放普通静态路由与动态路由协议学到的路由,默认查询对象 |
local |
255 |
本地路由表,存放本机地址对应的直连路由(如回环地址、本地接口地址),由内核自动维护 |
all / unspec |
0 |
未指定表(unspec),用于遍历所有路由表 |
文档中的
{{main|254}}、{{local|255}}、{{all|unspec|0}}写法表示「名称或数字 ID 可以互换」,这是因为 Linux 内核通过数字 ID 标识路由表,而/etc/iproute2/rt_tables配置文件为常用 ID 提供了名称映射。
除这三张表外,系统还可以存在编号为 1~252 的自定义路由表(通常配合策略路由使用),ip route list table <数字> 即可查看任意编号的表。速查页中 ip-route.md 的最后一例正是这一用法:ip route list table {{table_number}}。
三、核心用法详解:8 个实战场景
以下逐一解析速查页中的 8 条命令,并结合 iproute2 的实际行为说明其适用场景。
3.1 显示 main 主路由表(最常用)
ip route list
这是命令的默认行为:不带任何参数时,直接列出 main 路由表(ID 254)中的全部路由条目。输出形如:
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
速查页中对应写法为 ip {{[r|route]}} {{[l|list]}},其中 {{[r|route]}} 表示 r 是 route 的合法缩写、{{[l|list]}} 表示 l 是 list 的合法缩写,两条命令完全等价。
3.2 显式指定 main 表(与默认行为相同)
ip route list table main
ip route list table 254
第一条命令显式声明「我要看 main 表」,结果与 ip route list 完全相同;table 254 则用数字 ID 达到同样效果。此写法适合在脚本中或与他人交流时明确语境,避免依赖隐式默认值。
3.3 查看 local 本地路由表
ip route list table local
ip route list table 255
local 表由内核维护,记录了本机各接口地址、回环地址等「本地可直达」的路径。排查本机地址连通性问题、确认地址是否已绑定到接口时,这是最直接的验证手段。其条目通常表现为 local <ip> dev lo 或 broadcast <ip> dev <iface> 形式。
3.4 遍历所有路由表
ip route list table all
ip route list table unspec
ip route list table 0
table 0(即 unspec,未指定表)会让命令遍历并输出全部路由表的内容。当系统启用了策略路由(如多 WAN、VPN 分流)时,各自定义表中的路由只有用这种方式才能一次看完。
3.5 按接口过滤:只看某个设备的路由
ip route list dev eth0
dev <设备名> 将输出限定为经由指定网络接口的路由。多网卡服务器上,可用 ip route list dev eth0 与 ip route list dev eth1 分别核对各接口的路由,快速定位「流量走了错误网卡」类问题。示例中的 ethX 是占位符,需替换为实际接口名(如 eth0、ens33、wlan0)。
3.6 按 scope 过滤:只看直连链路路由
ip route list scope link
scope 描述路由的适用范围,常见取值包括:
link:目标网络与本地接口直接相连(无需网关),即直连路由;host:仅本机可达(如回环路由);global:全局可达,可被转发到其他接口(默认值)。
scope link 过滤出的正是所有「同网段直连」路由,例如 192.168.1.0/24 dev eth0 scope link。判断一条路由是直连还是经网关转发、排查「为何到某网段不通」时非常有用。
3.7 显示路由缓存
ip route list cache
cache 参数要求内核输出路由缓存中的条目。路由缓存保存近期实际转发查询的结果,是内核 FIB(转发信息库)的加速副本。查看缓存有助于理解某条流量实际命中哪条路由,常用于诊断热点路由的命中情况。
注意:现代 Linux 内核(基于 FIB trie 查找)多数情况下路由查找无需传统路由缓存,
cache参数的行为可能因内核版本而异;它保留在速查页中用于兼容旧式路由缓存查询。
3.8 协议族切换:只看 IPv4 或 IPv6
ip -4 route list
ip -6 route list
-4 / -6 是 ip 命令的全局协议族选项:-4 仅查询 IPv4 路由,-6 仅查询 IPv6 路由。对于双栈主机,IPv4 与 IPv6 各自维护独立的路由条目,速查页中的写法 ip {{-6|-4}} {{[r|route]}} 表示两者任选其一。-6 常与 dev、table 组合,用于单独排查 IPv6 默认路由(default via fe80::...)是否存在。
四、速查页的占位符与缩写语法
tldr 速查页有一套统一的语法规范,理解它才能真正「读透」速查页并正确使用:
{{变量}}:花括号包裹的是需要用户替换的内容。例如{{ethX}}表示接口名占位符、{{gateway_ip}}表示网关地址占位符;{{[r|route]}}:方括号内的竖线表示「缩写 | 完整拼写」。{{[r|route]}}意为r与route等价、{{[l|list]}}意为l与list等价、{{[t|table]}}意为t与table等价、{{[s|scope]}}意为s与scope等价、{{[c|cache]}}意为c与cache等价;{{main|254}}类写法:表示两个值含义相同,可任选其一;{{-6|-4}}类写法:表示在括号内选项中二选一。
因此速查页中最短的示例 ip {{[r|route]}} {{[l|list]}} 可以缩写成 ip r l,也可以完整写作 ip route list,二者在功能上完全一致。这也解释了为何速查页描述与命令「一模一样」——它展示的是该命令最精简、最常见的写法。
另外,关于阿拉伯语页面有一个翻译规范:根据仓库中的 contributing-guides/translation-templates/common-arguments.md,阿拉伯语(ar)与波斯语(fa)页面的占位符不应翻译,以免阅读时出现文本翻转错乱。这正是本文关联文档中 {{ethX}}、{{table}} 等占位符保留英文的原因。
五、与 ip route 系列命令的联动:查、加、删、验一体
ip route list 是「查看」端,在实际运维中通常与 ip route 家族的其他子命令配合使用。仓库中保存了完整的 ip route 系列速查页:
| 子命令 | 文档 | 职责 |
|---|---|---|
ip route(不带子命令) |
pages/linux/ip-route.md | 路由表管理总入口,默认行为即显示 main 表 |
ip route add |
pages/linux/ip-route-add.md | 新增默认路由、静态路由、按表添加路由 |
ip route get |
pages/linux/ip-route-get.md | 查询内核到达某目标实际选中的路由 |
ip rule |
pages/linux/ip-rule.md | 策略路由规则库管理(决定查哪张表) |
ip route show |
pages/linux/ip-route-show.md | ip route list 的别名页 |
典型的排查流程为:
- 用
ip route get <目标IP>(见 ip-route-get.md,如ip route get 1.1.1.1)确认内核为某目标选中的实际路径; - 用
ip route list table all查看该路径对应路由位于哪张表; - 若路由缺失,用
sudo ip route add ...(见 ip-route-add.md)按需添加; - 若涉及多表选择,用
ip rule(见 ip-rule.md)检查策略路由规则; - 最后用
ip route list(本文主题)核对结果是否按预期生效。
其中 ip route 的页面头部还提示「参见 routel、ip rule」,说明该项目将 ip rule 视为路由查询的重要关联命令——因为策略路由决定流量去查询哪张表,而 ip route list table <id> 正是验证每张表内容的唯一途径。
六、如何用 tldr 获取与查阅本命令速查页
本仓库即 tldr 主仓库,安装任一官方客户端后即可获取 ip route list 速查页。常用方式:
- 命令行查询:
tldr ip route list(在支持子命令页的客户端中会直接展示本文档内容); - 查看英文原版:pages/linux/ip-route-list.md;
- 查看本文档阿拉伯语版:pages.ar/linux/ip-route-list.md;
- 查询主命令页:pages/linux/ip.md(总览
ip的接口、邻居、路由等全部子命令)。
tldr 的速查页遵循 style-guide.md 统一格式,每条示例均为「描述 + 可复制命令」,适合在终端里作为「字典」速查。若需了解命令的更底层细节,可结合 man ip-route 与内核 route/fib 相关文档交叉阅读——但日常 90% 的路由查看需求,本文速查页的 8 条命令已经足够。
七、小结:一个速查页覆盖路由查询全场景
ip route list 速查页虽短,却用 8 条命令覆盖了路由查询的全部核心维度:表选择(main/local/all 与数字 ID)、接口过滤(dev)、作用域过滤(scope link)、缓存查看(cache)与协议族切换(-4/-6)。配合仓库中 ip route 系列其他页面(add、get、rule、show),即可完成「查看—诊断—添加—验证」的完整路由管理闭环。无论是排查默认网关丢失、验证静态路由生效,还是检查策略路由多表配置,这 8 条命令都是第一手排查工具。