You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下用awk/sed单行命令为指定网卡更新或插入网关配置

用AWK单行命令实现Ubuntu网卡网关的更新/插入

我来给你提供一个基于AWK的解决方案,完全满足你的需求——不用固定行号,精准针对指定网卡处理,同时适配「无网关时插入」和「有网关时更新」两种场景:

核心命令(以em1网卡、网关192.168.1.1为例)

sudo awk -v nic="em1" -v gw="192.168.1.1" '
    BEGIN { in_nic=0; gw_set=0 }
    # 进入/离开网卡配置块的判断
    /^auto/ || /^iface/ {
        # 如果刚离开目标网卡的配置块且没设置过网关,补插网关
        if (in_nic && !gw_set) {
            print "gateway " gw
        }
        # 标记当前是否在目标网卡的配置块内
        in_nic = ($2 == nic) ? 1 : 0
        gw_set = 0
    }
    # 处理已有的gateway行
    /^gateway/ {
        if (in_nic) {
            # 替换成新网关,标记已设置
            print "gateway " gw
            gw_set=1
            next
        }
    }
    # 打印其他所有非gateway的行
    { print }
    # 处理文件末尾刚好是目标网卡配置块的情况
    END {
        if (in_nic && !gw_set) {
            print "gateway " gw
        }
    }
' /etc/network/interfaces > /tmp/interfaces.tmp && sudo mv /tmp/interfaces.tmp /etc/network/interfaces

怎么适配不同网卡和网关?

只需要修改命令开头的两个变量:

  • 把-v nic="em1"中的em1换成你要操作的网卡(比如p2p1或p3p1)
  • 把-v gw="192.168.1.1"换成你的实际网关地址

工作原理拆解

场景1:目标网卡无网关配置

当脚本识别到进入目标网卡的配置块(匹配auto或iface行,且第二个字段是目标网卡),会在该配置块的所有现有行处理完成后,自动插入新的网关配置——位置会紧跟在该网卡的netmask等配置后面,绝不会插入到其他网卡的配置区域。

场景2:目标网卡已有网关配置

当在目标网卡的配置块内检测到现有的gateway行,脚本会直接替换成新的网关地址,其他网卡的网关配置完全不受影响,精准度拉满。

注意事项

  1. 操作前备份:建议先备份原配置文件,避免意外:
    sudo cp /etc/network/interfaces /etc/network/interfaces.bak
    
  2. 文件安全性:命令先把处理后的内容写入临时文件,确认无误后再替换原文件,避免原文件被损坏。
  3. 格式兼容性:只要你的/etc/network/interfaces是Ubuntu标准的网络配置格式(每个网卡配置从auto或iface行开始,到下一个网卡的auto/iface行结束),这个脚本就能正常工作。

内容的提问来源于stack exchange,提问作者the kamilz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:59:51