【脚本】 【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
相关推荐
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】基建三件套:gflags + gtest + spdlog 源码编译安装与实战入门
linux·网络·数据库·c++·微服务·log4j
JavaPub-rodert1 小时前
服务器不能访问 Docker Hub,镜像怎么搬过去?讲透 docker save、load、export、import 与离线镜像分发
运维·服务器·docker
H.莓飛1 小时前
【C++】类与对象(末):static、友元与拷贝优化
linux·开发语言·c++·visual studio
EasyGBS10 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
程序员-Benothing10 小时前
Vim编辑器从入门到精通:模式、快捷键、配置、插件
linux·运维·服务器
m0_6464299710 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
wdfk_prog10 小时前
LWIP教程 09:从 `tcp_slowtmr()` 到 Fast Retransmit——TCP 超时重传与重复 ACK
服务器·网络·数据库·网络协议·tcp/ip
‎ദ്ദിᵔ.˛.ᵔ₎10 小时前
linux 进程信号 (上)
linux·服务器