Linux 网络管理器用法速查
📅 2026/7/27 23:00:14
👁️ 阅读次数
📝 编程学习
Linux 网络管理器用法速查
概述在 Linux 系统中,网络管理器(NetworkManager)是管理网络连接的核心工具。它支持有线、无线、VPN、移动宽带等多种连接方式,提供了统一的配置接口。本文从实战角度出发,通过大量代码示例,演示如何高效使用 NetworkManager 进行网络管理。## 安装与基本状态检查### 安装 NetworkManager在大多数 Linux 发行版中,NetworkManager 预装。若未安装,可使用包管理器安装:bash# Debian/Ubuntusudo apt install network-manager# CentOS/RHELsudo yum install NetworkManager### 检查服务状态bash# 查看 NetworkManager 服务状态systemctl status NetworkManager# 启动/停止服务sudo systemctl start NetworkManagersudo systemctl stop NetworkManager# 设置开机自启sudo systemctl enable NetworkManager## 核心命令nmcli使用指南nmcli是 NetworkManager 的命令行客户端,功能强大且高效。### 查看网络设备状态bash# 列出所有网络设备nmcli device status# 查看指定设备详细信息(如 eth0)nmcli device show eth0### 管理网络连接bash# 列出所有已保存的连接nmcli connection show# 显示连接详细信息(如 MyWiFi)nmcli connection show "MyWiFi"# 激活/停用连接nmcli connection up "MyWiFi"nmcli connection down "MyWiFi"## 实战示例 1:配置静态 IP 地址以下 Python 脚本演示如何使用nmcli创建带静态 IP 的以太网连接。脚本自动检查连接是否存在,若存在则修改,否则创建。python#!/usr/bin/env python3"""配置静态 IP 地址的脚本依赖: nmcli 工具(NetworkManager)"""import subprocessimport sysdef run_command(command): """执行 shell 命令并返回输出""" result = subprocess.run(command, shell=True, capture_output=True, text=True) if result.returncode != 0: print(f"错误: {result.stderr}") sys.exit(1) return result.stdout.strip()def configure_static_ip(connection_name, device, ip_address, gateway, dns_servers): """ 配置静态 IP 连接 参数: connection_name: 连接名称(如 "Static-Eth0") device: 网络设备名(如 "eth0") ip_address: IP 地址/子网掩码(如 "192.168.1.100/24") gateway: 网关地址 dns_servers: DNS 服务器列表(逗号分隔) """ # 1. 检查连接是否存在 existing_connections = run_command("nmcli connection show") if connection_name in existing_connections: print(f"连接 '{connection_name}' 已存在,正在修改...") # 修改现有连接为静态 IP run_command(f"nmcli connection modify '{connection_name}' ipv4.method manual") run_command(f"nmcli connection modify '{connection_name}' ipv4.addresses {ip_address}") run_command(f"nmcli connection modify '{connection_name}' ipv4.gateway {gateway}") run_command(f"nmcli connection modify '{connection_name}' ipv4.dns {dns_servers}") else: # 创建新连接 print(f"创建新连接 '{connection_name}'...") run_command( f"nmcli connection add type ethernet con-name '{connection_name}' ifname {device} " f"ipv4.method manual ipv4.addresses {ip_address} " f"ipv4.gateway {gateway} ipv4.dns {dns_servers}" ) # 2. 激活连接 run_command(f"nmcli connection up '{connection_name}'") print(f"成功!连接 '{connection_name}' 已激活,IP: {ip_address}")# 示例使用if __name__ == "__main__": # 配置静态 IP:192.168.1.100/24,网关 192.168.1.1,DNS 8.8.8.8,8.8.4.4 configure_static_ip( connection_name="Static-Eth0", device="eth0", ip_address="192.168.1.100/24", gateway="192.168.1.1", dns_servers="8.8.8.8,8.8.4.4" )运行效果:脚本执行后,通过nmcli connection show可看到新连接,且ip addr show eth0显示静态 IP 已生效。## 实战示例 2:Wi-Fi 网络扫描与自动连接以下 Shell 脚本实现自动化 Wi-Fi 管理:扫描可用网络,自动连接已知网络,若失败则尝试连接开放网络。bash#!/bin/bash# Wi-Fi 自动连接脚本# 功能:扫描 Wi-Fi,自动连接已知网络,否则尝试开放网络# 定义日志函数log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"}# 检查 nmcli 工具if ! command -v nmcli &> /dev/null; then log "错误: nmcli 未安装,请先安装 NetworkManager" exit 1fi# 列出已保存的 Wi-Fi 连接saved_connections=$(nmcli connection show --active | grep wifi | awk '{print $1}')log "已保存的 Wi-Fi 连接: $saved_connections"# 扫描可用 Wi-Fi 网络log "正在扫描 Wi-Fi 网络..."scan_result=$(nmcli device wifi list)if [ $? -ne 0 ]; then log "扫描失败,请检查 Wi-Fi 适配器" exit 1fi# 提取 SSID 列表ssid_list=$(echo "$scan_result" | awk 'NR>1 {print $2}' | sort -u)log "可用网络: $ssid_list"# 尝试自动连接已知网络for ssid in $saved_connections; do if echo "$ssid_list" | grep -q "$ssid"; then log "发现已知网络 '$ssid',正在连接..." nmcli connection up "$ssid" if [ $? -eq 0 ]; then log "成功连接到 '$ssid'" exit 0 else log "连接 '$ssid' 失败" fi fidone# 若已知网络均失败,尝试连接第一个开放网络(无密码)log "未找到已知网络,尝试连接开放网络..."open_ssid=$(echo "$scan_result" | awk 'NR>1 && $3=="--" {print $2}' | head -1)if [ -n "$open_ssid" ]; then log "发现开放网络 '$open_ssid',正在连接..." nmcli device wifi connect "$open_ssid" if [ $? -eq 0 ]; then log "成功连接到开放网络 '$open_ssid'" exit 0 fifilog "所有尝试均失败,请手动配置网络"exit 1运行方法:保存为wifi_auto_connect.sh,赋予执行权限chmod +x wifi_auto_connect.sh,然后以 root 身份运行sudo ./wifi_auto_connect.sh。## 高级用法:VPN 与 DNS 管理### 配置 VPN 连接bash# 添加 OpenVPN 连接sudo nmcli connection add type vpn vpn-type openvpn \ con-name "MyVPN" ifname "*" \ vpn.data "connection-type = password, \ username = user@example.com, \ password-flags = 0, \ remote = vpn.example.com:1194"# 激活 VPNnmcli connection up "MyVPN"# 查看 VPN 状态nmcli connection show "MyVPN"### 管理 DNS 设置bash# 设置全局 DNS(所有连接生效)sudo nmcli general dns 8.8.8.8 1.1.1.1# 指定连接 DNS(覆盖全局设置)nmcli connection modify "MyWiFi" ipv4.dns "8.8.8.8 8.8.4.4"# 刷新 DNS 缓存sudo systemctl restart NetworkManager## 故障排查技巧### 查看日志bash# 查看 NetworkManager 日志journalctl -u NetworkManager -f# 实时监控网络事件nmcli monitor### 重置网络配置bash# 删除所有连接并重启服务(谨慎操作)sudo nmcli connection delete $(nmcli connection show | awk 'NR>1 {print $1}')sudo systemctl restart NetworkManager## 总结NetworkManager 是 Linux 网络管理的瑞士军刀,通过nmcli命令行可高效完成从基本连接到高级 VPN、DNS 配置的全流程管理。本文通过两个实战代码示例(Python 静态 IP 配置脚本 和 Shell Wi-Fi 自动连接脚本),展示了如何将nmcli集成到自动化运维中。核心要点:-nmcli device status查看设备状态-nmcli connection系列命令管理连接- 通过脚本化调用nmcli可实现网络自动化- 结合systemctl管理 NetworkManager 服务掌握这些技巧,你就能像老手一样在 Linux 终端中流畅驾驭网络配置。
编程学习
技术分享
实战经验