nmcli命令详解(连接wifi,创建热点、桥接、管理连接等)

简述

  • 顾名思义,nmcli就是NetworkManager的cli(命令行)。NetworkManager的功能相当多,支持配置:以太网、wifi、蓝牙、串口、www代理、桥接、bond、wol、pppoe、adsl、dhcp、ip隧道、vpn、ovs、vlan、vxlan、ipvlan、macvlan、tup/tap、veth等
  • 摘抄和翻译源自:https://developer.gnome.org/NetworkManager/unstable/nmcli.html
  • 更多参考: https://networkmanager.dev/docs/man-pages/
  • 本博文是作者“进取有乐”翻译加工自上述网站,仅发布于博客园,其他网站转载请注明出处。
  • 想要用NetworkManager管理网络,要用systemctl命令停止其他网络管理服务并禁止启动,比如systemd-networkd、networking, 然后启动NetworkManager服务,并设置NetworkManager服务开机启动。

语法

nmcli [OPTIONS...] { help | general | networking | radio | connection | device | agent | monitor } [COMMAND] [ARGUMENTS...]
上面的语法就是: nmcli [选项...] 对象 [命令] [参数...]
对象 =  help | general | networking | radio | connection | device | agent | monitor

直接执行nmcli命令,不带任何参数和选项的话,会显示当前所有网口的信息,比如网口名、连接名、ip地址、路由信息、网口是否被NetworkManager服务接管等信息

提示: 1-输入命令的时候请善用tab补全,少打很多单词!
              2-支持简写,例如connection可以简写成con或c, modify可以简写成mod或m

比较有用的选项(OPTION)

-a | --ask  提示输入缺少的参数,而不是报错。例如连接wifi的时候,没有提供password参数,那么如果有-a选项就会提示输入密码
-p | --pretty 显示的时候会更加易于人类阅读,尤其是多行显示的时候,可以分块显示
-m | --mode { tabular | multiline }  tabular显示的时候是表格式(有表头)的,不易阅,multiline是多行类似key:value形式。如果省略,大多数命令默认使用tabular。 nmcli connection show ID和nmcli device show这两命令因为结构化信息不好单行显示,如果省略,默认使用multiline
-f | --fields { field1,field2... | all | common }  默认使用common(命令公共字段)。也可以指定特定字段,比如nmcli -f GENERAL.DEVICE,IP4.ADDRESS device show 显示网卡名和ip地址(善用tab补全)。查看可用字段的方法:1-通过对应对
                                                                         #   象的show来找到字段.对于connection对象,可以使用man 5 nm-settings查看, 或者输入错误字段,让报错来提示可字段,比如输入nmcli -f xxx connection show myAP 就会报错,提示可用字段

对象

general对象(常规信息)

用途

  • 常规信息,个人感觉本对象用途不大,稍微有用一点的就是status了,例如:显示NetworkManager的状和操作权限,获取和修改系统主机名,NetworkManager的日志级别和域

语法

nmcli general { status | hostname | permissions | logging } [ARGUMENTS...]

networking对象(整个网络)

用途

  • 查询NetworkManager状态,启用禁用网络

语法

nmcli networking { on | off | connectivity } [ARGUMENTS...]

命令示例

nmcli networking off #禁用所有被NetworkManager托管的网络接口的网络连接(修改配置文件可以启用或禁止NetworkManager托管,可以自行百度)
nmcli networking connectivity check # 参数check表示重新检查连接状态。连接状态full表示具有完全的internet访问能力,limited表示连接到一个网络,但是internet未接入

radio对象(无线开关)

用途

  • 显示无线电开关状态,启用、禁用无线电

语法

nmcli radio { all | wifi | wwan } [ARGUMENTS...]

命令示例

nmcli radio wifi      # 打印wifi开关状态
nmcli radio wifi off  # 表示关闭wifi

connection对象(连接的配置)

用途

  • NetworkManager会把网络配置保存为connections配置信息,比如保存二层网络信息,ip信息等。NetworkManger会根据这些信息知道怎么去连接一个网络。在一个特定设备,可以有多个连接配置(比如一个是dhcp的,一个是静态ip地址的),但是只有一个配置是“活动“的配置。connection对象就是用来管理这些连接配置的。

语法

