nmcli 网络管理工具

本文介绍了 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 ~]# nmcli connection modify ens32 con-name eth0
    [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:

id the ID denotes a connection name.
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 ~]# nmcli connection delete uuid b713041f-bfb5-45ce-a8da-21ad02361e81
[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 monitornmcli 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) 配置。