nmcli 命令中的 nm 是 NetworkManager 的缩写
所以,从字面上理解, nmcli 是 NetworkManager 的客户端命令
nmcli 是 NetworkManager 的命令行控制器
我们说过 centos 6 中 NetworkManager 还不成熟,反而会影响我们管理网络,所以,虽然 nmcli 命令在 centos 6 中也存在,但是 nmcli 的功能也较为薄弱,在 centos6 中不会经常使用,因为一般我们不会在 centos6 中安装 NetworkManager 服务,或者都会故意将它停止。
而在 cetnos 7 中 ,NetworkManager 已经较为完备,而且 centos 7 默认就是使用 NetworkManager 服务对系统进行网络管理,所以 nmcli 命令在 7 中会经常用到,而且 nmcli 命令在 7 中的功能已经变得较为强大。
nmcli 命令的语法
nmcli [ OPTIONS ] OBJECT { COMMAND | help }nmcli 最常用的对象如下
connection
此对象用于显示或管理 IP 地址, connection 可以缩写成 con
device
此对象用于显示或管理网络接口的, device 可以缩写成 dev
注意, nmcli 命令的修改操作是针对于配置文件的,也就是说使用 nmcli 命令执行修改操作,相当于直接修改网卡对应的配置文件。
nmcli 是由很多对象和子命令组成的,所以,如果我们忘记了我们要操作的对象的具体名称,或者忘记了对象对应有哪些子命令,我们可以使用 tab 键补全,这个功能非常的方便实用

我们先看一下 nmcli device 对象的一些用法
查看当前主机上的网络接口设备的状态
(网卡类型,连接状态,配置文件名称等)
nmcli device status

我们可以看到,当前只有一块网卡处于连接状态,其余的网卡都是断开状态或者未被管理状态
我们还可以查看各个设备的更加详细的信息
nmcli device show

当然,如果只是想查看某个网卡的详细信息,也可以指定确定的接口查看

我们发现, eno33554960 接口是未连接状态,那么我们可以连接它

当然,我们也可以使用 nmcli device disconnect eno33554960 去禁用网卡
其实 nmcli device disconnect eno33554960 这条命令与如下命令的作用是一样的
nmcli connection down eno33554960
当然,我们也可以使用 nmcli connection up eno33554960 来启用网卡

我们也可以使用 nmcli connectio show 命令查看已经处于连接状态的接口

我们现在去修改 eno33554960 的配置文件,
将配置文件中的 name 字段的值从 eno33554960 修改为 test- eno33554960
然后使用 nmcli con reload 命令重新加载配置

我们发现,修改配置文件中 name 字段以后,使用 nmcli 命令重新加载配置后,网卡对应的连接名称也已经发生了改变。

其实经过上述的小例子我们可以发现,网卡设备和网卡配置文件其实原本是分离的,也就是说,
网卡的配置文件和实际的网卡设备原本没有任何关系,如果配置文件脱离了网卡设备,那么它只是一个文件而已,但是,如果这个配置文件与某个网卡设备绑定以后,配置文件中的设置,将会映射到被绑定的网卡设备上,这个时候,我们修改配置文件,才相当于修改网卡的属性,如果配置文件不与网卡绑定,那么它则只是一个纯文本文件罢了。
怎么证明我们上面描述的观点呢,现在,我们使用 nmcli 命令,创建一个网卡配置文件,命令如下

我们发现,在网卡配置文件目录中,已经生成了一个配置文件

而且我们指定的信息已经生成了,可以看到,如果这个配置文件生效,
那么它绑定的设备将为 eno33554960 ,绑定以后,这个配置文件中的信息将映射成网卡的属性。

但是我们发现,其实对应的配置文件,还没有绑定到对应的 eno33554960 网卡上,也就是说,现在,配置文件还只是一个文本文件而已,并没有对网卡设备产生任何的影响

我们可以使用 nmcli 命令,让 home 配置文件生效, home 配置文件生效后, home 中的信息将映射为 eno33554960 网卡的属性。

现在,我们发现 eno33554960 网卡的 IP 地址等信息已经改变为 ifcfg-home 配置文件中的设置信息。

我们在切换回原来的配置文件

我们在使用 nmcli connection show 的时候,没有生效的配置文件也会显示出来

我们可以使用 active 选项,只查看生效的配置

那么,我们能不能通过 nmcli 命令删除刚才的 home 配置文件呢,必须能啊,命令如下

再次查看配置文件的目录,即可发现 ifcfg-home 已经消失了
上面的操作,可以证明, nmcli 命令其实是直接操作于配置文件的
那么,我们应该可以使用 nmcli 命令修改配置文件中的信息
我们先查看一下配置文件中的信息, name 字段是 test- eno33554960
那么,我们使用 nmcli 命令去修改它

注意,修改时要使用 connection 对象的 modify 命令,我们发现,修改完成后,立即就生效了,甚至不用重新加载配置文件。


既然能够修改配置文件中的 name 字段,那么能不能修改网卡的 IP 地址呢,必须可以,命令如下

但是请注意,我们虽然修改了配置文件,但是新的配置还没有生效,我们需要重启网络服务,新的设置才能生效,使用 nmcli connection reload 重新加载配置不会让新的 IP 地址生效

还能添加 IP 地址,但是注意,使用这种方式添加的 IP 地址,
使用 ifconfig 命令无法查看到,只能使用 ip addr show 命令查看到

你可能还会经常改这些东西。
nmcli con mo d "eth1" connection.autoconnect no
nmcli con mod "eth1" ipv4.dns 172.25.X.254
nmcli con mod "eth1" +ipv4.dns 8.8.8.8
nmcli con mod "eth1" -ipv