一、概述经常会遇到在不同的Linux系统中配置网络的时候修改的配置文件和语法都不一样。这种情况非常不利于运维人员日常对操作系统的维护和管理。为了解决这个问题NetworkManager工具就应用而生了。通过使用NetworkManager工具可以实现不同的Linux操作系统中对网络的管理和配置统一。NetworkManager工具的功能非常好用甚至在配置时出现语法错误也不会影响当前网络因为工具会暂停修改该网络。如果原来的网络配置文件被误删除了也可以通过NetworkManager工具创建一个和原先参数一样的网络接口该配置文件就会自动的重新生成。使用NetworkManager工具配置的所有网络配置文件会存放于/etc/NetworkManager/system-connections/目录下。network-manager接管网络后使用nmcli命令修改网卡的相关配置后都会永久生效重启网卡后依旧生效。二、NetworkManager的命令行工具nmcli是NetworkManager的一个命令行工具它提供了使用命令行配置由NetworkManager管理网络连接的方法(nm 代表 NetworkManagercli 代表 Command-Line)。2.1 nmcli的常用参数介绍[rootopeneuler2203-01 network-scripts]# nmcli help Usage: nmcli [OPTIONS] OBJECT { COMMAND | help } OPTIONS -a, --ask ask for missing parameters -c, --colors auto|yes|no whether to use colors in output -e, --escape yes|no escape columns separators in values -f, --fields field,...|all|common specify fields to output -g, --get-values field,...|all|common shortcut for -m tabular -t -f -h, --help print this help -m, --mode tabular|multiline output mode -o, --overview overview mode -p, --pretty pretty output -s, --show-secrets allow displaying passwords -t, --terse terse output -v, --version show program version -w, --wait seconds set timeout waiting for finishing operations OBJECT g[eneral] NetworkManagers general status and operations n[etworking] overall networking control r[adio] NetworkManager radio switches c[onnection] NetworkManagers connections d[evice] devices managed by NetworkManager a[gent] NetworkManager secret agent or polkit agent m[onitor] monitor NetworkManager changes2.2 nmcli genneral用于显示NetworkManager的一般状态和操作。常用的命令如下显示系统的网络状态nmcli general status[rootopeneuler2203-01 network-scripts]# nmcli general status STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled [rootopeneuler2203-01 network-scripts]# nmcli g s STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled [rootopeneuler2203-01 network-scripts]# nmcli gen s STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled还可以显示和修改主机名命令如下nmcli general hostnamenmcli genneral hostname newhostname# 显示主机名 [rootopeneuler2203-01 network-scripts]# nmcli general hostname openeuler2203-01 [rootopeneuler2203-01 network-scripts]# nmcli g h openeuler2203-01 # 修改主机名 [rootopeneuler2203-01 network-scripts]# nmcli general hostname openeuler2203 [rootopeneuler2203-01 network-scripts]# nmcli general hostname openeuler2203 [rootopeneuler2203-01 network-scripts]#注意修改主机名之后需要重启NetworkManager来使修改生效。这句话是别人说的其实不用。只要退出终端连接工具之后重新登陆之后就能看到主机名成已经修改了。2.3 nmcli networking[rootopeneuler2203 ~]# nmcli networking help Usage: nmcli networking { COMMAND | help } COMMAND : { [ on | off | connectivity ] } on off connectivity [check]显示NetworkManager是否接管了网络使用如下命令。如果要使用nmcli来配置和管理网络必须是NetworkManager接管网络之后才能操作的事情。# 使用如下命令可以检查NM是否接管了网络 [rootopeneuler2203 ~]# nmcli networking enabled # 可以看到回显的信息是enabled说明NM已经接管网络。 # 可以使用以下命令开启或者关闭NM对网络的接管状态 nmcli networking on nmcli networking off 或者 nmcli n on nmcli n off可以通过nmcli networking查看操作系统网络的连接状态[rootopeneuler2203 ~]# nmcli networking connectivity full # 网络的状态有五种下面简单介绍一下 full 联网 limited 联网但是无法上网 portal 联网但是需要登陆认证 none 没网 unknown 未知2.4 nmcli connection命令的语法如下[rootopeneuler2203 ~]# nmcli connection help Usage: nmcli connection { COMMAND | help } COMMAND : { show | up | down | add | modify | clone | edit | delete | monitor | reload | load | import | export } show [--active] [--order order spec] show [--active] [id | uuid | path | apath] ID ... up [[id | uuid | path] ID] [ifname ifname] [ap BSSID] [passwd-file file with passwords] down [id | uuid | path | apath] ID ... add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([|-]setting.property value)] modify [--temporary] [id | uuid | path] ID ([|-]setting.property value) clone [--temporary] [id | uuid | path ] ID new name edit [id | uuid | path] ID edit [type new_con_type] [con-name new_con_name] delete [id | uuid | path] ID monitor [id | uuid | path] ID ... reload load filename [ filename... ] import [--temporary] type type file file to import export [id | uuid | path] ID [output file]第一个常用的操作是显示所有的网络连接[rootopeneuler2203 ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33 docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0 virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0说明命令的简写nmcli c s或者nmcli c因为show是nmcli connection的默认选项因此可以省略。如果只想查看已经启动的或者已经激活的连接可以使用下面的命令来实现[rootopeneuler2203 ~]# nmcli connection show --active NAME UUID TYPE DEVICE ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33 docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0 virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0 # 命令简写 [rootopeneuler2203 ~]# nmcli c s -a NAME UUID TYPE DEVICE ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33 docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0 virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0 # 启动或者关闭连接的命令如下 nmcli connection up/dwon 设备名 nmcli c up/down 设备名设备名就是查询结果中DEVICE对应的列。一般情况下给一台主机刚安装好操作系统之后接口设备的连接状态都是正常的我们经常需要做的操作都是和修改有关的这里只是简单的介绍一下如何新增一个连接下面主要说一下如何修改连接。新增一个连接的命令参考如下nmcli c add type 连接类型 选项 选项值 nmcli c a type 连接类型 选项 选项值 [rootopeneuler2203-01 ~]# nmcli connection add type ethernet con-name ens199 ifname ens199 Connection ens199 (5e08e8ec-e073-4fe7-aa1b-1801f945bdf0) successfully added. [rootopeneuler2203-01 ~]# nmcli c show NAME UUID TYPE DEVICE ens33 4cf75388-375f-43df-80eb-4e635d688c16 ethernet ens33 docker0 7af6246e-a205-4cbb-aad4-8c7aced6bc98 bridge docker0 virbr0 02c4f0ec-f34e-4bad-9786-670a571590e1 bridge virbr0 ens199 5e08e8ec-e073-4fe7-aa1b-1801f945bdf0 ethernet --可以看到命令执行成功查看连接信息也可以发现多了一个ens199的信息当然这个新增的连接的当前是没有启动的状态设备那一列显示的是--启动设备的名就是nmcli c up 接口的名称如果要删除一个连接可以使用如下的命令nmcli c delete ens199或者nmcli c de ens199注意这里简写的时候delete不能简写成d因为会和down冲突。另外在创建连接的时候也可以同时配置好IP地址网关网卡的开启自启动的网络配置。需要特别注意的几个参数还有connection.id别名 con-name连接名connection.interface-name别名 ifname设备名connection.autoconnect别名 autoconnect是否开机自启其值只能是 yes 或 no默认 yes平常工作中经常用到的是网络连接的配置修改操作nmcli c modify 设备名 [ | -]选项 选项值 nmcli c m 设备名 [ | -]选项 选项值 下面演示一下一些常用的修改示例 nmcli c m ens33 ipv4.address 192.18.43.100/24 # 修改IP地址和子网掩码 nmcli c m ens33 ipv4.address 192.18.43.200/24 # 添加IP地址 nmcli c m ens33 ipv4.method manual # 修改为静态配置默认是auto nmcli c m ens33 ipv4.gateway 192.18.43.1 # 修改默认网关 nmcli c m ens33 ipv4.dns 8.8.8.8 # 修改dns nmcli c m ens33 connection.autoconnect yes # 开启启动 注意 修改method之前需要先修改address 使用空引号代替选项只可以将选项设为默认值注意配置好之后需要重启操作系统才能查看到对应的接口已经启动。否则nmcli c s查询不到有的时候也有人习惯是去修改网卡配置文件这就需要考虑修改后如何生效的问题。我们可以重载一下网卡配置文件来使修改生效操作命令如下nmcli c reload # 或 nmcli c r nmcli c load ifcfg-ens33 # 或 nmcli c l ifcfg-ens33 ## 指定文件 nmcli connection load /etc/sysconfig/network-scripts/ifcfg-ens1992.5 nmcli device[rootopeneuler2203 ~]# nmcli device help Usage: nmcli device { COMMAND | help } COMMAND : { status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp } status show [ifname] set [ifname] ifname [autoconnect yes|no] [managed yes|no] connect ifname reapply ifname modify ifname ([|-]setting.property value) disconnect ifname ... delete ifname ... monitor ifname ... wifi [list [ifname ifname] [bssid BSSID] [--rescan yes|no|auto]] wifi connect (B)SSID [password password] [wep-key-type key|phrase] [ifname ifname] [bssid BSSID] [name name] [private yes|no] [hidden yes|no] wifi hotspot [ifname ifname] [con-name name] [ssid SSID] [band a|bg] [channel channel] [password password] wifi rescan [ifname ifname] [[ssid SSID to scan] ...] wifi show-password [ifname ifname] lldp [list [ifname ifname]]显示所有网络接口的设备状态nmcli device status显示所有设备的详细信息需要指定设备名nmcli device show ens33连接设备或者断开设备的命令如下nmcli device connect ens33nmcli device disconnect ens33更新设备nmcli device reapply ens33