在CentOS等现代Linux发行版中,网络管理已经从传统的脚本化配置逐步转向了以NetworkManager为核心的动态管理模式,在这一体系下,为每个网络连接配置分配一个独一无二的通用唯一标识符(UUID)变得至关重要,UUID确保了即使在物理设备(如网卡)名称发生变化,或者系统中存在多个相似的配置时,系统依然能够准确无误地应用指定的网络策略,掌握如何读取网卡的UUID,是进行网络故障排查、脚本自动化和高级配置的基础技能。

使用 nmcli 命令行工具
nmcli(NetworkManager Command-Line Interface)是与NetworkManager交互的首选工具,它功能强大且易于使用,无论是用于即时查询还是编写脚本都非常方便。
要列出系统中所有网络连接的配置及其对应的UUID,可以直接在终端中执行以下命令:
nmcli connection show
或者使用其简写形式:
nmcli con show
执行后,你会看到一个类似下面的表格输出:
NAME UUID TYPE DEVICE
有线连接 1 5a062d3a-6d2a-4f8e-b8c1-1e3b9c8d7a6f ethernet ens33
Wired connection 2 b1c2d3e4-f5a6-b7c8-d9e0-f1a2b3c4d5e6 ethernet --
在这个输出中,NAME列是网络配置的名称,UUID列就是我们需要的唯一标识符,TYPE列是连接类型(如ethernet),而DEVICE列则显示该配置当前激活的物理设备,如果一个配置未被激活,其DEVICE列会显示为。
如果你只想获取特定连接的UUID,可以使用-f参数来指定需要显示的字段,从而过滤掉无关信息:
nmcli -f connection.uuid connection show "有线连接 1"
输出将非常简洁:

connection.uuid: 5a062d3a-6d2a-4f8e-b8c1-1e3b9c8d7a6f
直接查看网络配置文件
对于习惯直接与文件系统打交道的用户来说,检查网络配置文件是最直接、最可靠的方法,在CentOS 7及之后的版本中,NetworkManager将网络配置文件存储在/etc/sysconfig/network-scripts/目录下,每个网络连接的配置文件通常以ifcfg-开头,后面跟着连接名称或设备名称。
要查看名为ens33的网卡配置,可以打开对应的文件:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
可能如下所示:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=有线连接 1 UUID=5a062d3a-6d2a-4f8e-b8c1-1e3b9c8d7a6f DEVICE=ens33 ONBOOT=yes
中,你可以清晰地看到UUID=5a062d3a-6d2a-4f8e-b8c1-1e3b9c8d7a6f这一行,这种方法不仅让你看到了UUID,还能一览该连接的所有其他配置参数,非常适合进行深入的故障排查。
通过 nmcli dev show 查询设备信息
你可能知道物理网卡的设备名(如ens33),但不确定它关联的是哪个连接配置,这时,nmcli device show命令就派上用场了,它可以显示指定网络设备的详细信息,包括其当前激活的连接配置。
使用以下命令查询设备ens33的信息:
nmcli device show ens33
该命令会输出大量关于设备的详细信息,我们关心的部分通常在GENERAL区域,为了便于阅读,这里用表格形式展示关键信息片段:

| 参数 | 值 | 描述 |
|---|---|---|
| GENERAL.DEVICE | ens33 | 物理设备名称 |
| GENERAL.TYPE | ethernet | 设备类型 |
| GENERAL.HWADDR | 00:0C:29:XX:XX:XX | MAC地址 |
| GENERAL.MTU | 1500 | 最大传输单元 |
| GENERAL.STATE | 100 (已连接) | 连接状态 |
| GENERAL.CONNECTION | 有线连接 1 | 当前激活的连接配置名称 |
| GENERAL.CON-PATH | /org/freedesktop/NetworkManager/ActiveConnection/1 | D-Bus路径 |
注意,nmcli device show的输出中通常不直接显示UUID,但它会显示GENERAL.CONNECTION,即关联的连接名称,有了这个名称,你就可以再使用方法一中的nmcli connection show "连接名称"来精确获取其UUID了。
不同方法的对比与选择
为了更直观地理解这几种方法的优劣,下表对它们进行了小编总结:
| 方法 | 易用性 | 依赖工具 | 信息详尽度 | 适用场景 |
|---|---|---|---|---|
nmcli con show |
高 | NetworkManager | 中 | 快速查询所有连接UUID,脚本化处理 |
| 查看配置文件 | 中 | 无(仅需文本阅读器) | 高 | 深入排查配置问题,手动修改配置 |
nmcli device show |
高 | NetworkManager | 高 | 通过设备名反查连接信息,诊断设备状态 |
nmcli是现代CentOS系统中最推荐的方式,它提供了与NetworkManager最直接、最全面的交互能力,直接查看配置文件则是一种经典且可靠的备选方案,根据你的具体需求,灵活运用这些工具,将能极大地提升你在CentOS上管理网络的效率和准确性。
相关问答 (FAQs)
为什么我用 nmcli con show 看不到某个网卡的UUID,甚至它根本不在列表中?
解答: 这种情况通常意味着该网卡没有被NetworkManager管理,可能的原因有:1)该网络接口是通过传统的网络脚本(/etc/init.d/network)或旧版的ifcfg-*文件手动配置的,并且设置了NM_CONTROLLED=no;2)该接口可能是一个由其他虚拟化技术(如Docker、Libvirt)管理的虚拟接口,或者是一个网桥、绑定设备的从设备,要使其被NetworkManager管理,你可以编辑其ifcfg-*文件,确保NM_CONTROLLED=yes,然后重启网络服务或使用nmcli con reload重新加载配置,或者直接使用nmtui或nmcli创建一个新的连接配置。
UUID和MAC地址有什么根本区别?我能否用MAC地址替代UUID?
解答: UUID和MAC地址是两个完全不同层面的标识符,不能互相替代。MAC地址(Media Access Control Address)是物理层面的,它固化在网卡的硬件中,是全球唯一的硬件地址,用于在局域网中标识一个物理设备,而UUID(Universally Unique Identifier)是软件层面的,由NetworkManager在创建网络配置文件时生成,用于唯一标识一个“网络连接配置”,一块物理网卡(只有一个MAC地址)可以拥有多个不同的网络配置文件(一个用于DHCP自动获取IP,一个用于静态IP),每个配置文件都会有自己独立的UUID,MAC地址标识的是“硬件”,而UUID标识的是“配置策略”,在需要精确定位和应用特定网络策略的场景下,UUID比MAC地址更为灵活和准确。