在CentOS 7及以上版本中,ifconfig命令已经被标记为废弃,取而代之的是ip命令。很多运维人员习惯了ifconfig的输出格式,突然切换到ip命令会觉得不适应,但实际上ip命令功能更强大、输出更灵活、支持的网络功能也更全面。下面我直接把日常运维中最高频的场景全部列出来,一个一个告诉你怎么用ip命令替代ifconfig,保证你看完就能上手干活。
一、为什么CentOS要淘汰ifconfig换成ip命令
ifconfig属于net-tools工具包,这个工具包已经很多年没有维护更新了,很多新的网络特性它根本不支持。而ip命令属于iproute2工具包,是Linux内核官方推荐的网络配置工具,支持IPv6、策略路由、多网卡绑定、VLAN等高级功能。CentOS 7开始默认不再安装net-tools,CentOS 8和CentOS Stream更是彻底移除了ifconfig。所以不管你愿不愿意,ip命令都是必须掌握的。好消息是,ip命令的学习成本并不高,常用场景也就那么十几个,记住了就行。
二、查看所有网卡IP地址——替代ifconfig直接查看
以前我们输入ifconfig就能看到所有网卡的IP信息,现在用ip addr show或者简写ip a就能达到同样效果,而且信息更详细。
ip addr show
如果你只想看某个特定网卡,比如eth0,可以这样写:
ip addr show eth0
输出结果中你会看到inet后面跟着IPv4地址,inet6后面跟着IPv6地址,还有网卡的MAC地址、MTU值、状态(UP/DOWN)等信息。比ifconfig多了一个link/ether字段显示MAC,还有详细的网卡状态信息。如果你只想看IP地址,不想看其他杂七杂八的内容,可以加过滤:
ip -4 addr show
这个-4参数只显示IPv4地址,-6参数只显示IPv6地址,非常干净。
三、查看网卡简要信息——快速替代ifconfig eth0
以前输入ifconfig eth0只看一块网卡,现在对应的命令是:
ip addr show dev eth0
或者更简洁的写法:
ip a show eth0
如果你只是想快速确认某块网卡有没有IP,用这个命令足够了。在批量服务器巡检脚本中,我个人习惯用下面这种方式只提取IP:
ip -4 addr show eth0 | grep -oP 'inet \K[\d.]+'
这条命令会直接输出eth0的IPv4地址,不带任何其他信息,适合写进自动化脚本里。
四、启用和禁用网卡——替代ifconfig up/down
以前我们用ifconfig eth0 up启用网卡,ifconfig eth0 down禁用网卡。现在对应的ip命令是:
ip link set eth0 up
ip link set eth0 down
注意这里用的是ip link set而不是ip addr,因为启用禁用是链路层操作,不是地址层操作。这个区别很重要,很多人一开始会搞混。如果你想批量操作多块网卡,可以用通配符:
ip link set eth* up
这会把所有eth开头的网卡全部启用。同样,down也可以这样用。
五、添加和删除IP地址——替代ifconfig添加IP
以前给网卡加IP是这样的:ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0。现在用ip命令:
ip addr add 192.168.1.100/24 dev eth0
删除IP地址:
ip addr del 192.168.1.100/24 dev eth0
这里要注意,ip命令用的是CIDR格式(/24)而不是子网掩码格式(255.255.255.0),两种写法都能识别,但推荐用CIDR。另外ip命令支持给同一块网卡添加多个IP,不需要像以前那样创建eth0:0、eth0:1这种虚拟接口了,直接add就行,管理起来更清晰。
六、修改MTU值——替代ifconfig mtu
以前改MTU是ifconfig eth0 mtu 1500,现在是:
ip link set eth0 mtu 1500
这个操作在调整网络性能、适配特殊网络环境(比如VXLAN、GRE隧道)时非常常用。查看当前MTU值可以用:
ip link show eth0
输出中mtu字段后面的数字就是当前值。
七、修改MAC地址——替代ifconfig hw ether
以前修改MAC地址用ifconfig eth0 hw ether 00:11:22:33:44:55,现在:
ip link set eth0 address 00:11:22:33:44:55
修改完之后记得先把网卡down再up,否则可能不生效:
ip link set eth0 down ip link set eth0 address 00:11:22:33:44:55 ip link set eth0 up
这个操作在虚拟化环境中经常用到,比如克隆虚拟机后需要修改MAC避免冲突。
八、查看路由表——替代route -n命令
虽然route -n也被废弃了,但很多人习惯用ifconfig配合route看网络。现在查看路由表用:
ip route show
或者简写:
ip r
只看IPv4路由:
ip -4 route show
添加默认网关:
ip route add default via 192.168.1.1 dev eth0
删除默认网关:
ip route del default via 192.168.1.1 dev eth0
添加一条到特定网段的路由:
ip route add 10.0.0.0/8 via 192.168.1.254
ip route的语法比route命令更直观,via后面跟下一跳,dev后面跟出接口,逻辑非常清晰。
九、查看网络统计信息——替代ifconfig的RX/TX数据
以前ifconfig输出里有RX packets、TX packets、errors、dropped这些统计信息,现在用:
ip -s link show eth0
这个-s参数会显示详细的统计数据,包括收发的字节数、包数、错误数、丢弃数等。如果你想看所有网卡的统计信息:
ip -s -s link show
两个-s参数会显示更详细的时间戳统计。这个在排查网络丢包、网卡异常时非常有用,比ifconfig的统计信息更全面。
十、查看邻居表(ARP表)——替代arp -a
以前用arp -a查看ARP缓存,现在用:
ip neigh show
或者:
ip n
只看某个网卡的邻居:
ip neigh show dev eth0
清除ARP缓存:
ip neigh flush dev eth0
这个命令在排查网络不通、IP冲突等问题时是高频操作。ip neigh的输出还会显示邻居的状态(REACHABLE、STALE、DELAY等),比arp -a提供的信息更丰富。
十一、创建和删除虚拟网卡(VLAN)——ip命令的杀手锏
这是ifconfig完全做不到的事情。创建VLAN子接口:
ip link add link eth0 name eth0.100 type vlan id 100
ip addr add 192.168.100.1/24 dev eth0.100
ip link set eth0.100 up
删除VLAN子接口:
ip link del eth0.100
创建桥接接口:
ip link add name br0 type bridge ip addr add 192.168.1.1/24 dev br0 ip link set br0 up
把物理网卡加入桥接:
ip link set eth0 master br0
这些操作在KVM虚拟化、Docker网络、OpenStack部署中是日常操作,ifconfig根本无法胜任。
十二、批量操作和脚本化技巧
在实际运维中,我们经常需要批量管理多台服务器的网络。ip命令支持JSON格式输出,这对自动化运维非常友好:
ip -j addr show
输出的是JSON格式,可以直接用jq工具解析提取需要的字段。比如提取所有网卡的IP和名称:
ip -j addr show | jq '.[].ifname + " " + (.[].addr_info[] | select(.family == "inet") | .local)'
这个在Ansible、Shell脚本中做网络巡检时非常高效。另外,ip命令还支持-brief参数,输出简洁格式:
ip -br addr show
输出类似于ifconfig的精简视图,每行一个网卡,包含接口名、状态、IP地址,一目了然。
十三、常见问题和注意事项
第一,ip命令的修改默认是临时的,重启后失效。如果需要永久生效,还是要修改配置文件,比如/etc/sysconfig/network-scripts/ifcfg-eth0或者用nmcli命令。第二,CentOS 7上如果发现ip命令不存在,需要安装iproute包:yum install iproute。CentOS 8以上默认自带。第三,ip命令的参数顺序和ifconfig不一样,不要混着用,比如ip addr add的顺序是先地址后dev,不要写反。第四,在写脚本时建议用ip -4或ip -6明确指定协议版本,避免输出混乱。
十四、总结:从ifconfig到ip命令的迁移建议
从ifconfig迁移到ip命令其实就记住几个核心对应关系:ifconfig对应ip addr show,ifconfig eth0 up对应ip link set eth0 up,ifconfig eth0 192.168.1.1 netmask 255.255.255.0对应ip addr add 192.168.1.1/24 dev eth0,route -n对应ip route show,arp -a对应ip neigh show。把这几个核心场景记住,日常运维就够用了。剩下的VLAN、桥接、隧道等高级功能,需要的时候再查文档也来得及。ip命令是Linux网络管理的未来方向,早点适应早点受益。
