macos无原生一键导入导出全部网络配置的gui功能,需组合networksetup命令、preferences.plist文件及脚本实现迁移:导出用-listnetworkserviceorder和-getwebproxy等提取参数,导入须分层执行-setwebproxy等命令并重排服务顺序。

macOS 原生不提供“一键导入导出全部网络配置”的图形界面功能,但可通过系统内置工具组合实现可靠、可复用的配置迁移。核心路径是:用 networksetup 管理服务级参数(如代理、DNS),用偏好设置文件(preferences.plist)保存完整结构,再辅以脚本封装提升可用性。
导出当前网络配置为可迁移文件
以下命令组合可生成一份包含关键网络状态的文本快照,适合备份或人工比对:
- 运行
networksetup -listnetworkserviceorder获取服务启用顺序(含设备映射,如en0 → Wi-Fi) - 执行
for s in $(networksetup -listallnetworkservices | grep -v "^$"); do echo "== $s =="; networksetup -getwebproxy "$s" 2>/dev/null; networksetup -getautoproxyurl "$s" 2>/dev/null; networksetup -getdnsservers "$s" 2>/dev/null; done提取各服务的代理与 DNS 设置 - 用
sudo plutil -p /Library/Preferences/SystemConfiguration/preferences.plist | head -100查看底层配置结构(建议重定向保存为prefs.json备份) - 检查自定义解析规则:
ls /etc/resolver/ && cat /etc/resolver/* 2>/dev/null
导入配置需分层操作,不能仅靠单个文件
macOS 不支持直接双击导入 plist 或 .mobileconfig 类型的“全量网络配置包”。实际导入必须拆解执行:
- 先用
networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8080设置 HTTP 代理;若用 PAC,则用networksetup -setautoproxyurl "Wi-Fi" "http://example.com/proxy.pac" - 用
networksetup -setproxybypassdomains "Wi-Fi" "localhost" ".local" "192.168.0.0/16"补全绕过列表(注意空格分隔、点号保留) - DNS 需逐服务设置:
networksetup -setdnsservers "Wi-Fi" 8.8.8.8 1.1.1.1 - 如需恢复完整服务结构(如新增 USB Ethernet 或调整优先级),须配合
networksetup -ordernetworkservices命令重新排序
用 shell 脚本实现“半自动”切换预设
下面是一个轻量实用的代理开关脚本框架,能动态识别当前活跃服务并安全切换:
- 开头检测权限:
networksetup -getwebproxy "Wi-Fi" >/dev/null 2>&1 || { echo "请使用 sudo 运行"; exit 1; } - 自动获取当前出口服务:
iface=$(route -n get default 2>/dev/null | awk '/interface:/ {print $2}'); svc=$(networksetup -listnetworkserviceorder | awk -v i="$iface" '$0 ~ i {getline; print $0}' | sed 's/^[[:space:]]*//') - 封装开关逻辑:
networksetup -setwebproxystate "$svc" on或off,比清空地址更稳妥 - 启用 PAC 后务必刷新:
networksetup -setautoproxystate "$svc" off && networksetup -setautoproxystate "$svc" on
补充:GUI 导出仅限单服务,非全系统配置
在“网络”偏好设置中点击服务后的「操作」弹出菜单,选「导出配置」,只能导出该服务的代理、DNS、IPv4/6 方式等有限字段,不包含服务顺序、resolver 规则、接口绑定关系等关键信息。导出文件为二进制 plist,不可直接编辑,仅用于同环境下的快速部署,不适合跨机型或复杂网络场景。











