命令行工具nmcli-管理网络连接

nmcli 是一个命令行工具,用于与 NetworkManager 进行交互,主要用于在 Linux 系统上管理网络连接。

NetworkManager 是一个用于自动化网络配置的服务,通常用于管理有线和无线网络、VPN 连接等。

nmcli 提供了一个命令行界面,让用户可以方便地管理和配置网络接口、查看网络状态、创建和删除网络连接等操作,适用于服务器、终端用户或者不使用图形界面的系统。

从内核态到用户态的交互

  1. 用户输入命令:用户通过 nmcli 在命令行输入网络配置命令。

  2. 与 NetworkManager 交互nmcli 通过 DBus 向 NetworkManager 发送请求,NetworkManager 在用户态处理中响应这些请求。

  3. 与内核交互:NetworkManager 通过系统调用、Netlink 或其他接口与内核网络栈交互,配置或修改网络接口的状态(例如启用/禁用接口、分配 IP 地址、配置路由等)。

  4. 操作完成:网络接口的配置变更被内核网络栈接受并生效,数据传输和网络连接管理在内核态完成。

1. 基本用法

通过 nmcli,你可以执行多种网络管理任务。常见的基本命令包括:

1.1 查看网络状态

nmcli general status

显示系统的网络状态,包括是否连接到网络,以及 NetworkManager 的当前状态(如是否启用或禁用)。

1.2 列出所有连接

nmcli connection show

显示所有已配置的网络连接,包括有线、无线和 VPN 连接等。

1.3 列出设备信息

nmcli device status

显示所有网络设备的状态(如无线网卡、以太网卡等)。可以查看每个设备的连接状态(如已连接、未连接等)。

2. 管理网络连接

2.1 连接到 Wi-Fi 网络

nmcli device wifi connect <SSID> password <password>

  • SSID 是 Wi-Fi 网络的名称。
  • <password> 是该网络的密码。

该命令会使无线设备连接到指定的 Wi-Fi 网络。

2.2 断开网络连接

nmcli connection down <connection-name>

断开指定的连接。你可以通过 nmcli connection show 查看所有已配置的连接名称。

2.3 启用/禁用网络接口

nmcli device connect <device-name> nmcli device disconnect <device-name>

  • connect 启用设备(如以太网或无线网卡)。
  • disconnect 禁用设备。

<device-name> 是网络设备的名称,如 eth0(有线网卡)、wlan0(无线网卡)。

2.4 创建新的网络连接

nmcli connection add type ethernet con-name "my-eth0" ifname eth0 ip4 192.168.1.100/24

这条命令将创建一个新的以太网连接,命名为 "my-eth0" ,并分配静态 IP 地址 192.168.1.100/24

2.5 删除网络连接

nmcli connection delete <connection-name>

删除指定的网络连接。

3. 管理网络设备

3.1 查看设备信息

nmcli device show <device-name>

显示指定设备(如 eth0wlan0)的详细信息,包括 IP 地址、MAC 地址等。

3.2 启用/禁用设备

nmcli device set <device-name> managed yes # 让设备由 NetworkManager 管理 nmcli device set <device-name> managed no # 禁止 NetworkManager 管理设备

可以设置设备是否由 NetworkManager 管理。

4. 显示连接的详细信息

4.1 查看当前连接的详细信息

nmcli connection show <connection-name>

这将显示指定连接的详细配置信息,例如 IP 地址、DNS 配置、网关等。

4.2 显示所有 Wi-Fi 网络

nmcli device wifi list

列出当前可用的所有 Wi-Fi 网络,包括网络名称(SSID)、信号强度、加密类型等信息。

5. 配置 VPN 连接

nmcli 还支持配置和管理 VPN 连接。例如,连接到 OpenVPN 网络:

nmcli connection import type openvpn file /path/to/vpn-config.ovpn

6. 网络诊断

6.1 查看 DNS 配置

nmcli device show <device-name> | grep IP4.DNS

查看指定设备的 DNS 配置信息。

6.2 检查网络连接状态

nmcli general connectivity

检查网络连接的状态(例如是否连接到互联网,或者是否处于离线状态)。

