macos终端不直接控制clash等代理扩展,而是通过三类操作协同:设置系统级代理(影响图形应用)、配置终端环境变量(使curl/git走代理)、验证端口与连通性;需用networksetup、export、lsof等命令精准管理。
macos 终端本身不直接管理第三方代理辅助扩展(比如 clash、surge、shadowrocket desktop、proxifier 等),这些应用属于独立进程,有自己的配置界面和后台服务。终端能做的,是配合它们完成三类关键动作:设置系统级代理、配置终端自身网络出口、验证或切换其生效状态。重点不在“控制扩展本身”,而在“让系统和命令行按需走它的代理通道”。
查看并设置系统级代理(影响浏览器、App Store 等多数图形应用)
第三方代理工具通常会在启动后自动配置系统代理,但有时会失效或需要手动对齐。用 networksetup 可精确读写:
- 查当前 Wi-Fi 的 SOCKS 代理状态:
networksetup -getsocksfirewallproxy "Wi-Fi" - 启用 SOCKS5 代理(如 Clash 默认端口 7890):
networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 7890 - 同时开启并认证(若需用户名密码):
networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 7890 on username password - 关闭代理:
networksetup -setsocksfirewallproxy "Wi-Fi" off
注意:服务名(如 Wi-Fi)必须与 networksetup -listallnetworkservices 输出完全一致;改完需执行 networksetup -setrequirepasswordforproxies on(可选)防止被其他程序意外关闭。
让终端命令走代理(不影响系统其他应用)
系统代理默认不作用于终端命令(curl、git、brew 等)。需手动注入环境变量:
- 临时生效(仅当前窗口):
export http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890 - 永久生效(写入 shell 配置):
echo 'export all_proxy=socks5://127.0.0.1:7890' >> ~/.zshrc && source ~/.zshrc - 快速开关可加别名:
alias proxy='export all_proxy=socks5://127.0.0.1:7890'和alias unproxy='unset all_proxy'
验证是否生效:curl -v https://httpbin.org/ip 2>&1 | grep "Connected to",看到连接的是 127.0.0.1 即表示已走本地代理端口。
检查代理端口是否真实运行(排除扩展未启动或端口冲突)
很多问题其实不是配置错,而是第三方工具根本没在监听。终端可快速确认:
- 查 7890 端口是否被占用:
lsof -i :7890或netstat -vanp tcp | grep 7890 - 若无输出,说明 Clash/Surge 等未运行,或配置中未开启「系统代理」或「允许来自局域网的连接」
- 常见端口参考:Clash 默认 7890(HTTP/SOCKS)、Surge 默认 6152(HTTP)、Shadowrocket Desktop 默认 6152 或自定义
也可用 curl -x http://127.0.0.1:7890 https://httpbin.org/ip 直接测试代理连通性,避免依赖环境变量。
绕过代理或指定直连域名(配合扩展的规则策略)
有些代理工具支持「绕过中国大陆域名」或「直连内网地址」,终端可通过修改 /etc/hosts 或设置 NO_PROXY 辅助实现:
- 让终端跳过代理访问公司内网:
export NO_PROXY="192.168.0.0/16,10.0.0.0/8,company.local" - 若需永久生效,同样追加到
~/.zshrc;注意NO_PROXY对all_proxy(SOCKS)无效,只对http_proxy生效 - 某些 CLI 工具(如
git)支持单独配置:git config --global http.proxy 'http://127.0.0.1:7890'
这并非替代扩展自身的规则引擎,而是补足终端场景下更细粒度的流量控制。











