我正在尝试弄清楚如何获取网络接口名称,然后更改名称。现在,使用此示例可以轻松更改名称:
ip link set eth1 name <newName>;
但是我想要一个脚本或命令,可以根据 mac 地址自动设置链接名称。
例如,我正在尝试这样做:
1)获取 MAC 地址为“68:05:ca:0e:74:c4”的接口名称。
2) 通过 mac 地址定位找到接口名称后,更改接口名称。通过发出“ip link set name ;”
是否可以在 bash 脚本/命令中执行此操作以自动查找接口名称并重命名?我一直尝试通过“ip link show”和 awk 来做到这一点,但没有成功。
当我尝试使用 awk 时,我遇到了问题,因为接口名称和 mac 地址位于不同的行上。
ip link | awk '{print $2}'
答案1
我会用一个小脚本来做到这一点,首先将接口的名称放入一个变量中,然后用它来设置新名称
#!/bin/bash
oldinterfacename=$(ip -br link | awk '$3 ~ /90:10:00:9f:46:c3/ {print $1}')
if [ -z "$oldinterfacename" ]
then
echo "Did not find interface to rename"
exit 1
fi
ip link set "$oldinterfacename" name newName || { echo "Error: Failed to set newName" ; exit 1; }
答案2
您可以让一致的网络设备命名根据 MAC 地址创建接口名称。例如,使用此方法,硬件地址为 68:05:ca:0e:74:c4 的接口将被命名为enx6805ca0e74c4
。
在 RHEL/CentOS 7 上,您需要稍微更改 udev 命名规则。您可以按照以下说明进行操作:
将默认文件复制/usr/lib/udev/rules.d/80-net-name-slot.rules
到目录/etc/udev/rules.d
,然后编辑副本。
在复制的文件中,找到以下三行:
NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}"
NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}"
将这些行替换为:
NAME=="", ENV{ID_NET_NAME_MAC}!="", NAME="$env{ID_NET_NAME_MAC}"
然后重新启动。
更改之前,界面如下所示:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:21:d1:84 brd ff:ff:ff:ff:ff:ff
inet 172.20.203.174/24 brd 172.20.203.255 scope global noprefixroute dynamic enx52540021d184
valid_lft 3588sec preferred_lft 3588sec
inet6 2001:db8:b0b9:0:3962::a1be/128 scope global noprefixroute dynamic
valid_lft 3591sec preferred_lft 3591sec
inet6 fe80::5054:ff:fe21:d184/64 scope link noprefixroute
valid_lft forever preferred_lft forever
修改后如下:
2: enx52540021d184: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:21:d1:84 brd ff:ff:ff:ff:ff:ff
inet 172.20.203.174/24 brd 172.20.203.255 scope global noprefixroute dynamic enx52540021d184
valid_lft 3588sec preferred_lft 3588sec
inet6 2001:db8:b0b9:0:3962::a1be/128 scope global noprefixroute dynamic
valid_lft 3591sec preferred_lft 3591sec
inet6 fe80::5054:ff:fe21:d184/64 scope link noprefixroute
valid_lft forever preferred_lft forever
请记住,使用此命名方案,如果您必须更换 NIC,则需要手动干预来重新配置网络。
答案3
您还可以通过创建文件 /etc/udev/rules.d/70-persistent-net.rules 来设置任意设备名称,该文件包含每个接口与 MAC 地址的映射。例如:
# eth at pci address: 00:03.0
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ad:33:02" ATTR{type}=="1", NAME="enp0"
# eth at pci address: 00:03.1
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ad:33:03" ATTR{type}=="1", NAME="enp1"
创建后,您需要 - 重新启动以应用更改。 - 更改网络配置(例如 /etc/sysconfig/network-scripts/ifcfg 和路由文件,或使用 NetworkManager(如果处于活动状态))。