7. 常用选项

  • -p:用于显示输出时的格式,-p 会显示更详细的信息(如当前连接的状态)。
  • -a:列出所有可用的网络连接。
  • -f:指定输出的字段,如显示设备的名称、连接状态、IP 地址等。

8. 示例用法

8.1 列出所有连接

nmcli connection show

8.2 连接到一个 Wi-Fi 网络

nmcli device wifi connect "SSID" password "your-password"

8.3 断开一个连接

nmcli connection down "MyWiFi"

8.4 设置静态 IP 地址

nmcli connection modify "MyConnection" ipv4.addresses 192.168.1.100/24

nmcli connection modify "MyConnection" ipv4.gateway 192.168.1.1

nmcli connection modify "MyConnection" ipv4.dns "8.8.8.8"

nmcli connection modify "MyConnection" ipv4.method manual nmcli connection up "MyConnection"

8.5 启用网络接口

nmcli device connect eth0

8.6 查看设备的状态

nmcli device status

重新加载

systemctl restart NetworkManager

nmcli connection reload eth0
nmcli connection down eth0

nmcli connection up eth0

root@localhost:~# nmcli -h
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]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes

root@localhost:~# 
root@localhost:~# nmcli general -h
Usage: nmcli general { COMMAND | help }

COMMAND := { status | hostname | permissions | logging }

  status

  hostname [<hostname>]

  permissions

  logging [level <log level>] [domains <log domains>]

root@localhost:~# 
root@localhost:~# nmcli networking -h
Usage: nmcli networking { COMMAND | help }

COMMAND := { [ on | off | connectivity ] }

  on

  off

  connectivity [check]

root@localhost:~# nmcli radio -h
Usage: nmcli radio { COMMAND | help }

COMMAND := { all | wifi | wwan }

  all | wifi | wwan [ on | off ]

root@localhost:~# 
root@localhost:~# nmcli connection -h
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>]

root@localhost:~# 
root@localhost:~# 
root@localhost:~# nmcli device -h
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>] ...]

  lldp [list [ifname <ifname>]]

root@localhost:~# 
root@localhost:~# nmcli agent -h
Usage: nmcli agent { COMMAND | help }

COMMAND := { secret | polkit | all }

root@localhost:~# 
root@localhost:~# nmcli monitor -h
Usage: nmcli monitor

Monitor NetworkManager changes.
Prints a line whenever a change occurs in NetworkManager

root@localhost:~# 

1. 常规项(General Items)

常规项涉及 nmcli 的基本操作和整体网络状态管理,包括查看系统级网络信息、版本检查等。这是使用 nmcli 的起点。

  • 核心概念:常规项提供全局网络状态概览,如 NetworkManager 服务状态、连接激活情况、主机名等。它不涉及具体设备或连接细节,而是系统层面的汇总。
  • 常用命令
    • nmcli general status:查看网络整体状态(如是否启用、连接状态)。
    • nmcli general logging:配置日志级别,用于调试。
    • nmcli --version:检查 nmcli 版本。
  • 示例代码及解释
    # 查看网络整体状态
    nmcli general status
    # 输出示例:STATE      CONNECTIVITY  WIFI-HW  WWAN-HW
    #          connected  full          enabled  enabled
    # 解释:STATE 显示网络是否激活(connected/disconnected),CONNECTIVITY 表示网络可达性(full/limited/none)。
    
    # 设置日志级别为 DEBUG,便于故障排查
    nmcli general logging level DEBUG domains ALL
    # 解释:此命令将日志级别调为 DEBUG,并记录所有域(domains ALL),有助于诊断问题。
    
  • 深度剖析:常规项是网络管理的“仪表盘”,通过它快速诊断系统级问题。例如,如果 STATE 显示 disconnected,可能表示 NetworkManager 服务未启动,需使用 systemctl start NetworkManager 修复。真实场景中,这常用于服务器运维的初步检查。

2. 网络控制(Network Control)

