hello world

任意修改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

 在这个文件中最关键的部分就是HWADDRNAME,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

 

posted @ 2020-04-14 10:57  浩天四哥  阅读(1833)  评论(0编辑  收藏  举报