任意修改CentOS下网卡的显示名称和设备名称
需求:将当前显示的网卡名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