【脚本】 【Linux】启动所有网卡

nic_rename.sh

bash 复制代码
#!/bin/bash

# 按udev规则文件中的 MAC地址->网卡名 映射强制改名, 处理网卡枚举较晚或已被提前UP导致udev改名失败的情况
RULES=/etc/udev/rules.d/70-persistent-net.rules
[ -f "$RULES" ] || exit 0

declare -A MAP
while IFS= read -r line || [ -n "$line" ]; do
    mac=$(grep -oP 'ATTR\{address\}=="\K[^"]+' <<<"$line")
    name=$(grep -oP 'NAME="\K[^"]+' <<<"$line")
    [ -n "$mac" ] && [ -n "$name" ] && MAP[$mac]=$name
done < "$RULES"

[ ${#MAP[@]} -eq 0 ] && exit 0

# 改名前先down, 接口UP时内核拒绝改名, 经临时名避免名称冲突, 再恢复原状态
for dev in /sys/class/net/*; do
    dev=$(basename "$dev")
    [ "$dev" = "lo" ] && continue
    mac=$(cat "/sys/class/net/$dev/address" 2>/dev/null)
    target=${MAP[$mac]}
    [ -z "$target" ] && continue
    [ "$dev" = "$target" ] && continue

    # 记录原 UP/DOWN 状态
    was_up=0
    if ip link show "$dev" | grep -q "<.*UP.*>"; then
        was_up=1
    fi

    ip link set "$dev" down 2>/dev/null
    if ! ip link set "$dev" name "tmp_$target" 2>/dev/null; then
        logger -t nic_rename "$dev 改名失败"
        continue
    fi
    ip link set "tmp_$target" name "$target" 2>/dev/null
    if [ "$was_up" -eq 1 ]; then
        ip link set "$target" up
    fi
    logger -t nic_rename "$dev($mac) -> $target"
done

用法: ./nic_rename.sh。

设置系统开机自启:

  • 把文件nic_rename.sh放在目录/lib/ifupdown/下,chmod +x nic_rename.sh赋予可执行权限。
  • 创建服务文件/lib/systemd/system/nic_rename.service
bash 复制代码
[Unit]
Description=Rename ethernet cards by MAC
After=systemd-udev-trigger.service systemd-modules-load.service local-fs.target
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/ifupdown/nic_rename.sh

[Install]
WantedBy=multi-user.target
  • 启动服务
bash 复制代码
systemctl enable nic_rename
systemctl daemon-reload
systemctl start nic_rename
相关推荐
程序猿老A20 分钟前
轻量应用服务器怎么搭建 WordPress站点?
服务器
m0_7436975930 分钟前
DNS的反向域名的相关问题
linux
杨云龙UP40 分钟前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
snysy41 分钟前
服务器安全加固与入侵检测实战:从SSH加固、防火墙策略到挖矿木马排查
服务器·安全·ssh
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
思想觉悟1 小时前
SEAndroid实战
android·linux·c++
隔窗听雨眠1 小时前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
xiaoyunxuexibiji1 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能
小此方1 小时前
C++ 工程组件与基础设施(三)详解RPC服务的概念与安装,图片介绍Brpc服务器和客户端的搭建过程
服务器·c++·rpc