使用nmcli修改子网掩码后配置不生效的问题及正确等价操作咨询
使用nmcli修改子网掩码后配置不生效的问题及正确等价操作咨询
我懂你的困扰——直接用ip命令修改接口地址和子网掩码能立刻生效,但换成nmcli操作后,明明改了连接配置、重启了网络服务,旧的子网掩码还是挂在接口上。这是因为你没搞清楚ip命令和nmcli的本质区别:
ip addr del/add是直接操作当前活跃的网络接口,属于临时生效的即时修改;- 而
nmcli con modify只是修改了系统中存储的连接配置文件,如果不主动激活这个连接,新配置不会自动应用到当前运行的会话里,单纯重启networking服务往往也不会触发连接的重新加载。
给你一套和ip命令等价的、能立刻生效且持久化的nmcli操作步骤:
- 先获取eth4对应的连接UUID(你的原命令没问题,也可以用
nmcli con show --active | grep eth4更精准地定位活跃连接):
CONNGUID=$(sudo nmcli con | grep eth4 | grep -Po '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
- 修改该连接的IPv4地址(包含子网掩码):
sudo nmcli con modify $CONNGUID ipv4.addresses 10.0.5.8/24
- 最关键的一步:重新激活这个连接,让新配置立刻覆盖当前会话的旧配置:
sudo nmcli con up $CONNGUID
也可以把这三条合并成一条命令,一次性完成:
CONNGUID=$(sudo nmcli con | grep eth4 | grep -Po '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}') && sudo nmcli con modify $CONNGUID ipv4.addresses 10.0.5.8/24 && sudo nmcli con up $CONNGUID
完成后再用ip addr show dev eth4 | grep '10.0.5.8'验证,你会看到旧的/16条目已经消失,新的/24配置生效了。而且这个修改是持久化的——下次系统重启后,新配置依然会自动加载。
备注:内容来源于stack exchange,提问作者npr_se
相关产品推荐
相关产品推荐

