ip addr 是当前唯一应使用的网络配置命令,因 ifconfig 已被主流发行版事实性弃用,且功能受限、不支持 ipv6/arp/vlan 等现代特性,而 ip 命令功能完整、输出规范、兼容性强、适合自动化。

ip addr 是当前唯一该用的命令
ifconfig 已不是“过时”,而是事实性弃用:ubuntu 22.04+、centos 8+、Fedora 默认不装 net-tools,你运行 ifconfig 很可能直接报 command not found。这不是配置问题,是发行版主动移除。而 ip 属于 iproute2,所有现代 linux 内核默认集成,持续更新,脚本里用它不会在新环境突然失效。
常见错误现象:ifconfig 看不到 IPv6 地址、查不到 ARP 表、改不了多 IP、配不了 VLAN —— 它压根不支持这些,不是你命令写错,是它能力边界就到这儿了。
-
ip addr原生显示inet6地址,并标注scope link或scope global,区分用途 -
ifconfig的HWaddr字段在ip addr中统一为link/ether,更准确(MAC 不只用于以太网) - 想查 ARP 缓存?
ip neigh;查路由?ip route show;查策略路由?ip rule——ifconfig连边都摸不到
看 IP 地址时,别被 ifconfig 的“已启用”误导
ifconfig 默认只显示“已启用(UP)”的接口,ifconfig -a 才列全;而 ip addr 默认列出所有接口及其所有地址(包括临时地址、deprecated 地址),且每条地址带生命周期标记:valid_lft forever 或 preferred_lft 3599sec —— 这对排查 DHCP 续租失败、IPv6 隐私扩展失效特别关键。
使用场景:容器或云主机常有多个临时 IP 或 secondary IP,ifconfig 只显示第一个主 IP,容易漏掉实际通信用的地址。
-
ip addr show eth0显示该接口全部 IPv4/IPv6 地址,含 label(如eth0:web)和 scope -
ifconfig eth0可能只显示一条inet addr,哪怕你用ip addr add加了三个 IP - 要过滤出主 IPv4 地址?用
ip -4 addr show eth0 | grep -oP 'inet K[d.]+',比正则匹配ifconfig输出稳定得多
配 IP 时,CIDR 和多地址是分水岭
ifconfig eth0 192.168.1.50 netmask 255.255.255.0 是过去式;ip addr add 192.168.1.50/24 dev eth0 才是现在时。区别不只是写法:前者只能设一个主 IP,后者可叠加任意数量同网段/跨网段地址,且支持精确删除、label 标记、lifetime 控制。
容易踩的坑:用 ifconfig 配完 IP,再用 ip addr 查,会发现多出一条 “secondary” 标记的地址——因为 ifconfig 底层调用的是 ip addr add 的兼容路径,但自己不暴露这个事实。
- 加第二个 IP:
ip addr add 192.168.1.51/24 dev eth0 label eth0:backup - 删指定地址:
ip addr del 192.168.1.50/24 dev eth0(ifconfig没对应操作) - 设临时地址(重启消失):
ip addr add 10.0.0.1/24 dev eth0 preferred_lft 0
自动化脚本里还用 ifconfig,等于埋定时炸弹
很多旧脚本用 ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -d: -f2 提取 IP,看似能跑,但一遇到 IPv6、docker 的 veth 接口、systemd-networkd 的 predictible Interface name(如 ens33 而非 eth0),就解析失败。而 ip 输出结构稳定、字段明确、支持 json(ip -j addr),适合机器读取。
性能影响不大,但兼容性风险极高:某次系统升级后,ifconfig 被彻底卸载,脚本卡在 command not found,而运维还在翻老文档找安装命令。
- 提取主 IPv4 地址(推荐):
ip -4 addr show scope global | grep -oP 'inet K[d.]+' | head -n1 - 提取所有 IPv4 地址(含 secondary):
ip -4 addr | grep -oP 'inet K[d.]+' | sort -u - CI/CD 流水线中,一律用
ip,别给未来自己留 debug 夜晚
最易被忽略的一点:有些设备(比如 OpenWrt 或某些嵌入式 Linux)仍默认只装 net-tools,没装 iproute2。这不是“应该用哪个”,而是“你得先确认有没有”。查一下 which ip 和 which ifconfig,比背命令更重要。