本文介绍了 nmcli (Network Manager Command Line Interface) 网络管理工具,它是 NetworkManager 的命令行工具,用于在 Linux 系统上管理网络连接。nmcli 允许用户通过命令行界面管理和配置网络连接,包括无线网络、以太网、VPN 等。本文详细介绍了 nmcli 的安装方法和各种命令,包括选项、通用命令、网络控制命令、设备管理命令、连接管理命令、无线传输控制命令和活动监视器。此外,本文还提供了 nmcli 的示例,供用户参考。nmcli 是一个功能强大且灵活的工具,常用于服务器管理和命令行环境下的网络配置。
nmcli 网络管理工具
nmcli 简介
https://networkmanager.dev/
nmcli (Network Manager Command Line Interface) 是 NetworkManager 的命令行工具。NetworkManager 是一个在 Linux 系统上管理网络连接的守护进程。nmcli 允许用户通过命令行界面管理和配置网络连接,包括无线网络、以太网、VPN 等。使用 nmcli,您可以列出可用的网络连接、连接到特定的网络、配置网络设置、查看网络状态等。它是一个功能强大且灵活的工具,常用于服务器管理和命令行环境下的网络配置。
NetworkManager 是 2004 年 RedHat 启动的项目,皆在能够让 Linux 用户更轻松的处理现代网络需求,尤其是无线网络,能够自动发现网卡并配置 IP 地址。
RHEL7 上同时支持 network.service 和 NetworkManager.service(简称 NM)。默认情况下这两个服务都有开启,但是因为 NetworkManager.service 当时的兼容性不好,有时会造成 IP 地址无法生效或网络不通问题,大部分人都会将其关闭 NM。
但是在 RHEL 8/CentOS 8上已废弃 network.service(默认不安装),只能通过 NetworkManager 进行网络配置。
NetworkManager 主要管理两个对象:Connection(网卡连接配置) 和 Device(网卡设备)。
在 RHEL 8/CentOS 8有三种方法配置网络:
通过 nmcli connection add
命令配置,会自动生成 ifcfg 文件;
手动配置 ifcfg 文件,通过 nmcli connection reload
来加载生效;
手动配置 ifcfg 文件,通过传统 network.service 来加载生效;
nmcli 安装
nmcli 实用工具是由 NetworkManager 包提供,有关详情,请参阅 NetworkManager(8)。
1 [root@localhost ~]# man 8 NetworkManager
在 CentOS 7 / CentOS 8 中,默认已安装:
1 2 3 4 5 6 7 8 [root@localhost ~]# cat /etc/redhat-release Rocky Linux release 8.6 (Green Obsidian) [root@localhost ~]# yum install -y NetworkManager Last metadata expiration check: 0:03:25 ago on Sun 30 Jul 2023 06:28:20 AM CST. Package NetworkManager-1:1.36.0-4.el8.x86_64 is already installed. ... [root@localhost ~]# nmcli --version nmcli tool, version 1.40.16-3.el8_8
nmcli 命令
https://networkmanager.dev/docs/api/latest/nmcli.html
1 2 [root@localhost ~]# nmcli agent connection device general help monitor networking radio
nmcli 有 8 个子命令,这里重点介绍 device、 connection。
选项(Options)
-f | --fields { field1,field2... | all | common }
该选项用于指定应打印哪些字段(列名)。特定命令的有效字段名称有所不同。通过向 --fields
选项提供无效值来列出可用字段。all 用于打印命令的所有有效字段值。common 用于打印命令的公共字段值。
如果省略,则默认为 common。
-g | --get-values { field1,field2... | all | common }
此选项用于打印特定字段中的值。它基本上是 --mode tabular --terse --fields
的快捷方式,是检索特定字段值的便捷方法。每行打印一个值,不带标题。
如果指定了节(section)而不是字段,则将打印节名称,后跟属于该节的字段的冒号分隔值,所有这些都在同一行上。
-m | --mode { tabular | multiline }
在表格和多行输出之间切换:
tabular:输出是一个表,其中每行描述一个条目。列定义条目的特定属性。
multiline:每个条目由多行组成,每个属性独占一行。这些值以属性名称为前缀。
如果省略,则大多数命令的默认值是 tabular 形式。 对于产生更多结构化信息的命令,无法在单行上显示,默认为 multiline。 目前,它们是:
nmcli connection show ID
nmcli device show
-p | --pretty
美化输出。这使得 nmcli 产生人类易于阅读的输出,即值对齐、打印标题等。
-t | --terse
简洁输出。该模式是为计算机(脚本)处理而设计的。
-w | --wait seconds
此选项设置 nmcli 将等待 NetworkManager 完成操作的超时时间。它对于可能需要较长时间才能完成的命令特别有用,例如 连接激活。
指定值 0 指示 nmcli 不等待而是立即退出并显示成功状态。默认值取决于执行的命令。
通用命令(General Commands)
1 nmcli general { status | hostname | permissions | logging | reload } [ARGUMENTS...]
使用此命令显示 NetworkManager 状态和权限。 您还可以获取和更改系统主机名以及 NetworkManager 日志记录级别和域。
status
显示 NetworkManager 的整体状态。当没有为 nmcli 常规提供其他命令时,这是默认操作。
1 2 3 [root@localhost ~]# nmcli general status STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full missing enabled missing enabled
hostname
hostname [hostname]
获取和更改系统主机名。如果没有参数,这将打印当前配置的主机名。当您传递主机名时,它将被移交给 NetworkManager 以设置为新的系统主机名。
Note that the term "system" hostname may also be referred to as "persistent" or "static" by other programs or tools. The hostname is stored in /etc/hostname
file in most distributions. For example, systemd-hostnamed service uses the term "static" hostname and it only reads the /etc/hostname
file when it starts.
1 2 3 4 5 6 7 # 查看主机名 [root@localhost ~]# nmcli general hostname localhost.localdomain # 修改主机名 [root@localhost ~]# nmcli general hostname rocky [root@localhost ~]# nmcli general hostname rocky
permissions
显示调用者(当前用户)对 NetworkManager 提供的各种经过身份验证的操作拥有的权限,例如启用和禁用网络、更改 Wi-Fi 和 WWAN 状态、修改连接等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@localhost ~]# nmcli general permissions PERMISSION VALUE org.freedesktop.NetworkManager.checkpoint-rollback yes org.freedesktop.NetworkManager.enable-disable-connectivity-check yes org.freedesktop.NetworkManager.enable-disable-network yes org.freedesktop.NetworkManager.enable-disable-statistics yes org.freedesktop.NetworkManager.enable-disable-wifi yes org.freedesktop.NetworkManager.enable-disable-wimax yes org.freedesktop.NetworkManager.enable-disable-wwan yes org.freedesktop.NetworkManager.network-control yes org.freedesktop.NetworkManager.reload yes org.freedesktop.NetworkManager.settings.modify.global-dns yes org.freedesktop.NetworkManager.settings.modify.hostname yes org.freedesktop.NetworkManager.settings.modify.own yes org.freedesktop.NetworkManager.settings.modify.system yes org.freedesktop.NetworkManager.sleep-wake yes org.freedesktop.NetworkManager.wifi.scan yes org.freedesktop.NetworkManager.wifi.share.open yes org.freedesktop.NetworkManager.wifi.share.protected yes
logging
logging [level level] [domains domains...]
获取和更改 NetworkManager 日志记录级别和域。如果没有任何参数,则会显示当前日志记录级别和域。为了更改日志记录状态,请提供 level
和/或 domain
参数。有关可用 level 和 domain 值,请参阅 NetworkManager.conf(5) 。
1 2 3 [root@localhost ~]# nmcli general logging LEVEL DOMAINS INFO PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY
reload
reload [flags...]
重新加载 NetworkManager 的配置并执行某些更新,例如刷新缓存或将外部状态重写到磁盘。这类似于向 NetworkManager 发送 SIGHUP,但它允许通过 flags
参数对重新加载的内容进行更细粒度的控制。它还允许通过 PolicyKit 进行非 root 访问,并且与信号相反,它是同步的。可用的 flags
有:
conf
:从磁盘重新加载 NetworkManager.conf 配置。请注意,这不包括连接,可以通过 nmcli connection reload 来重新加载连接。
dns-rc
:更新 DNS 配置,这通常涉及重新编写 /etc/resolv.conf。这相当于向 NetworkManager 进程发送 SIGUSR1 信号。
dns-full
:重新启动 DNS 插件。例如,当使用 dnsmasq 插件时,这非常有用,该插件使用 /etc/NetworkManager/dnsmasq.d 中的附加配置。如果编辑这些文件,则可以重新启动 DNS 插件。此操作会很快中断名称解析。
如果没有指定 flags
,所有支持的内容都会重新加载,这与发送 SIGHUP 相同。 有关信号的更多详细信息,请参阅 NetworkManager(8)。
1 [root@localhost ~]# nmcli general reload conf
网络控制命令(Networking Control Commands)
查询 NetworkManager 网络状态,启用和禁用网络。
on, off
通过 NetworkManager 启用或禁用网络控制。当网络被禁用时,由 NetworkManager 管理的所有接口都将被停用。
禁用网络控制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet connected ens34 lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 84377dc9-3ec0-4573-925e-d3678801da6d ethernet ens34 [root@localhost ~]# nmcli networking connectivity check full [root@localhost ~]# nmcli networking off [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet -- ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet -- ens34 84377dc9-3ec0-4573-925e-d3678801da6d ethernet -- [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet unmanaged -- ens33 ethernet unmanaged -- ens34 ethernet unmanaged -- lo loopback unmanaged --
启用网络控制:
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~]# nmcli networking on [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 84377dc9-3ec0-4573-925e-d3678801da6d ethernet ens34 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet connected ens34 lo loopback unmanaged --
connectivity
connectivity [check]
获取网络连接状态。可选的 check
参数告诉 NetworkManager 重新检查连接,否则将显示最新的已知连接状态而不重新检查。
可能的状态有:
none
:主机未连接到任何网络。
portal
:主机位于强制门户后面,无法访问完整的互联网。
limited
:主机已连接到网络,但无法访问 Internet。
full
:主机已连接到网络并具有对 Internet 的完全访问权限。
unknown
:无法查到连接状态。
1 2 3 4 [root@localhost ~]# nmcli networking connectivity full [root@localhost ~]# nmcli networking connectivity check full
设备管理命令(Device Management Commands)
显示和管理网络接口。
nmcli device
按 tab 两下可以获取 device 后面的参数:
1 2 3 [root@localhost ~]# nmcli device checkpoint delete down lldp monitor set status wifi connect disconnect help modify reapply show up
网卡属于物理硬件,NetworkManager 属于软件层面,如何通过软件层面给网卡绑定 IP 地址等信息?中间有一个核心:kernel。Linux 应用层 app 通过 kernel 来驱使底层物理硬件运行,同时必须要明确一点:软件应用没办法改变物理底层信息。
例如我们给 eth0 配置 IP 地址为 192.168.1.1。实质上并不是用刀在 eth0 网卡上刻上 192.168.1.1,实际上是 kernel 获取 eth0 网卡总线,同时将该总线命名(方便人为区分),然后 NetworkManager 告诉 kernel 00:00.0(假设 eth0)的 IP 地址是 192.168.1.1/24,那么以后访问 192.168.1.1 就是在访问 00:00.0,kernel 在中间做了一次转换或者说是绑定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@localhost ~]# lshw -class net -businfo Bus info Device Class Description ==================================================== pci@0000:02:00.0 ens32 network 82545EM Gigabit Ethernet Controller (Copper) pci@0000:02:01.0 ens33 network 82545EM Gigabit Ethernet Controller (Copper) pci@0000:02:02.0 ens34 network 82545EM Gigabit Ethernet Controller (Copper) [root@localhost ~]# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) 00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08) 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10) ...
00:00.0 就是总线。
status
打印设备状态。如果未向 nmcli device
指定子命令,则这是默认操作。
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~]# nmcli device DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged --
DEVICE:表示网卡的名称(kernel 获取的标识)
TYPE:表示网卡的类型
STATE:表示网卡与配置文件的连接状态
connected:表示 NetworkManager 接管
disconnected:表示使用 NetworkManager 管理
unmanaged:表示不使用 NetworkManager 管理
CONNECTION:网卡对应的 connection 配置文件名称
connection 配置文件名可以通过 "nmcli connection modify uuid xxxxxxxxx con-name xxx" 来修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 # 修改 connection 配置文件名 # [root@localhost ~] [root@localhost ~]# nmcli connection modify uuid e1af3066-1f0e-44a5-a4a3-c0174cf77a7b con-name eth0 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE eth0 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected eth0 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged --
这里演示的就是将网卡 ens32 的配置文件由 nmcli device status
看到的 "ens32" 名称修改成 "eth0"(网卡的配置文件通过 nmcli connection
来修改的)。
nmcli connection show
可以看到各个配置文件对应的唯一识别 uuid,nmcli connection show
输出中 NAME 是配置文件名,后面的 DEVICE 是配置文件对应的网卡名称,配置文件名 NAME 是可以修改的,而 DEVICE 是 kernel 标识的,但是也可以通过其他手段来修改。
show
show [ifname]
(1)若不加任何参数,则会显示所有的网卡的信息。
1 2 3 4 5 6 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged --
(2)若加上 DEVICE 名称,则显示 DEVICE 对应网卡的所有信息。
1 2 3 4 5 6 7 8 9 10 11 [root@localhost ~]# nmcli device show ens34 GENERAL.DEVICE: ens34 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:66:3F:D9 GENERAL.MTU: 1500 GENERAL.STATE: 30 (disconnected) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- WIRED-PROPERTIES.CARRIER: on IP4.GATEWAY: -- IP6.GATEWAY: --
因为网卡 ens34 没有关联 connection,所以显示的信息相对少。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@localhost ~]# nmcli device show ens32 GENERAL.DEVICE: ens32 GENERAL.TYPE: ethernet GENERAL.HWADDR: 00:0C:29:66:3F:C5 GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: ens32 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/4 WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.0.25/24 IP4.GATEWAY: 192.168.0.1 IP4.ROUTE[1]: dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 100 IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 100 IP4.DNS[1]: 114.114.114.114 IP4.DNS[2]: 8.8.8.8 IP6.ADDRESS[1]: fe80::20c:29ff:fe66:3fc5/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024
因为网卡 ens32 关联了 connection 配置文件,可以看到 DEVICE 网卡名 ens32,TYPE 使用的网络类型为 ethernet, HWADDR 硬件地址 00:0C:29:66:3F:C5,还有 MTU、STATE(连接状态,connected)、CONNECTION ens32,这与 nmcli device status 看到的基本一致,接下来的 IP4.ADDRESS、IP4.GATEWAY 等等都是写到配置文件中的内容。
delete
delete ifname...
删除设备。该命令从系统中删除该接口。需要注意的是这仅适用于软件设备(如网桥、虚拟网卡),物理网卡等硬件设备是无法通过该命令删除的,不可能说 nmcli device delete ens32
就会物理地将网卡在计算机上拿走了。
1 2 3 4 # 尝试删除硬件设备 [root@localhost ~]# nmcli device delete ens32 Error: Device 'ens32' (/org/freedesktop/NetworkManager/Devices/2) deletion failed: This device is not a software device or is not realized Error: not all devices deleted.
disconnect
disconnect ifname...
down 命令的别名。1.34.0 版本之前不支持。
断开网卡与 connection 配置文件之间的关联。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli device disconnect ens33 Device 'ens33' successfully disconnected. [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet disconnected -- ens34 ethernet disconnected -- lo loopback unmanaged --
connect
将网卡与 connection 配置文件之间关联起来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet disconnected -- ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli device connect ens33 Device 'ens33' successfully activated with '51b34523-8ea7-48f2-84c0-11d3f9aa828f'. [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged --
monitor
监控设备活动。每当指定设备更改状态时,此命令都会打印一行。
在未指定接口的情况下将监视所有设备。当所有指定的设备消失时,监视器终止。如果要监视添加的设备,请考虑使用带有 nmcli monitor
命令的全局监视器。
1 [root@localhost ~]# nmcli device monitor ens32
连接管理命令(Connection Management Commands)
NetworkManager 将所有网络配置存储为 "connections",它们是描述如何创建或连接到网络的数据集合(第 2 层详细信息、IP 寻址等)。当设备使用该连接的配置来创建或连接到网络时,该连接处于 "active" 状态。一个设备可能有多个连接,但在任何给定时间,该设备上只能有一个处于活动状态。其余连接可用于允许在不同网络和配置之间快速切换。
考虑一台通常连接到启用 DHCP 的网络,但有时连接到使用静态 IP 寻址的测试网络的计算机。 无需在每次网络更改时手动重新配置 eth0,这些设置可以保存为两个都适用于 eth0 的连接,一个用于 DHCP(称为 default),另一个具有静态寻址详细信息(称为 testing)。 当连接到启用 DHCP 的网络时,用户将运行 nmcli con up default ,而当连接到静态网络时,用户将运行 nmcli con up testing 。
1 2 3 [root@localhost ~]# nmcli connection add delete edit help load modify reload up clone down export import migrate monitor show
nmcli connection 主要用来处理 connection 配置文件信息。
The connection is identified by its name, UUID or D-Bus path. If ID
is ambiguous, a keyword id
, uuid
, path
or apath
can be used.
id
, uuid
, path
and apath
keywords can be used if ID
is ambiguous. Optional ID
-specifying keywords are:
uuid
the ID
denotes a connection UUID.
path
the ID
denotes a D-Bus static connection path in the format of /org/freedesktop/NetworkManager/Settings/num
or just num
.
apath
the ID
denotes a D-Bus active connection path in the format of /org/freedesktop/NetworkManager/ActiveConnection/num
or just num
.
show
show 有两种用法,分别是:
(1)列出活动的连接,或进行排序(+-
为升降序)
show [--active] [ --order [+-]category:... ]
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli connection show --order +active NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli connection show --order -name NAME UUID TYPE DEVICE ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32
NAME:配置文件的名称(可以重复)
UUID:唯一识别
TYPE:网络类型
DEVICE:网卡名称(这里与 nmcli device
保持一致)
(2)查看指定连接的详细信息
show [--active] [ id | uuid | path | apath ] ID...
1 2 3 4 [root@localhost ~]# nmcli connection show ens32 connection.id: ens32 connection.uuid: e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ...
add
add [save { yes | no }] { option value | [+|-]setting.property value } ...
添加 connection 配置文件(注意网卡只有一个 connection 配置文件是活动的,但是可以存在多个 connection 配置文件,可以通过connection.autoconnect-priority 设置 connection 配置文件的优先级)。
add 后面必须跟的三个参数:
con-name
:配置文件的名称
ifname
:网卡的名称
type
:网卡类型一般是 ethernet
add 还可以跟很多参数,比如:
ipv4.address
ipv4.gateway
ipv4.dns
ipv4.method
(设置自动连接还是手动连接 auto manual 等等)
connection.autoconnect
(开机是否自动连接)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli connection add con-name ens34 ifname ens34 type ethernet ipv4.address 192.168.0.27/24 ipv4.gateway 192.168.0.1 ipv4.dns 114.114.114.114,8.8.8.8 ipv4.method manual connection.autoconnect yes Connection 'ens34' (b713041f-bfb5-45ce-a8da-21ad02361e81) successfully added. [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 b713041f-bfb5-45ce-a8da-21ad02361e81 ethernet ens34 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet connected ens34 lo loopback unmanaged --
如果在 add 添加 connection 配置文件时没有指定 ipv4.method 则 Linux 会自动获取 IP 地址,即 DHCP。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@localhost ~]# ip address show ens34 4: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:66:3f:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.0.27/24 brd 192.168.0.255 scope global noprefixroute ens34 valid_lft forever preferred_lft forever inet6 fe80::2b44:f9e6:43f9:6c05/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# nmcli connection show ens34 | grep "ipv4." ipv4.method: manual ipv4.dns: 114.114.114.114,8.8.8.8 ipv4.dns-search: -- ipv4.dns-options: -- ipv4.dns-priority: 0 ipv4.addresses: 192.168.0.27/24 ipv4.gateway: 192.168.0.1 ...
delete
delete [ id | uuid | path ] ID...
删除 connection 配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet connected ens34 lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 b713041f-bfb5-45ce-a8da-21ad02361e81 ethernet ens34 # [root@localhost ~] [root@localhost ~]# nmcli connection delete ens34 Connection 'ens34' (b713041f-bfb5-45ce-a8da-21ad02361e81) successfully deleted. [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged --
down
down [ id | uuid | path | apath ] ID...
down 不同于 delete,delete 是将 connection 配置文件删除,而 down 是将 connection 配置文件与网卡的关联断开,与 nmcli device disconnect
效果相同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 [root@localhost ~]# nmcli connection down ens33 Connection 'ens33' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet -- [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet disconnected -- ens34 ethernet disconnected -- lo loopback unmanaged --
modify
modify [--temporary] [ id | uuid | path ] [ID] { option value | [+|-]setting.property value } ...
修改 connection 配置文件信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet -- [root@localhost ~]# nmcli connection add con-name ens34 ifname ens34 type ethernet ipv4.address 192.168.0.27/24 ipv4.gateway 192.168.0.1 ipv4.dns 114.114.114.114,8.8.8.8 ipv4.method manual connection.autoconnect yes Connection 'ens34' (a0af5eea-3e83-4c13-8104-42857958e050) successfully added. [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens34 a0af5eea-3e83-4c13-8104-42857958e050 ethernet ens34 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet -- [root@localhost ~]# ip address show ens34 4: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:66:3f:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.0.27/24 brd 192.168.0.255 scope global noprefixroute ens34 valid_lft forever preferred_lft forever inet6 fe80::1e7c:8628:7c62:c15b/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# nmcli connection modify ens34 ifname ens34 ipv4.address 192.168.0.28/24 [root@localhost ~]# ip address show ens34 4: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:66:3f:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.0.27/24 brd 192.168.0.255 scope global noprefixroute ens34 valid_lft forever preferred_lft forever inet6 fe80::1e7c:8628:7c62:c15b/64 scope link noprefixroute valid_lft forever preferred_lft forever
这里之所以没有变化是因为我们修改的是硬盘配置文件,加载在内存中 ens34 配置文件的地址还是 192.168.0.27,所以我们需要将修改后的硬盘配置文件 ens34 加载到内存中。
1 2 3 4 5 6 7 8 9 [root@localhost ~]# nmcli connection up ens34 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/12) [root@localhost ~]# ip address show ens34 4: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:66:3f:d9 brd ff:ff:ff:ff:ff:ff inet 192.168.0.28/24 brd 192.168.0.255 scope global noprefixroute ens34 valid_lft forever preferred_lft forever inet6 fe80::7505:8bb3:79c2:b265/64 scope link noprefixroute valid_lft forever preferred_lft forever
有时候 up 无法改变网卡地址,这时候我们需要 reload 重新连接启动,重新加载到内存中。
up
up [ id | uuid | path ] ID [ifname ifname] [ap BSSID] [passwd-file file]
激活 connection。将网卡与 connection 配置文件关联起来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens34 ethernet connected ens34 ens33 ethernet disconnected -- lo loopback unmanaged -- [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens34 a0af5eea-3e83-4c13-8104-42857958e050 ethernet ens34 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet -- [root@localhost ~]# nmcli connection up ens33 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10) [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 a0af5eea-3e83-4c13-8104-42857958e050 ethernet ens34 [root@localhost ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens32 ethernet connected ens32 ens33 ethernet connected ens33 ens34 ethernet connected ens34 lo loopback unmanaged --
clone
clone [--temporary] [ id | uuid | path ] ID new_name
克隆 connection 配置文件,除了连接名称和 uuid 是新生成的,其他都是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 a0af5eea-3e83-4c13-8104-42857958e050 ethernet ens34 [root@localhost ~]# nmcli connection clone ens34 ens35 ens34 (a0af5eea-3e83-4c13-8104-42857958e050) cloned as ens35 (0ff07cb2-a9a8-4d68-8ad8-46096657cb41). [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 51b34523-8ea7-48f2-84c0-11d3f9aa828f ethernet ens33 ens34 a0af5eea-3e83-4c13-8104-42857958e050 ethernet ens34 ens35 0ff07cb2-a9a8-4d68-8ad8-46096657cb41 ethernet --
load
load filename...
从磁盘加载/重新加载一个或多个 connection 配置文件。手动编辑连接文件后使用此命令可确保 NetworkManager 了解其最新状态。
1 2 3 4 5 6 7 8 9 10 [root@localhost ~]# ls /etc/sysconfig/network-scripts/ ifcfg-ens32 ifcfg-ens33 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 [root@localhost ~]# nmcli connection load /etc/sysconfig/network-scripts/ifcfg-ens33 [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE ens32 e1af3066-1f0e-44a5-a4a3-c0174cf77a7b ethernet ens32 ens33 84f8195b-1a23-44a7-b9a2-2a5a25fd777b ethernet --
无线传输控制命令(Radio Transmission Control Commands)
显示无线开关状态,或启用和禁用开关。
nmcli radio { all | wifi | wwan } [ARGUMENTS...]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost ~]# nmcli radio all WIFI-HW WIFI WWAN-HW WWAN missing enabled missing enabled [root@localhost ~]# nmcli radio all off [root@localhost ~]# nmcli radio all WIFI-HW WIFI WWAN-HW WWAN missing disabled missing disabled [root@localhost ~]# nmcli radio wifi on [root@localhost ~]# nmcli radio all WIFI-HW WIFI WWAN-HW WWAN missing enabled missing disabled [root@localhost ~]# nmcli radio wwan on [root@localhost ~]# nmcli radio all WIFI-HW WIFI WWAN-HW WWAN missing enabled missing enabled
活动监视器(Activity Monitor)
观察 NetworkManager 活动。 监视连接状态、设备或连接配置文件的变化。
另请参阅 nmcli connection monitor 和 nmcli device monitor 以监视某些设备或连接的变化。
退出状态码
nmcli 如果成功退出状态值为 0,如果发生错误则返回大于 0 的值。
0 : 成功-指示操作已成功
1 : 位置或指定的错误
2 : 无效的用户输入,错误的nmcli调用
3 : 超时了(请参阅 --wait 选项)
4 : 连接激活失败
5 : 连接停用失败
6 : 断开设备失败
7 : 连接删除失败
8 : 网络管理器没有运行
10 : 连接、设备或接入点不存在
65 : 当使用 --complete-args
选项,文件名应遵循。
nmcli 示例
本节介绍 nmcli 用法的各种示例。 如果您想要更多信息,请参阅 nmcli-examples(7) 手册页。
nmcli -t -f RUNNING general
告诉你 NetworkManager 是否正在运行。
nmcli -t -f STATE general
显示 NetworkManager 的整体状态。
nmcli radio wifi off
关闭 Wi-Fi。
nmcli connection show
列出 NetworkManager 拥有的所有连接。
nmcli -p -m multiline -f all con show
以多行模式显示所有已配置的连接。
nmcli connection show --active
列出所有当前活动的连接。
nmcli -f name,autoconnect c s
显示所有连接配置文件名称及其自动连接属性。
nmcli -p connection show "My default em1"
显示 "My default em1" 连接配置文件的详细信息。
nmcli --show-secrets connection show "My Home Wi-Fi"
显示 "My Home Wi-Fi" 连接配置文件的详细信息以及所有密码。 如果没有 --show-secrets
选项,则不会显示 secrets。
nmcli -f active connection show "My default em1"
显示 "My default em1" 活动连接的详细信息,例如 IP、DHCP 信息等。
nmcli -f profile con s "My wired connection"
显示名称为 "My wired connection" 的连接配置文件的静态配置详细信息。
nmcli -p con up "My wired connection" ifname eth0
激活接口 eth0 上名为 "My wired connection" 的连接配置文件。 -p
选项使 nmcli 显示激活进度。
nmcli con up 6b028a27-6dc9-4411-9886-e9ad1dd43761 ap 00:3A:98:7C:42:D3
将 UUID 6b028a27-6dc9-4411-9886-e9ad1dd43761 的 Wi-Fi 连接连接到 BSSID 00:3A:98:7C:42:D3 的 AP。
nmcli device status
显示所有设备的状态。
nmcli dev down em2
断开 em2 接口上的连接并将设备标记为不可自动连接。因此,在设备的 "autoconnect" 设置为 TRUE 或用户手动激活连接之前,设备上不会自动激活任何连接。
nmcli -f GENERAL,WIFI-PROPERTIES dev show wlan0
显示 wlan0 接口的详细信息;仅显示 GENERAL 和 WIFI-PROPERTIES 部分。
nmcli -f CONNECTIONS device show wlp3s0
显示 Wi-Fi 接口 wlp3s0 的所有可用连接配置文件。
nmcli dev wifi
列出 NetworkManager 已知的可用 Wi-Fi 接入点。
nmcli dev wifi con "Cafe Hotspot 1" password caffeine name "My cafe"
创建一个名为 "My cafe" 的新连接,然后使用密码 "caffeine" 将其连接到 "Cafe Hotspot 1" SSID。这主要在第一次连接到 "Cafe Hotspot 1" 时有用。下次,最好使用 nmcli con up id "My cafe" ,以便可以使用现有的连接配置文件,而不会创建额外的连接配置文件。
nmcli -s dev wifi hotspot con-name QuickHotspot
创建热点配置文件并连接它。打印用户从其他设备连接到热点时应使用的热点密码。
nmcli dev modify em1 ipv4.method shared
使用 em1 设备启动 IPv4 连接共享。共享将一直有效,直到设备断开连接。
nmcli dev modify em1 ipv6.address 2001:db8::a:bad:c0de
临时向设备添加 IP 地址。当再次激活同一连接时,该地址将被删除。
nmcli connection add type ethernet autoconnect no ifname eth0
以非交互方式添加与具有自动 IP 配置 (DHCP) 的 eth0 接口绑定的以太网连接,并禁用该连接的 "autoconnect" 标志。
nmcli c a ifname Maxipes-fik type vlan dev eth0 id 55
以非交互方式添加 ID 为 55 的 VLAN 连接。该连接将使用 eth0,VLAN 接口将命名为 Maxipes-fik。
nmcli c a ifname eth0 type ethernet ipv4.method disabled ipv6.method link-local
以非交互方式添加将使用 eth0 以太网接口且仅配置了 IPv6 链路本地地址的连接。
nmcli connection edit ethernet-em1-2
在交互式编辑器中编辑现有的 "ethernet-em1-2" 连接。
nmcli connection edit type ethernet con-name "yet another Ethernet connection"
在交互式编辑器中添加新的以太网连接。
nmcli con mod ethernet-2 connection.autoconnect no
修改 "ethernet-2" 连接的 "connection" 设置中的 "autoconnect" 属性。
nmcli con mod "Home Wi-Fi" wifi.mtu 1350
修改 "Home Wi-Fi" 连接 "wifi" 的设置中的 "mtu" 属性。
nmcli con mod em1-1 ipv4.method manual ipv4.addr "192.168.1.23/24 192.168.1.1, 10.10.1.5/8, 10.0.0.11"
设置手动寻址和 em1-1 配置文件中的地址。
nmcli con modify ABC +ipv4.dns 8.8.8.8
将 Google 公共 DNS 服务器附加到 ABC 配置文件中的 DNS 服务器。
nmcli con modify ABC -ipv4.addresses "192.168.100.25/24 192.168.1.1"
从(静态)配置文件 ABC 中删除指定的 IP 地址。
nmcli con import type openvpn file ~/Downloads/frootvpn.ovpn
将 OpenVPN 配置导入 NetworkManager。
nmcli con export corp-vpnc /home/joe/corpvpn.conf
将 NetworkManager VPN 配置文件 corp-vpnc 导出为标准 Cisco (vpnc) 配置。