需求:將當前顯示的網卡名ens33改名為Gi0(名字可以任意定義)
說明:在實現這個功能之前我在網上大量翻實現的辦法,但是都沒有成功,有帖子說通過修改/etc/grub2.cfg來實現,的確能實現,但是只能實現變成eth0,而不能想變什么就變什么。
-----------------------------前置知識----------------------------------
首選我們需要知道/etc/sysconfig/network-scripts/ifcfg-ens33與實際的網卡到底是怎樣關聯起來的,為了便於說明,我把NAME改成ens34,DEVICE改成ens33,以下圖示范他們之間的關系
HWADDR=00:0C:29:48:6C:83 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=192.168.200.11 PREFIX=24 GATEWAY=192.168.200.60 DNS1=114.114.114.114 DNS2=61.139.2.69 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=no IPV6_DEFROUTE=no IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens34
DEVICE=ens33 UUID=b85c1bc2-d3d2-3abb-a1e9-41eab250e4b3 ONBOOT=yes AUTOCONNECT_PRIORITY=-999
在這個文件中最關鍵的部分就是HWADDR,NAME,DEVICE,UUID,在命令行中顯示的對應關系如下
[root@localhost ~]# nmcli connectio show NAME UUID TYPE DEVICE ens34 b85c1bc2-d3d2-3abb-a1e9-41eab250e4b3 ethernet ens33
上面的NAME,UUID,DEVICE與之分別對應,修改首列的NAME其實很簡單,直接改文件,然后執行nmcli connection reload即可,但今天我們的目標是要修改DEVICE
[root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.200.11 netmask 255.255.255.0 broadcast 192.168.200.255 inet6 fe80::f36c:5321:6e29:a45a prefixlen 64 scopeid 0x20<link> ether 00:0c:29:48:6c:83 txqueuelen 1000 (Ethernet)
上面的ens33對應文件中的是DEVICE,他的MAC地址也在這里
[root@localhost ~]# nmcli device show ens33 GENERAL.DEVICE: ens33 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:48:6C:83
--------------------------------修改現在開始-------------------------
首先我們down掉ens33這個接口,然后把他的名字改成Gi0,操作需要在控制台上進行
#down掉我們要操作的接口ens33 ip link set dev ens33 down #把ens33接口名直接改成Gi0 ip link set dev ens33 name Gi0 #編輯配置文件,修改DEVICE名稱為Gi0 vi /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICE=Gi0 #將新接口up起來 ip link set dev Gi0 up #重新加載連接 nmcli connection reload
以上操作完成后,接口名就成功修改了,我們來看看
[root@localhost ~]# ifconfig Gi0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.200.11 netmask 255.255.255.0 broadcast 192.168.200.255 inet6 fe80::33c8:40ae:d9e5:2854 prefixlen 64 scopeid 0x20<link> [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens34 b85c1bc2-d3d2-3abb-a1e9-41eab250e4b3 ethernet Gi0 [root@localhost ~]# nmcli device show Gi0 GENERAL.DEVICE: Gi0 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:48:6C:83
但我們看到nmcli connection show 中的NAME是ens34,現在我要把這個ens34也改成Gi0
[root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens34 b85c1bc2-d3d2-3abb-a1e9-41eab250e4b3 ethernet Gi0 [root@localhost ~]# nmcli connection modify ens34 connection.id Gi0 [root@localhost ~]# nmcli connection reload [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE Gi0 b85c1bc2-d3d2-3abb-a1e9-41eab250e4b3 ethernet Gi0
這樣就完成了修改上面修改NAME的時候沒有像開始直接修改配置文件,而是用命令來修改的,主要是介紹2種不同的修改辦法,如果想通過命令的方式修改配置文件的各項參數,你可以執行命令來看看可以修改哪些,名字是什么
連接屬性查看命令:nmcli connection show Gi0 他會顯示很多的Key=value
直接寫個shell腳本,將Gi0改成eth8,這個可以不用在控制台進行,在ssh上執行。網絡不會中斷。
#!/bin/bash # ip link set dev Gi0 down ip link set dev Gi0 name eth8 nmcli connection modify Gi0 connection.id eth8 ip link set eth8 up nmcli connection reload
現在我來個總結的,再更新一下腳本,可以通過傳參數進去改
#!/bin/bash # if [ $# != 2 ]; then echo "Usage:$(basename $0) current-connection-name destination-connection-name" exit 1 fi NicList=$(ip link show | grep '^[1-9]' | awk -F: '{print $2}') if [[ ! $NicList =~ $1 ]];then echo "Device Name $1 not found!" exit 1 fi ip link set dev $1 down ip link set dev $1 name $2 nmcli connection modify $1 connection.id $2 ip link set $2 up nmcli connection reload