nmcli connection { show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export } [ARGUMENTS...]
  • 激活连接的语法详述
    语法: nmcli connection up [ id | uuid | path ] ID [ifname ifname] [ap BSSID] [passwd-file file]
    解释:一个连接由其name(名称),uuid或path(就是D-Bus路径)所标识。如果ID不明确,则可以使用关键字id,uuid或path来指明这个ID是什么。当需要特定设备激活连接时,应提供带有接口名称的ifname选项。如果未提供ID,则需要一个ifname,NetworkManager将为给定的ifname激活最佳的可用连接。如果是VPN连接,则ifname选项指定基本连接的设备。ap选项指定在Wi-Fi连接的情况下应使用哪个特定的AP。passwd-file:某些网络在激活期间可能需要凭据。您可以使用此选项提供这些凭据。文件的每一行应包含一个密码。文件内容格式为setting_name.property_name:the password。例如WPA-PSK连接的格式为802-11-wireless-security.psk:secret12345。nmcli还接受wifi-sec和wifi字符串,而不是802-11-wireless-security。当NetworkManager需要密码但未提供密码时,nmcli在使用--ask运行时会要求输入密码。如果未传递--ask,则NetworkManager可以询问可能正在运行的另一个秘密代理(通常是GUI秘密代理,例如nm-applet或gnome-shell)。

  • 停用连接的语法详述
    语法: nmcli connection down [ id | uuid | path | apath ] ID... #注意这里的ID可指定多个
    解释: 请注意,该命令将停用指定的活动连接,但是该连接处于活动状态的设备仍可以连接,并且将通过查找设置了“自动连接”标志的合适连接来执行自动激活。 请注意,停用的连接配置文件在内部被阻止再次自动连接。 因此,它不会自动连接,直到重新启动或直到用户执行取消自动连接的操作为止,例如修改配置文件或显式激活它。在大多数情况下,您可能想使用device disconnect命令。
    该连接由其名称,UUID或D-Bus路径标识。 如果ID不明确,则可以使用关键字id,uuid,path或apath。

  • 修改连接的语法详述
    语法 : modify [--temporary] [ id | uuid | path ] ID { option value | [+|-]setting.property value } ...
    解释: 在连接配置文件中添加,修改或删除属性。要设置属性,只需指定属性名称后跟值即可。空值(“”)将属性值重置为默认值。除了属性外,您还可以对某些属性使用简称。有关详细信息,请参阅“属性别名”部分。如果要将项目或标志附加到现有值,请使用+前缀作为属性名称或别名。如果要从容器类型或标志属性中删除项目,请使用-前缀。对于某些属性,您还可以通过指定从零开始的索引来删除元素。 +和-修饰符仅对支持它们的属性有效。例如,这些是多值(容器)属性或标志,例如ipv4.dns,ip4,ipv4.addresses,bond.options,802-1x.phase1-auth-flag等。有关设置和属性名称,其描述和默认值的完整参考,请参见nm-settings(5)。如果设置和属性是唯一的,则可以缩写。该连接由其名称,UUID或D-Bus路径标识。如果ID不明确,则可以使用关键字id,uuid或path。

  • add edit clone export import reload等命令这里省略, 参考文章头部给的url

命令示例:

nmcli connection show  # 列出网络连接的配置(存放于内存和硬盘的配置,nmcli -f active connection show 表示显示存储于内存配置, -f profile表示存放于硬盘的配置)
nmcli c  s  --active  # 仅列出处于活动状态的网络配置,这里是简写,等效于nmcli connection show --active 
nmcli c s  'Wired connection 1'  #查看有线网口的配置详情,这里的'Wired connection 1'可以通过nmcli c s命令看到,它对应的是第一个有线网口。
nmcli -f ipv4.addresses,ipv4.gateway,ipv4.dns connection show 'Wired connection 1'  # 查看有线连接的ipv4地址、网关、DNS。 回显基本和nmcli -f IP4 connection show 'Wired connection 1' 差不多
nmcli --show-secrets -f  802-11-wireless-security.psk  connection show  myAP001  # 显示myAP001密码,加了--show-secrets或-s才能显示密码明文,
nmcli connection show --order name # 按配置名排序,可选排序有type、active、name、path(d-bus路径),+号和-号表示升序和降序,未指定,则默认使用升序。默认排序是:--order active:name:path
nmcli connection show uuid 38781e62-4bab-4ba8-a086-bfaece222794  # 按指定关键字显示,关键字有id,uuid、path、apath。 用途是不能使用常规的nmcli connection show <配置名> 来显示的时候,这种显示方法就可以派上用场了。


nmcli c up 'Wired connection 1'        # 激活第一个有线连接配置, 也可以激活第一个有线网口名对应的连接:nmcli c up ifname enp5s0 ,  还可以按UUID激活连接 nmcli c  up  uuid 7db7c437-aa62-4861-b86c-5cbe8fbc8d8d
nmcli connection down 'Wired connection 1'    # 停用第一个有线连接配置。

