nic_rename.sh#!/bin/bash# 按udev规则文件中的 MAC地址-网卡名 映射强制改名, 处理网卡枚举较晚或已被提前UP导致udev改名失败的情况RULES/etc/udev/rules.d/70-persistent-net.rules[-f$RULES]||exit0declare-AMAPwhileIFSread-rline||[-n$line];domac$(grep-oPATTR\{address\}\K[^]$line)name$(grep-oPNAME\K[^]$line)[-n$mac][-n$name]MAP[$mac]$namedone$RULES[${#MAP[]}-eq0]exit0# 改名前先down, 接口UP时内核拒绝改名, 经临时名避免名称冲突, 再恢复原状态fordevin/sys/class/net/*;dodev$(basename$dev)[$devlo]continuemac$(cat/sys/class/net/$dev/address2/dev/null)target${MAP[$mac]}[-z$target]continue[$dev$target]continue# 记录原 UP/DOWN 状态was_up0ifiplinkshow$dev|grep-q.*UP.*;thenwas_up1fiiplinkset$devdown2/dev/nullif!iplinkset$devnametmp_$target2/dev/null;thenlogger-tnic_rename$dev改名失败continuefiiplinksettmp_$targetname$target2/dev/nullif[$was_up-eq1];theniplinkset$targetupfilogger-tnic_rename$dev($mac) -$targetdone用法./nic_rename.sh。设置系统开机自启把文件nic_rename.sh放在目录/lib/ifupdown/下chmod x nic_rename.sh赋予可执行权限。创建服务文件/lib/systemd/system/nic_rename.service[Unit]DescriptionRename ethernet cards by MACAftersystemd-udev-trigger.service systemd-modules-load.service local-fs.targetBeforenetwork-pre.targetWantsnetwork-pre.target[Service]TypeoneshotRemainAfterExityesExecStart/lib/ifupdown/nic_rename.sh[Install]WantedBymulti-user.target启动服务systemctlenablenic_rename systemctl daemon-reload systemctl start nic_rename
阅读完成 · 觉得有帮助?