Linux ip addr 命令:网络工程师必备
在现代Linux网络管理中,ip addr 命令是网络工程师不可或缺的强大工具。作为 iproute2 工具集的核心组成部分,它已经取代了老旧的 ifconfig 命令,成为配置、诊断和故障排除网络接口及IP地址的首选。本文将深入探讨 ip addr 命令的各个方面,助您掌握其精髓。
为何选择 ip addr 而非 ifconfig?
ip addr 相较于 ifconfig 具有显著优势:
- 现代化与全面性:
iproute2套件提供了一致的语法和更广泛的功能,不仅管理接口,还涵盖路由、隧道等。 - IPv6 全面支持:
ip addr对 IPv6 提供全面支持,而ifconfig的 IPv6 支持有限。 - 效率更高:
ip命令通过 Netlink 套接字与内核通信,比ifconfig使用的旧式ioctl系统调用更高效。 - 接口可见性:
ip可以显示所有(包括启用和禁用)的网络接口,而ifconfig通常只显示已启用的接口。
基本语法
ip 命令的基本语法结构为:ip [OPTIONS] OBJECT {COMMAND | help}。对于IP地址管理,OBJECT 通常是 address (或其简写 addr 或 a)。
ip addr show (显示 IP 地址)
这是最常用的命令,用于显示网络接口上配置的IP地址。
-
基本用法:
ip addr show或ip a:显示系统上所有网络接口的IP地址。ip addr show dev <interface_name>:显示特定接口(例如eth0,ens160)的IP地址。ip addr show up:仅显示处于活动状态的网络接口的地址。
-
输出解读:
一个典型的输出示例可能如下:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:66:72:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86399sec preferred_lft 86399sec
inet6 fe80::a00:27ff:fe66:72e1/64 scope link
valid_lft forever preferred_lft forever2: eth0::接口索引和名称。<BROADCAST,MULTICAST,UP,LOWER_UP>:接口标志。UP表示接口已启用,LOWER_UP表示物理链路已连接。mtu 1500:最大传输单元,接口可处理的最大数据包大小(字节)。qdisc pfifo_fast:队列调度规则。state UP:接口的行政状态。link/ether 08:00:27:66:72:e1:第2层(MAC)地址。inet 192.168.1.100/24:IPv4 地址(192.168.1.100)及其 CIDR 表示法 (/24等同于255.255.255.0) 的子网掩码。brd 192.168.1.255:IPv4 广播地址。scope global:表示该地址是全局可达的。其他范围包括link(仅在本地链路有效) 和host(仅在主机内部有效)。dynamic:表示地址是动态分配的(例如,通过 DHCP)。valid_lft和preferred_lft:地址的有效和首选生命周期,尤其与 DHCP 和 IPv6 自动配置相关。inet6 fe80::a00:27ff:fe66:72e1/64 scope link:IPv6 链路本地地址及其范围。
-
实用选项:
ip -br addr show:提供简洁的摘要输出。ip -c addr show:彩色显示输出,提高可读性。
ip addr add (添加 IP 地址)
此命令用于为网络接口分配新的IP地址。
- 语法:
sudo ip addr add <ADDRESS/NETMASK> dev <INTERFACE_NAME> - 示例 (IPv4):
sudo ip addr add 192.168.1.200/24 dev eth0
这将192.168.1.200(子网掩码/24)分配给eth0接口。 - 示例 (IPv6):
sudo ip addr add 2001:db8::1/64 dev eth0 - 多个地址: 您可以为一个接口添加多个IPv4和IPv6地址,这些通常被称为辅助IP地址。
- 广播地址: 可以使用
brd关键字明确定义广播地址:sudo ip addr add 192.168.1.201/24 brd + dev eth0(其中+会自动计算广播地址)。 - 非持久性: 使用
ip addr add所做的更改是临时的,不会在系统重启后保留。
ip addr del (删除 IP 地址)
此命令用于从网络接口删除特定的IP地址。
- 语法:
sudo ip addr del <ADDRESS/NETMASK> dev <INTERFACE_NAME> - 示例:
sudo ip addr del 192.168.1.200/24 dev eth0 - 重要提示: 删除IP地址时,务必指定正确的地址和前缀长度(例如
/24或/32)。如果省略或不正确,可能会导致意外删除,尤其是在同一子网下配置了多个地址时。删除主IP地址也可能同时删除同一子网上的辅助地址。 ip addr del与ip link set down的区别:ip addr del仅从接口中移除IP地址,系统将不再使用该特定地址进行通信。接口本身保持启动状态,并且仍可以分配其他IP地址。ip link set <interface> down会在物理层关闭整个网络接口,使其如同网线被拔掉一样。
ip addr flush (清除 IP 地址)
此命令用于清除与指定网络接口关联的所有IP地址(包括IPv4和IPv6)。
- 语法:
sudo ip addr flush dev <INTERFACE_NAME> - 警告: 这是一个功能强大的命令,它将清除所有地址而无需确认,请谨慎使用。
使更改持久化
正如前文所述,使用 ip addr 所做的更改默认是非持久的。为了使更改在系统重启后依然有效,网络工程师必须:
- 编辑特定发行版的配置文件:
- 对于基于 Debian/Ubuntu 的系统,通常涉及编辑
/etc/network/interfaces。 - 对于基于 Red Hat/CentOS 的系统,配置文件通常位于
/etc/sysconfig/network-scripts/。
- 对于基于 Debian/Ubuntu 的系统,通常涉及编辑
- 将命令添加到启动脚本: 将
ip addr命令集成到在系统启动时运行的脚本中。
总结
ip addr 命令是 Linux 系统中网络工程师的必备工具。其显示、添加、删除和清除IP地址的全面功能,加上对 IPv6 的支持和详细的输出,使其优于旧有的实用程序。掌握 ip addr 对于在 Linux 环境中进行有效的网络管理和故障排除至关重要。