nmcli connection reload   # 重新从磁盘加载网络连接的配置,比如你删掉/etc/NetworkManager/system-connections/下的某个配置,然后执行该命令,就会发现那些连接不见了。
nmcli connection add con-name youxian ifname enp5s0  type ethernet  # 创建一个连接,连接配置名叫youxian。这里没有指定method,则默认使用auto,也就是自动配置(DHCP)。类型是以太网,类型有以太网、wifi,adsl等,具体参考文章头部给的url
nmcli connection delete youxian #删除网络连接youxian, 可以按 id | uuid | path 来删除
nmcli c a  con-name youxian2 ifname enp5s0 autoconnect yes type ethernet ipv4.method manual ip4 10.1.1.1/8 gw4 10.1.0.1 ipv4.dns 223.5.5.5   # 创建一个静态ip的以太网连接(重启后地址还在,ip4/gw4都是简写,简写对应表见后文)。执行ip a命令看到立即生效了。
nmcli c  m  youxian2 +ip4 192.168.10.10/24 # 给youxian2的配置添加一个ipv4地址(youxian2已经有两个ipv4地址了),执行ip a命令发现有线网口只有一个ipv4地址,执行cat /etc/NetworkManager/system-connections/youxian2.nmconnection发现配置
                  # 文件中有两个ipv4地址,执行nmcli c s youxian2 显示的结果中也有两个ipv4地址。执行systemctl restart NetworkManager重启服务后,再执行ip a命令就能看到有线网口两个ipv4地址了。我的系统实测是这样,不知别人的系统是否存在这种情况?
                                                                                 
nmcli connection modify  myEth ipv4.method manual  ipv4.addresses "192.168.43.64/24,10.0.0.23/8" gw4 192.168.43.1 ipv4.dns 223.5.5.5    #修改myEth连接为手动(重启后,ip地址还在),ip地址设置为两个
nmcli con mod myEth  autoconnect no     # 设置myEth连接配置为不自动连接(重启操作系统或从起NetworkManager就能看到不会自动连接了)
nmcli -f name,autoconnect-priority connection  # 查看网络优先级,数字大的优先级高
nmcli con modify mySSID connection.autoconnect-priority 9 # 调整wifi名为mySSID的无线网络的自动连接优先级为9
nmcli c a con-name yidongWiFi ifname wlp3s0 type wifi ssid CMCC-1702  wifi-sec.key-mgmt wpa-psk wifi-sec.psk '12345678' ;    # 创建一个无线连接, 等待几秒无线连接上后,执行ip a命令就能看到wifi获取的ip地址了。如果你有多个无线连接配置的
        # 话,那么你只要执行nmcli c u yidongWiFi就能连上CMCC-1702了。type wifi是type 802-11-wireless的简写,ssid是wifi.ssid或802-11-wireless.ssid的简写,wifi-sec是802-11-wireless-security的简写你看到后面,会发现,连接wifi还有更加简介的命令。

nmcli c  a  type bridge con-name br0 ifname br0 ipv4.method manual ip4 192.168.1.101/24 gw4 192.168.1.1 ipv4.dns "223.5.5.5,119.29.29.29"  # 创建一个桥接网口,网口名br0, 连接名br0, ip地址设为手动,并配好ip地址、网关等
nmcli connection add type bridge-slave con-name br0-slave1 ifname enp5s0  master br0  # 把有线网口enp5s0 加入到桥接br0里面,连接配置名是br0-slave1 
nmcli c  a  type bridge-slave con-name br0-slave2 ifname enp5s1 master br0  # 把有线网口enp5s1加入到桥接br0里面
nmcli con del 'Wired connection 1' ;    nmcli con del 'Wired connection 2'   #删掉有线网口enp5s0 和enp5s1对应的旧网络配置,所有流量都走br0,所以enp5s0和enp5s1不能有ip地址,否则会冲突导致网络不通。所以要删掉旧配置。
                   # 上面命令执行完毕后,我们发现/etc/NetworkManager/system-connections/目录下产生了配置文件。

device对象(网络接口)

用途

  • 显示或管理网络接口

语法

nmcli device { status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp } [ARGUMENTS...]

子命令详细解释(这里不全部翻译,理解了上面connection,这里也是差不多的):
set [ifname] ifname [ autoconnect { yes | no } ] [ managed { yes | no } ]
Set device properties. connect ifname Connect the device. NetworkManager will try to find a suitable connection that will be activated. It will also consider connections that are not set to auto connect.If no compatible connection exists, a new profile with default settings will be created and activated. This differentiates nmcli connection up ifname "$DEVICE" from nmcli device connect "$DEVICE" If --wait option is not specified, the default timeout will be 90 seconds.

