Linux

CentOS 7如何通過macaddress獲取介面名稱?

  • September 5, 2019

我試圖弄清楚如何獲取網路介面名稱然後更改名稱。現在很容易用這個例子來改變名字:

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}'

我會用一個小腳本來做到這一點,該腳本首先將介面的名稱放入一個變數中,然後使用它來設置新名稱

#!/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; }

您可以使用一致的網路設備命名創建基於 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,則需要手動干預來重新配置網路。

引用自:https://serverfault.com/questions/981952