网络控制维度处理整体网络的启用、禁用和状态切换,影响所有网络设备和连接。它不针对特定设备,而是系统范围的开关。

  • 核心概念:网络控制允许用户启用或禁用整个系统的网络功能,类似于“飞行模式”。禁用时,所有连接(有线和无线)都会被切断。
  • 常用命令
    • nmcli networking on:启用所有网络。
    • nmcli networking off:禁用所有网络。
    • nmcli networking connectivity:检查网络连通性(如是否可达互联网)。
  • 示例代码及解释
    # 禁用整个系统的网络(类似飞行模式)
    nmcli networking off
    # 解释:执行后,所有网络连接中断。STATE 在常规项中变为 disconnected。
    
    # 重新启用网络
    nmcli networking on
    # 解释:恢复网络后,系统自动尝试重新激活之前的连接。
    
    # 检查网络连通性
    nmcli networking connectivity
    # 输出示例:full
    # 解释:full 表示完全连通,limited 表示部分连通(如仅本地网络),none 表示无连接。
    
  • 深度剖析:网络控制是系统安全的基石。例如,在服务器维护时,禁用网络可防止未授权访问。但需注意:禁用网络会影响所有服务,真实环境中建议先保存工作。连通性检查基于 NetworkManager 的检测机制(如 ping 网关),帮助快速定位互联网访问问题。

3. 无线传输控制(Wireless Transmission Control)

无线传输控制专注于 Wi-Fi 网络的管理,包括扫描热点、连接 AP、启用/禁用无线硬件等。适用于移动设备或笔记本环境。

  • 核心概念:此维度处理无线信号相关操作,如扫描可用 Wi-Fi 网络、连接特定 SSID、管理无线硬件开关。它依赖于无线网卡设备。
  • 常用命令
    • nmcli radio wifi on/off:启用或禁用 Wi-Fi 硬件。
    • nmcli dev wifi list:扫描并列出可用 Wi-Fi 网络。
    • nmcli dev wifi connect SSID password PASSWORD:连接到指定 Wi-Fi。
  • 示例代码及解释
    # 启用 Wi-Fi 硬件
    nmcli radio wifi on
    # 解释:如果硬件被禁用,此命令激活无线功能。
    
    # 扫描并列出附近 Wi-Fi 热点
    nmcli dev wifi list
    # 输出示例:IN-USE  SSID       MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
    #                  MyWiFi    Infra  6     130 Mbit/s  75      ▂▄▆_  WPA2
    # 解释:显示 SSID、信号强度(SIGNAL)、安全类型(SECURITY)等。IN-USE 列表示当前连接。
    
    # 连接到 Wi-Fi 网络(SSID 为 MyWiFi,密码为 mypass123)
    nmcli dev wifi connect MyWiFi password mypass123
    # 解释:此命令创建或激活一个连接配置文件。成功后,设备将关联到该 AP。
    
  • 深度剖析:无线传输控制的关键在于信号优化和安全。例如,nmcli dev wifi list 使用底层驱动扫描,可能受硬件限制(如某些网卡不支持 5GHz)。真实场景中,连接命令自动保存配置文件到 /etc/NetworkManager/system-connections/,便于持久化。安全方面,WPA3 需系统支持,否则回退到 WPA2。

4. 连接管理(Connection Management)

