1、背景
在使用带 NetworkManager 的 Linux(Ubuntu22.04、Rocky、CentOS 等)时,有两个配套网络工具:nmcli 和 nmtui。
很多人会纠结二选一。我的使用思路:
日常查看、快速校验、简单操作:用 nmcli(命令行)
复杂多字段网络配置、静态 IP、多路由、多 DNS:交给 nmtui(文本 UI)
不用死记一大堆 nmcli 长参数。查看状态、启停连接这种简单操作直接敲 nmcli;遇到配置项多、容易写错参数的场景,打开 nmtui 可视化填写,减少手敲命令出错。
前提:系统开启 NetworkManager
# 查看服务状态
systemctl status NetworkManager
# 开机自启并立刻启动
systemctl enable --now NetworkManager
重要提醒:这两个工具只对 NetworkManager 托管的网卡生效 。
如果网卡状态是
unmanaged,NM 不会接管,两个工具都无法修改网卡配置。
2、nmcli:命令行,用来做「简单查看 + 轻量操作」
适合 SSH 远程,输出可以管道过滤,方便快速排查网络状态,适合简单指令。
# 1. 网络总览,快速看网卡、IP、连接状态(排错第一条)
nmcli
# 2. 查看所有物理网卡设备状态
nmcli device status
# 3. 查看保存过的所有网络连接配置
nmcli connection show
# 4. 启用/断开连接
nmcli connection up "连接名"
nmcli connection down "连接名"
# 5. 查看网卡完整信息:IP、网关、DNS、MAC
nmcli device show ens33
# 6. 无线网卡扫描WiFi
nmcli device wifi list
适用场景:
- 快速确认网卡是否在线、有没有拿到 IP
- 启停网络连接
- 查看当前 DNS、网关信息
- 脚本 / 自动化巡检
缺点:
静态 IP、附加路由、多个 DNS、802.1x 这类复杂配置,nmcli 命令参数很长,很容易少打斜杠、逗号,配置出错。这类场景就不要硬写 nmcli 命令了,直接切 nmtui。
3、nmtui:文本交互式界面,专门处理「复杂配置」
终端输入即可启动,SSH 远程也能用,TUI 菜单可视化填表。
nmtui
3.1、什么时候用 nmtui?
- 设置静态 IPv4,同时配置多条静态路由、多个 DNS 服务器
- 有线 + 多网卡,需要分开配置不同网关
- WiFi 连接、配置无线安全
- 802.1x、VPN 等复杂网络配置
- 记不住 nmcli 一大串参数,避免手敲命令拼写错误
操作流程示例:
- 执行
nmtui,选择Edit a connection - 选中要修改的网卡,回车进入编辑页面
- IPv4 配置从
Automatic(DHCP)切换为Manual - 图形化表单填写 IP / 掩码、网关、DNS,还可以添加额外路由
- 保存退出,回到主界面,
Activate a connection重新激活连接生效
nmtui 本质也是调用 NetworkManager,保存的配置文件和 nmcli 完全一致。两者修改的是同一套配置,可以互相配合使用,互不冲突。
4、我的工作流:nmcli + nmtui 搭配使用
一套固定工作流程,非常适合服务器 / 嵌入式 Linux 调试:
- 先用
nmcli快速查看当前网络状态,确认网卡名称、当前连接、IP,判断基础链路是否正常。 - 如果只需要查看、重启网络,全程 nmcli 搞定。
- 如果需要新增 / 修改静态 IP、多路由、复杂 DNS ,直接执行
nmtui,可视化填写配置,保存。 - 配置完成后,切回 nmcli,执行
nmcli/nmcli device show xxx,验证配置是否成功写入。
5、nmcli 和 nmtui 的对比
| 项目 | nmcli | nmtui |
|---|---|---|
| 形式 | CLI 纯命令 | TUI 文本图形界面 |
| 适合场景 | 查看状态、启停连接、简单操作、脚本 | 静态 IP、多路由等复杂网络配置 |
| 记忆成本 | 需要记忆命令 | 菜单填表,几乎不用记参数 |
| 自动化 | ✅ 支持 shell 脚本 | ❌ 无法脚本化 |
| 输出 | 支持 grep 过滤 | 交互式界面,不能管道处理 |
6、常见踩坑
- nmtui 修改完配置,必须重新 Activate 激活连接,否则新配置不生效。
- 网卡显示
unmanaged:NetworkManager 不接管,nmcli 和 nmtui 都无法修改。需要修改NetworkManager.conf配置后重启服务。 - 不要同时启用
systemd-networkd和NetworkManager,两者会冲突。 - 手动修改
/etc/resolv.conf会被 NetworkManager 覆盖,DNS 统一在 nmcli/nmtui 内配置。