在 Linux 系统中,网络配置是日常管理和运维的核心任务之一。无论是服务器部署、网络故障排查,还是开发环境搭建,都离不开对网络接口和 IP 地址的操作。
ip addr(全称 ip address,可简写为 ip add)是 Linux 下用于管理网络接口 IP 地址的强大命令。它属于 iproute2 工具集,取代了传统的 ifconfig,提供了更丰富的功能和对现代网络技术(IPv6、VLAN、隧道等)的支持。
本文从基础语法讲到高级操作,结合实际案例和最佳实践,帮你全面掌握这一工具。
一、ip 命令是什么
ip 命令是 Linux 网络管理的瑞士军刀,由 iproute2 工具集提供(现代发行版如 Ubuntu、CentOS、Debian 均已预装)。它整合了传统工具(ifconfig、route、arp)的功能,并扩展了对复杂网络场景的支持:
- 管理网络接口(启停、MTU、MAC 地址修改)
- 配置 IP 地址(IPv4 / IPv6)、子网掩码、广播地址
- 管理路由表、策略路由
- 处理 ARP 缓存、邻居表
- 支持 VLAN、桥接、隧道等高级功能
相比 ifconfig,ip 命令的优势在于:功能更全面、输出更规范、原生支持 IPv6 与现代网络特性,已成为 Linux 网络管理的标准工具。
二、理解 ip addr(ip add)
ip addr 是 ip 的子命令之一,专门用于查看、添加、删除和刷新网络接口的 IP 地址。核心功能包括:
- 显示所有网络接口的 IP 配置(IPv4 / IPv6)
- 为指定接口分配临时或永久 IP 地址
- 移除接口上的 IP 地址
- 批量清除接口的所有 IP 地址
2.1 输出解析
执行 ip addr show(或简写 ip add)可查看所有接口的 IP 配置:
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:16:3e:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2001:db8::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fexx:xxxx/64 scope link
valid_lft forever preferred_lft forever
输出按接口分段(如 lo 回环、eth0 物理网卡),关键字段含义如下:
| 字段 | 说明 |
|---|---|
lo / eth0 |
接口名称(回环 / 物理网卡)。部分新系统会显示为 ens33、eno1 等可预测命名 |
<BROADCAST,...> |
接口状态标志:UP 已启用 · DOWN 已禁用 · BROADCAST 支持广播 · MULTICAST 支持组播 · LOOPBACK 回环接口 |
mtu 1500 |
最大传输单元,以太网默认 1500 字节 |
state UP |
接口的运行状态(比 flag 更准确:能反映网线是否插好) |
link/ether |
MAC 地址(物理地址) |
inet 192.168.1.100/24 |
IPv4 地址 + 子网掩码(CIDR 表示法,/24 = 255.255.255.0) |
scope global |
地址作用域:global 全局可路由 · link 仅本链路 · host 仅本机(回环) |
inet6 |
IPv6 地址及前缀长度 |
valid_lft / preferred_lft |
地址有效期(forever 表示永久;DHCP 获取的地址会有倒计时) |
三、基本语法
ip addr [命令] [参数] [接口]
3.1 核心命令
| 命令 | 功能 | 示例 |
|---|---|---|
show |
显示接口 IP 配置(可指定接口,默认全部) | ip addr show eth0 |
add |
为接口添加 IP 地址(临时生效) | ip addr add 192.168.1.10/24 dev eth0 |
del |
删除接口上的指定 IP | ip addr del 192.168.1.10/24 dev eth0 |
flush |
清除接口所有 IP 地址(谨慎!) | ip addr flush dev eth0 |
3.2 常用参数
dev <接口名>:指定网络接口(如eth0、lo),除show外必须指定label <标签>:为 secondary IP 添加标签(如eth0:1),便于区分主/次 IPscope <作用域>:指定地址作用域(global/link/host),默认globalbroadcast <地址>:手动指定广播地址(通常由 CIDR 自动计算)
四、常用操作示例
4.1 查看 IP 配置
# 显示所有接口
ip addr show # 或简写 ip add
# 只看指定接口
ip addr show eth0
# 只显示 IPv4(-6 则只显示 IPv6)
ip -4 addr show
# 只看地址,不要其它冗余信息
ip -brief addr show
4.2 添加 IP 地址
# 添加 IPv4 地址
sudo ip addr add 192.168.1.20/24 dev eth0
# 添加 IPv6 地址
sudo ip addr add 2001:db8::2/64 dev eth0
# 添加 secondary IP(带标签,便于识别)
sudo ip addr add 192.168.1.21/24 dev eth0 label eth0:1
注意:通过
ip addr add添加的地址临时生效,重启网络服务或系统后会丢失。需要永久生效请见第五章。
添加 secondary IP 后,执行 ip addr show eth0 会看到两个 inet 条目,分别对应主 IP 和 secondary IP。
4.3 删除 IP 地址
# 删除指定 IPv4 地址
sudo ip addr del 192.168.1.20/24 dev eth0
# 删除带标签的 secondary IP
sudo ip addr del 192.168.1.21/24 dev eth0 label eth0:1
4.4 清除接口所有 IP
# ⚠️ 危险:会清除该接口全部 IPv4/IPv6 地址
sudo ip addr flush dev eth0
仅用于重置接口配置(如更换网络环境时)。执行前务必先备份:
ip addr show eth0 > eth0_backup.txt
五、高级应用场景
5.1 永久配置 IP 地址
ip addr add 只是临时生效,永久配置需要改发行版对应的网络配置文件。
场景 1:Ubuntu / Debian(Netplan)
Netplan 是 Ubuntu 18.04+ 的默认网络配置工具,配置文件位于 /etc/netplan/*.yaml:
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.10/24 # IPv4
- 2001:db8::1/64 # IPv6
routes:
- to: default
via: 192.168.1.1 # 网关(新版写法)
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
sudo netplan try # 先试运行(10 秒内没断线再确认,防锁死)
sudo netplan apply # 正式应用
实战提醒:远程改网络配置时务必先
netplan try—— 配错了会自动回滚,不会把你自己关在门外。
场景 2:CentOS / RHEL(nmcli)
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.10/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 114.114.114.114"
sudo nmcli connection modify eth0 ipv4.method manual
sudo nmcli connection up eth0
5.2 配置临时测试 IP
调试网络时,可以临时加一个 IP 测连通性,不改任何配置文件:
# 添加临时 IP
sudo ip addr add 10.0.0.100/24 dev eth0
# 测连通性
ping -c 3 10.0.0.1
# 测完删掉,恢复原状
sudo ip addr del 10.0.0.100/24 dev eth0
5.3 为容器 / 虚拟接口分配 IP
# 为 docker0 桥接接口添加 IP
sudo ip addr add 172.17.0.1/16 dev docker0
# 查看虚拟接口
ip -brief addr show | grep -E 'docker|veth|br-'
5.4 用 ip addr 快速排查网络问题
# 1. 接口有没有起来?(看 UP 标志和 state)
ip -brief addr show
# 2. 有没有拿到 IP?(DHCP 失败时这里会是空的)
ip -4 addr show dev eth0
# 3. 有没有 IP 冲突?(多网卡同网段要小心)
ip -4 addr show | grep inet
# 4. 路由对不对?
ip route show
六、最佳实践
6.1 规范接口命名与 IP 管理
- 接口名保持清晰(
eth0物理网卡、docker0容器桥接),必要时用 systemd 的可预测命名 - secondary IP 一定要加标签(如
eth0:1),否则时间久了分不清哪个是干什么的 - 维护一张 IP 分配表(Excel / 配置管理工具),避免地址冲突
6.2 临时修改优先测试
加 / 改 IP 时,先用 ip addr add 临时生效,测通(ping、telnet、curl)确认无误后,再写进配置文件永久保存。这样出问题随时能删掉重来。
6.3 谨慎使用 flush
ip addr flush dev <接口> 会清掉接口所有地址,远程执行 = 立刻断线。只能本地控制台操作,且提前备份。
6.4 同时配 IPv4 和 IPv6
sudo ip addr add 192.168.1.10/24 dev eth0 # IPv4
sudo ip addr add 2001:db8::1/64 dev eth0 # IPv6
6.5 远程操作的三条保命习惯
- 先备份配置:
cp /etc/network/interfaces{,.bak} - 用一个「定时回滚」兜底:
(sleep 300 && reboot) &然后再改,改通了 kill 掉它 - 保持一个已连上的 SSH 会话不关,另开一个窗口测试
七、常见问题与排错
7.1 添加 IP 后不生效
| 原因 | 排查与解决 |
|---|---|
| 接口未启用(DOWN) | ip link set dev eth0 up 启用接口,再 ip -brief addr show 确认 |
| IP 地址冲突 | arp -a 查同网段是否有重复,或 ping <IP> 测试 |
| 子网掩码写错(如 /24 写成 /32) | 确认 CIDR 格式正确:192.168.1.10/24 |
| 加了但 ping 不通网关 | 检查路由:ip route show,缺默认路由就补 ip route add default via ... |
7.2 重启后 IP 丢失
原因:ip addr add 只临时生效,没写进配置文件。
解决:按发行版改配置文件(Netplan / nmcli / ifcfg,见 5.1 节)。
7.3 无法删除 IP 地址
# 报错:Cannot assign requested address
# 原因:该 IP 不在此接口上,或格式写错
# 解决:先确认 IP 是否真的存在,再检查命令格式
ip addr show dev eth0 | grep inet
7.4 想快速判断「是网络问题还是配置问题」
ip -brief addr show # 有 IP 吗?
ip route show # 有默认路由吗?
ping -c 2 网关 # 通网关 = 二层没问题
ping -c 2 8.8.8.8 # 通外网 IP = 三层没问题
ping -c 2 baidu.com # 通域名 = DNS 没问题
# 哪里断,问题就在哪一层
八、总结
ip addr 是 Linux 网络管理的核心工具。从查看接口配置到临时添加 IP,从日常运维到高级调试,都离不开它。掌握其用法不仅能提升效率,更能帮你理解 Linux 网络栈的底层逻辑。
关键要点:
ip addr show查看配置,add/del增删 IP,flush清空地址- 临时配置用
ip addr add,永久配置必须改网络配置文件 - 善用
scope(作用域)和label(标签)参数,实现灵活的 IP 管理 - 远程操作前先备份 + 留后路,
flush和netplan apply都是能让你断线的命令
建议通过实际操练(添加 secondary IP、测试连通性、模拟故障排查)加深理解。遇到问题善用 man ip-address 查看手册,或查阅官方文档。
九、参考资料
- iproute2 官方 Wiki
man ip/man ip-address(本机手册,最权威)- Ubuntu Netplan 配置指南
- Red Hat 网络管理文档

Comments NOTHING