reapply ifname
Attempt to update device with changes to the currently active connection made since it was last applied.

modify ifname { option value | [+|-]setting.property value } ...
Modify the settings currently active on the device.
This command lets you do temporary changes to a configuration active on a particular device. The changes are not preserved in the connection profile.See nm-settings(5) for the list of available properties. Please note that some properties can't be changed on an already connected device.You can also use the aliases described in Property Aliases section. The syntax is the same as of the nmcli connection modify command.

disconnect ifname...
Disconnect a device and prevent the device from automatically activating further connections without user/manual intervention. Note that disconnecting software devices may mean that the devices will disappear.(这段翻译一下:断开设备连接,并防止设备自动激活。 断开软设备的连接可能会让这些设备消失)
If --wait option is not specified, the default timeout will be 10 seconds.

delete ifname...
Delete a device. The command removes the interface from the system. Note that this only works for software devices like bonds, bridges, teams, etc(仅能删除软设备,例如bond、桥等). Hardware devices (like Ethernet) cannot be deleted by the command.(硬设备无法删除)

wifi [ list [--rescan | auto | no | yes ] [ifname ifname] [bssid BSSID] ]
列出wifi热点,可以指定无线网卡接口名和热点BSSID。列出的热点列表不会超过30秒,必要时会重新扫描(通过--rescan控制重新扫描:取值auto yes no)

wifi connect (B)SSID [password password] [ifname ifname] [bssid BSSID] [name name] [ private { yes | no } ] [ hidden { yes | no } ]
连接到由SSID或BSSID指定的wifi网络。该命令找到匹配的连接或创建一个连接,然后在设备上激活它。如果已经存在配置文件,可以直接使用nmcli connection up <配置文件名>。private表示该连接是否对其他用户可见。hidden用于连接隐藏ssid的wifi。

wifi hotspot [ifname IFNAME] [con-name NAME] [ssid SSID] [ band { a | bg } ] [channel channel] [password password]
创建一个热点,con-name是配置名。

wifi rescan [ifname IFNAME] [ssid SSID...]
重新扫描wifi接入点,可以指定多个SSID。对于隐藏ssid的网络,务必要指定ssid。命令不显示接入点列表。显示接入点列表请使用nmcli device wifi list命令

命令示例:

nmcli dev wifi list    # 列出可用的wifi接入点, list可以省略
nmcli  device wifi connect CMCC-1702 password '12345678'   # 连接热点CMCC-1702  连接成功后,就会自动生成配置文件,以后要再连接,可以直接使用nmcli connectio up CMCC-1702命令了。
nmcli device wifi hotspot con-name ap001 ifname wlp3s0 ssid myAP001 password 12345678 # 创建热点。以后如果要使用,可以直接nmcli connection up ap001
附:nmcli建热点成功,但是手机连接不上,可以这样解决(假设热点名是Raspi):
root@pi:# nmcli connection add type wifi ifname wlan0 con-name raspAP autoconnect yes ssid Raspi
root@pi:# nmcli connection modify raspAP wifi.mode ap wifi.band bg ipv4.method shared wifi-sec.key-mgmt wpa-psk wifi-sec.psk '1234568'
root@pi:~# nmcli connection up raspAP # 重点:如果up不起来,可以停掉dhcpcd服务

常用属性缩写

  • con-name = connection.id
  • autoconnect = connection.autoconnect
  • ifname = connection.interface-name
  • mtu = 不同类型下的.mtu属性
  • ssid = wireless.ssid
  • mode = wireless.mode(网卡为wifi时)
  • ip4 = 作用于ipv4.addresses(并且设置ipv4.method为manual) ,同理可知ip6
  • gw4 = ipv4.gateway(同理可知gw6)
  • ethernet = 802-3-ethernet, 802-3-ethernet.wake-on-lan可以写成ethernet.wake-on-lan
  • wifi =802-11-wireless ,例如802-11-wireless.ssid可以写成wifi.ssid或ssid
  • wifi-sec = 802-11-wireless-security

属性取值参考

参考 https://developer.gnome.org/NetworkManager/unstable/nm-settings.html
比如查看ipv4.method可以有auto disable manual等值(打开上面网页搜索”ipv4 setting“)

更多例子参考

参阅 https://developer.gnome.org/NetworkManager/unstable/nmcli-examples.html

posted on 2019-12-22 13:51  进取有乐  阅读(20410)  评论(0)    收藏  举报

导航