任务中心的 iproute2 用户指南
# iproute2 概述 iproute2 是替代旧工具(如 ifconfig、vconfig、brctl、route、arp 等)的 Linux 网络工具包。这些工具仅为了与旧脚本的兼容性而保留,并未提供许多新的 Linux 内核网络功能。它最初由 Alex Kuznetsov 编写,现在由 Stephen Hemminger 维护。大多数网络功能统一在 ip 命令中。还有 tc 用于管理流量策略(QoS),bridge 用于管理软件桥接接口,以及 ss(netstat 的替代品)。这些命令通常打包在一个名为 iproute2 或 iproute 的包中。如今,大多数 Linux 发行版默认安装它。ip 命令有时安装在 /sbin 中,因此可能不会在普通用户的 $PATH 中。 # 关于本文档 在历史上,文档一直是 iproute2 的薄弱环节。官方手册页列出了可用选项,但几乎没有使用示例。这个需求已经通过第三方文档得到满足。本文档旨在提供有关 ip 和 bridge 命令的全面且易于使用的指南,以及一些关于 ss 的信息。以这种风格记录 tc 将是一个单独的大项目。本文档是以任务为中心的:它告诉您如何使用 iproute2 命令完成不同的任务,而不是列出可用的子命令。 # 贡献 本文档由 Daniil Baturin 维护,并以 CC-BY-SA 4.0 许可传播——这是一种强大的自由版权、自由文化许可证。我们欢迎任何贡献;您可以在 github.com/dmbaturin/iproute2-cheatsheet 找到源文件。 git clone https://github.com/dmbaturin/iproute2-cheatsheet.git 您还可以通过买一杯隐喻的咖啡来表达对维护者的支持。本文档以“按原样”提供,不附带任何保证。作者不对使用该文档所造成的任何损害负责。像往常一样,在输入之前先思考一下,按下 Enter 键之前再三思考。 # 排版约定 元语法变量采用 shell 样式的语法书写,${something}。可选的命令部分用方括号括起来。强制参数用尖括号括起来。 # 一般说明 所有更改设置的命令都需要 root 权限。仅显示信息的命令通常不需要特殊权限。 /etc/iproute2 中有配置文件,主要用于为网络堆栈实体(如路由表)分配符号名称。每次运行 ip 命令时都会重新读取这些文件,因此您不需要执行任何操作来应用更改。 # 命令缩写 任何 ip 命令都可以缩写。例如,ip address add 192.0.2.1/24 dev eth0 可以写成 ip addr a 192.0.2.1/24 dev eth0,甚至 ip a a 192.0.2.1/24 dev eth0。在某些情况下,您甚至可以省略单词。例如,show 和 list 这两个词总是可以省略:ip address 等价于 ip address show 和 ip address list。请注意,缩写系统并不总是一致的。ip a a 192.0.2.1/24 dev eth0 中的 dev 关键字无法缩写,尽管其他所有单词都可以。本文档故意以最完整的形式给出所有命令,以提高可读性。在脚本中使用全名也是个好主意,因为读者可能不熟悉缩写,而代码被阅读的频率远高于其编写的频率。 # 脚本考虑 关于发行版移除 ifconfig 的一个常见抱怨是,它迫使人们重写脚本。然而,iproute2 更加适合脚本,因为它支持机器可读输出。它提供以下输出选项: -o ( --oneline ) 用反斜杠替换每个换行符。自最早版本起就已支持。 -br ( --brief ) 生成简洁的、面向机器的输出。非常适合与 awk/cut 进行解析。支持至少 4.11 版本。 -j ( --json ) 生成 JSON 输出,非常适合非 shell 脚本。支持 --pretty 和 --brief 选项。支持至少 4.13 版本。 以下是输出的比较(为节省空间,省略了 --json --pretty 和 --json --brief): $ ip --oneline address show lo 1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever 1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever $ ip --brief address show lo lo UNKNOWN 127.0.0.1/8 ::1/128 $ ip --json --brief address show lo [{"ifname": "lo", "operstate": "UNKNOWN", "addr_info": [{"local": "127.0.0.1", "prefixlen": 8},{"local": "::1", "prefixlen": 128}]}, {}, {}] # IPv4 和 IPv6 地址 iproute2 接受点分十进制掩码和前缀长度值。也就是说,192.0.2.10/24 和 192.0.2.10/255.255.255.0 都是可接受的格式。 # 显示所有地址 ip address show 所有显示命令都可以与 -4 或 -6 选项一同使用,仅显示 IPv4 或 IPv6 地址。 # 显示单个接口的地址 ip address show ${interface name} 示例:ip address show eth0 # 仅显示运行接口的地址 ip address show up # 仅显示静态或动态 IPv6 地址
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