ip link 操作链路层,启用/禁用须用 up/down(非 state up),改 mac 或 mtu 前必须先 down 再 up;ip addr 管理 ip 时需带完整 cidr;ip route 设默认网关须指定 dev 和 via;所有配置默认临时,持久化需按发行版规范写入对应配置文件。

ip link 管理网卡启停和基础属性
网卡不起来、改不了 MAC、MTU 调不生效?大概率是没按顺序操作。ip link 操作的是链路层本身,不是 IP 地址,所以它不关心你配了几个 IP,只管物理/虚拟接口的“通电”状态和硬件参数。
- 启用/禁用必须用
sudo ip link set dev ens33 up/down,up和down是动作,不是状态值;写成state up会报错 - 改 MAC 前必须先
down,否则提示RTNETLINK answers: Device or Resource busy;改完要再up,否则新 MAC 不生效 - 设置 MTU 时,如果网卡已
up,部分驱动(如某些虚拟网卡)会拒绝修改,稳妥做法仍是先down再设再up -
ip -br link show比ip l更适合快速扫一眼所有接口名、状态、MAC,尤其在多网卡服务器上
ip addr 添加/删除 IPv4 地址
临时加 IP 最常用,但删错一个地址可能连 ssh 都断掉——因为 ip addr flush dev eth0 会清空全部,包括你没注意的另一个业务 IP。
- 添加地址用
sudo ip addr add 192.168.1.100/24 dev eth0,CIDR 掩码不能省,写成192.168.1.100/255.255.255.0会失败 - 删除指定地址必须带完整 CIDR:
sudo ip addr del 192.168.1.100/24 dev eth0,只写 IP 不带掩码会报invalid argument - 同一网卡可绑定多个 IP,但内核默认不响应非主 IP 的 ARP 请求(除非开启
arp_ignore),所以其他机器 ping 不通新 IP 很正常 -
ip a show dev eth0输出里带scope global的才是对外可用的地址,scope host是本地回环用途,别误删
ip route 配置默认网关和静态路由
加了默认路由却上不了网?常见原因是没指定出接口,或者系统已有更高优先级路由覆盖了你的配置。
- 设默认网关必须带
dev和via:sudo ip route add default via 192.168.1.1 dev eth0;漏掉dev可能导致路由走错网卡 - 查看当前 IPv4 路由表用
ip route show,加-n(不解析域名)更快;注意看第一条是否为default via ...,且没有重复或冲突条目 - 删除默认路由用
sudo ip route del default,不是del default via ...;后者语法错误,会提示Invalid argument - 静态路由若指向本地子网(如
ip route add 10.0.0.0/8 via 192.168.1.100),而192.168.1.100不在本机任何接口上,这条路由永远不会命中
永久生效 vs 临时配置的区别在哪
所有 ip 命令默认都是内存级操作,重启即丢。想持久化,不能靠 alias 或 rc.local,得进发行版规定的网络配置路径。
- centos/RHEL 8+ 用
/etc/sysconfig/network-scripts/ifcfg-ens33,改IPADDR、NETMASK、gateway,然后sudo systemctl restart NetworkManager或nmcli connection reload - ubuntu/debian 22.04+ 默认用 Netplan,配置在
/etc/netplan/*.yaml,改完必须sudo netplan apply,直接systemctl restart systemd-networkd不生效 - 手动写
ip命令到/etc/rc.local在多数新系统中已被禁用,systemd默认不执行它 - 测试时建议先用临时命令验证通路,再写配置文件;否则配置写错 + 重启 = 失联
真正麻烦的不是命令记不住,而是不同发行版对“永久”的定义完全不同——CentOS 认为 ifcfg 是权威,Ubuntu 认为 Netplan 才算数,而容器或 network Namespace 里连这些文件都没有。动手前先确认自己在哪种环境里。