连接管理处理网络连接配置文件的创建、编辑、激活和删除。这些配置文件定义如何连接到网络(如 IP 设置、DNS)。

  • 核心概念:连接是逻辑配置(如一个 Wi-Fi 或以太网配置),独立于物理设备。管理包括添加新连接、修改参数(如静态 IP)、启动或停止连接。
  • 常用命令
    • nmcli connection show:列出所有连接配置文件。
    • nmcli connection add:添加新连接。
    • nmcli connection up/down:激活或停用连接。
    • nmcli connection modify:修改连接参数。
  • 示例代码及解释
    # 列出所有连接配置文件
    nmcli connection show
    # 输出示例:NAME        UUID                                  TYPE      DEVICE
    #          MyEthernet  a5e45678-1234-5678-abcd-ef1234567890  ethernet  eth0
    # 解释:显示连接名称、UUID、类型(如 ethernet/wifi)和关联设备。
    
    # 添加一个新的以太网连接(静态 IP)
    nmcli connection add type ethernet ifname eth0 con-name StaticEth ip4 192.168.1.100/24 gw4 192.168.1.1
    # 解释:创建名为 StaticEth 的连接,指定设备 eth0,设置静态 IP 和网关。ip4 参数使用 CIDR 格式。
    
    # 激活连接
    nmcli connection up StaticEth
    # 解释:启动此连接,设备 eth0 将使用新配置。
    
    # 修改连接的 DNS
    nmcli connection modify StaticEth ipv4.dns "8.8.8.8 8.8.4.4"
    # 解释:将 DNS 服务器改为 Google DNS。修改后需重新激活(up)生效。
    
  • 深度剖析:连接管理是网络配置的核心。配置文件存储在 /etc/NetworkManager/system-connections/,修改后需重载(nmcli con reload)。真实案例中,静态 IP 设置用于服务器固定地址,而 DHCP 是默认(nmcli con add type ethernet ifname eth0 自动使用 DHCP)。错误配置可能导致连接失败,建议用 nmcli con edit 交互模式避免语法错误。

5. 设备管理(Device Management)

设备管理维度处理物理或虚拟网络接口(如网卡)的状态监控和控制,包括启用/禁用设备、查看详情等。

  • 核心概念:设备是硬件实体(如 eth0、wlan0),管理包括列出设备、查看状态、连接或断开设备。设备状态影响连接的可用性。
  • 常用命令
    • nmcli device status:列出所有设备及其状态。
    • nmcli device show DEVICE:查看设备详细信息。
    • nmcli device connect/disconnect DEVICE:手动连接或断开设备。
    • nmcli device set DEVICE autoconnect yes/no:设置自动连接。
  • 示例代码及解释
    # 列出所有网络设备状态
    nmcli device status
    # 输出示例:DEVICE  TYPE      STATE      CONNECTION
    #          eth0    ethernet  connected  MyEthernet
    #          wlan0   wifi      disconnected  --
    # 解释:DEVICE 是接口名,STATE 显示设备状态(connected/disconnected/unavailable),CONNECTION 关联的配置文件。
    
    # 查看设备 eth0 的详细信息
    nmcli device show eth0
    # 输出示例:GENERAL.DEVICE:           eth0
    #          GENERAL.HWADDR:           00:11:22:33:44:55
    #          IP4.ADDRESS[1]:           192.168.1.100/24
    # 解释:显示 MAC 地址、IP 地址、接口类型等硬件和配置细节。
    
    # 手动断开设备 wlan0
    nmcli device disconnect wlan0
    # 解释:断开无线设备,不影响其他设备。STATE 变为 disconnected。
    
    # 设置设备自动连接
    nmcli device set wlan0 autoconnect yes
    # 解释:启用后,设备在启动时自动尝试连接可用网络。
    
  • 深度剖析:设备管理直接与硬件交互。例如,nmcli device show 暴露驱动级信息,帮助诊断硬件故障(如网卡未识别)。真实环境中,断开设备可用于临时隔离问题接口(如测试无线干扰)。自动连接设置(autoconnect)持久化到配置文件,但优先级低于连接管理中的配置。

总结

nmcli 是一个全面且强大的网络管理工具,通过以上五个维度的深度剖析,您可以从宏观状态(常规项)到微观控制(设备管理)实现精细化管理。关键优势包括:

  • 统一性:一个命令覆盖所有网络操作,减少依赖 GUI 或其他工具。
  • 脚本友好:所有命令可嵌入脚本,实现自动化(如部署服务器时配置网络)。
  • 安全可靠:基于 NetworkManager 服务,确保配置持久化和错误处理。

实际使用建议:

  • 在修改关键配置前,备份配置文件(/etc/NetworkManager/system-connections/)。
  • 使用 nmcli --helpman nmcli 获取详细帮助。
  • 结合日志(journalctl -u NetworkManager)排查问题。

通过逐步实践这些命令,您能高效管理复杂网络环境。如果有特定场景(如 VPN 配置),欢迎进一步提问!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值