在CentOS 7上改网卡IP,很多人还停留在老套路:vim /etc/sysconfig/network-scripts/ifcfg-eth0,改完再service network restart。到了CentOS 8/9、Rocky Linux、Ubuntu Server 18.04往后,这套流程经常直接卡住——network服务没了,真正的网络管家是NetworkManager。而NetworkManager的命令行入口,就是nmcli。这篇博文不打算把man手册翻译一遍,而是从运维和项目实战的角度,把nmcli最常用的连接管理、设备查看、配置持久化、排障和bond/vlan等高阶场景一一拆开,解释每个命令为什么这么写、踩过什么坑。适合刚接触Linux网络管理的初学者,也适合那些还在用ifcfg文件配网卡、想彻底切换到nmcli的老手。
1. 先搞清楚nmcli管理的对象:连接、设备和NetworkManager
1.1 NetworkManager是什么,为什么现在的发行版都默认用它
NetworkManager不是一句简单的命令行工具,它本身是一个常驻后台的系统守护进程。以前Linux管理员习惯直接改ifcfg文件再重启network服务,靠的是一堆静态脚本;而NetworkManager是事件驱动的,它会做设备插拔检测、WiFi信号扫描、网络自动切换这些事,然后把网络状态以“连接”为单位统一管理。很多服务器管理员觉得NM多余,但它在多网卡、动态网络、桌面和虚拟化场景下其实比手工脚本稳定得多,这也是各大发行版默认启用它的原因。
在RHEL 7时代,network.service和NetworkManager还能共存,很多脚本还在兼容老写法;到了RHEL 8/9,network-scripts被直接移除,/etc/sysconfig/network-scripts/ifcfg-*只剩下一堆遗留注释文件,真正生效的网络配置全部由NetworkManager接管。这时候如果你还不会用nmcli,等于在服务器上少了一条胳膊。nmcli就是NetworkManager的命令行前端,它把所有网络管理功能都封装成了结构化命令,想查网卡、改IP、配bond,都用同一套语法完成。
1.2 connection(连接)和device(设备)到底是不是一回事
这是新手最容易蒙的地方。设备(device)是看得见摸得着的物理网卡,比如ens33、ens34、eth0;连接(connection)是“一张网卡上保存的一套网络配置”,包括IP、网关、DNS、是否DHCP、是否自动连接这些参数。可以拿手机理解:设备是手机本身,连接是SIM卡套餐。手机可以存多张SIM卡的信息,但同一时间只能有一张卡在提供通话流量;网卡也一样,可以配置多个连接,但同一时刻只会激活其中一个。
比如一张网卡ens33上,你可以建一个company连接用静态IP访问办公网,再建一个home连接用DHCP自动获取地址。到了公司执行nmcli connection up company,回家执行nmcli connection up home。两个连接共用同一张物理网卡,但遵循完全不同的配置。很多人在这一步没绕过来,后面看nmcli connection show的输出就特别容易迷茫。
1.3 热搜问题的正面回答:nmcli connection 到底能不能查看网卡
有个热搜问题叫“nmcli connection 是否能够查看下网卡”,这里直接给出答案:nmcli connection show列出的是系统里所有连接配置文件,不是物理网卡列表。它输出的NAME、UUID、TYPE、DEVICE四列中,TYPE表示连接类型,DEVICE列显示这个连接绑定在哪张网卡上,所以它能间接反映网卡与连接的对应关系;但如果你想看“当前有几张物理网卡、每张网的链路状态”,应该用nmcli device status。
bash复制# 查看连接配置,注意DEVICE列不等于网卡列表
nmcli connection show
NAME UUID TYPE DEVICE
company xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens33
home xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens33
virbr0 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx bridge virbr0
# 查看物理网卡及托管状态
nmcli device status
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected company
ens34 ethernet disconnected --
看到区别了吗?connection show回答的是“系统里有哪些配置方案”,device status回答的是“物理上有哪些网卡、现在什么状态”。实际排查问题时,两条命令通常要配合使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 查看类命令:从device status到connection show的实操对照
2.1 查看类命令的分工表
nmcli的查看命令最常用的是下面这组,我平时排查网络问题基本就靠它们。每个命令的侧重点不一样,选对了能省一半时间。
| 命令 | 用途 | 典型场景 |
|---|---|---|
| nmcli general status | 查看NetworkManager整体运行状态和主机名 | 判断NM是否正常运行 |
| nmcli device status | 列出所有网卡及状态 | 看服务器有几张网卡、是否被托管 |
| nmcli device show [网卡名] | 查看指定网卡的详细配置 | 查IP、网关、DNS、MAC、链路速率 |
| nmcli connection |
