tldr 仓库中的 `ip route list` 使用指南:Linux 路由表查询命令速查与原理解析

原创2026-10-01 12:01:201,439 阅读
文章标签:文档教程知识库

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 的别名页

典型的排查流程为:

  1. 用 ip route get <目标IP>(见 ip-route-get.md,如 ip route get 1.1.1.1)确认内核为某目标选中的实际路径;
  2. 用 ip route list table all 查看该路径对应路由位于哪张表;
  3. 若路由缺失,用 sudo ip route add ...(见 ip-route-add.md)按需添加;
  4. 若涉及多表选择,用 ip rule(见 ip-rule.md)检查策略路由规则;
  5. 最后用 ip route list(本文主题)核对结果是否按预期生效。

其中 ip route 的页面头部还提示「参见 routel、ip rule」,说明该项目将 ip rule 视为路由查询的重要关联命令——因为策略路由决定流量去查询哪张表,而 ip route list table <id> 正是验证每张表内容的唯一途径。

六、如何用 tldr 获取与查阅本命令速查页

本仓库即 tldr 主仓库,安装任一官方客户端后即可获取 ip route list 速查页。常用方式:

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 条命令都是第一手排查工具。

登录后查看全文
tldr