ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【脚本】 【Linux】重命名网卡

【脚本】 【Linux】重命名网卡

nic_rename.sh

#!/bin/bash# 按udev规则文件中的 MAC地址->网卡名 映射强制改名, 处理网卡枚举较晚或已被提前UP导致udev改名失败的情况RULES=/etc/udev/rules.d/70-persistent-net.rules[-f"$RULES"]||exit0declare-AMAPwhileIFS=read-rline||[-n"$line"];domac=$(grep-oP'ATTR\{address\}=="\K[^"]+'<<<"$line")name=$(grep-oP'NAME="\K[^"]+'<<<"$line")[-n"$mac"]&&[-n"$name"]&&MAP[$mac]=$namedone<"$RULES"[${#MAP[@]}-eq0]&&exit0# 改名前先down, 接口UP时内核拒绝改名, 经临时名避免名称冲突, 再恢复原状态fordevin/sys/class/net/*;dodev=$(basename"$dev")["$dev"="lo"]&&continuemac=$(cat"/sys/class/net/$dev/address"2>/dev/null)target=${MAP[$mac]}[-z"$target"]&&continue["$dev"="$target"]&&continue# 记录原 UP/DOWN 状态was_up=0ifiplinkshow"$dev"|grep-q"<.*UP.*>";thenwas_up=1fiiplinkset"$dev"down2>/dev/nullif!iplinkset"$dev"name"tmp_$target"2>/dev/null;thenlogger-tnic_rename"$dev改名失败"continuefiiplinkset"tmp_$target"name"$target"2>/dev/nullif["$was_up"-eq1];theniplinkset"$target"upfilogger-tnic_rename"$dev($mac) ->$target"done

用法:./nic_rename.sh。
设置系统开机自启:

  • 把文件nic_rename.sh放在目录/lib/ifupdown/下,chmod +x nic_rename.sh赋予可执行权限。
  • 创建服务文件/lib/systemd/system/nic_rename.service
[Unit]Description=Rename ethernet cards by MACAfter=systemd-udev-trigger.service systemd-modules-load.service local-fs.targetBefore=network-pre.targetWants=network-pre.target[Service]Type=oneshotRemainAfterExit=yesExecStart=/lib/ifupdown/nic_rename.sh[Install]WantedBy=multi-user.target
  • 启动服务
systemctlenablenic_rename systemctl daemon-reload systemctl start nic_rename
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进