使用 grep 将实时网络接口的 MAC 地址与现有配置文件进行比较

使用 grep 将实时网络接口的 MAC 地址与现有配置文件进行比较

在 CentOS/RedHat VM 上,每次克隆 VM 都会创建新的网络接口。我需要将 ifcfg-eth* 重命名为与 VM 上的实时接口相同的名称。

我想要做的是使用脚本比较活动 NIC 的 MAC 地址(从“ifconfig”结果中获取)和所有现有 ifcfg-* 文件中的 MAC 地址,并将相应的 MAC 地址重命名为 ifcfg-liveNICname。

例子:

# ifconfig
eth2      Link encap:Ethernet  HWaddr 00:50:56:8F:5B:D5

/etc/sysconfig/network-scripts/ 中有 3 个配置文件:

ifcfg-eth0
ifcfg-Auto_eth0
ifcfg-eth1

脚本将 MAC 地址00:50:56:8F:5B:D5与所有 3 个文件中的 MAC 地址进行比较,并将正确的 MAC 地址(具有相关的 MAC 地址)重命名为:

ifcfg-eth2

最好它还可以更改 ifcfg 文件中的行名称:

NAME=eth2

但不是必须的。

我需要这个“修复”,这样我就可以在一堆虚拟机上运行脚本来一次性更改 DNS 条目。我有这个脚本,但在测试虚拟机上运行时,它会创建一个新的 ifcfg-eth2 文件,其中只有 DNS 条目,而活动接口在文件中有不同的名称,例如 ifcfg-eth0

由于我不擅长编写脚本,所以我从以下内容开始:

nic=$(/sbin/route -n | grep "^0.0.0.0" | rev | cut -d' ' -f1 | rev)
ifconfig -a | grep $nic`

这就是我得到的全部内容 :(

有人可以帮忙吗?

答案1

如果我理解正确的话,您需要获取当前正在使用的 NIC 的 MAC 地址,然后找到提及此 MAC 地址的文件/etc/sysconfig/network-scripts/,并将该文件重命名为先前找到的网络设备的位置。如果是这样,这应该可行ifcfg-NICNIC

#!/usr/bin/env bash

## Get the NIC's name
# nic=$(/sbin/route -n | awk '/^0\.0\.0\.0/{print $NF}')
nic=$(/sbin/ip route show | awk '/default/{print $5}')


## Get the NIC's MAC address
#mac=$(/sbin/ifconfig "$nic" | grep -oP 'HWaddr\s*\K[^\s]*')
mac=$(/sbin/ip link show "$nic" | grep -oP 'ether\s*\K[^\s]*')

## Get the file name. This assumes that there will only
## be one matching file. 
file=$(grep -lm 1 "$mac" /etc/sysconfig/network-scripts/*)

## Change the NAME line to the new NIC and make
## a backup copy of the file called "$file.bak".
sed -i.bak -r "s/NAME=(.*)/NAME=$nic/" "$file"

## Rename the file
mv "$file" "$(dirname "$file")"/ifcfg-"$nic"

答案2

我不确定我是否明白你想要做什么。

您想更改 DNS 服务器吗?它们位于文件 /etc/resolv.conf 中,与 NIC 名称无关。

您希望所有克隆都具有相同的 MAC 地址吗?不同的 MAC 地址?还是手动选择的 MAC 地址?请继续阅读。

最简单的方法是为每个虚拟机(无论是否克隆)手动分配 NIC 的 MAC 地址。

操作说明可以在线查看,例如这里. 编辑虚拟机的 .vmx 文件,删除以 开头的行

  ethernetN.generatedAddress
  ethernetN.addressType
  ethernetN.generatedAddressOffset 

并把他们的位置线

  ethernetN.address = "00:50:56:XX:YY:ZZ"
  ethernetN.addressType = “static”

其中 00:50:56:XX:YY:ZZ 是您希望强加的 MAC 地址。现在保存文件,您就完成了。

相关内容