Mac/Linux终端代理教程:git、npm、brew如何设置走代理
快速结论
教你如何为Mac和Linux系统配置终端代理,包括全局代理环境变量设置,以及Git、npm等工具的单独代理配置方案。
很多开发者在使用 Mac 或 Linux 系统时,都会遇到这样一个问题:虽然已经在系统设置里开启了代理,浏览器也能正常访问外网,但是一旦在命令行终端里执行 git clone、npm install 或是 brew update,就会出现连接超时、下载极为缓慢等现象。这正是因为这类命令行工具默认并不读取操作系统的图形化代理设置,因此需要单独配置终端代理。本文将详细讲解如何针对常用的开发工具和终端环境进行代理设置,让你告别命令行网络卡顿的烦恼。
在进行终端代理配置前,拥有一个稳定高速的网络节点是前提条件。目前市面上有许多优秀的机场推荐方案可供选择,例如 SOGO云提供月付IEPL专线,月付基础版为25元150GB,同时可以使用优惠码sogo10000来获取更划算的价格。稳定的网络环境可以极大地提高开发过程中拉取代码和依赖包的速度。
如果需要稳定的节点服务,可以参考本站的 稳定机场推荐 榜单。
为什么终端不走系统代理
在 macOS 和绝大部分 Linux 发行版中,图形界面的网络设置里开启的系统级代理,主要供基于系统网络接口开发的图形界面应用(如 Safari、Chrome 等浏览器)使用。而终端中的许多命令行工具(例如 curl、wget、git、npm、brew、go 等),往往是自己实现了一套网络请求逻辑,或者直接读取环境变量,它们默认会忽略图形界面中的系统代理配置。
因此,要在终端中顺畅地访问外部网络,必须显式地告诉这些工具当前网络环境的代理服务器地址。通常有两种思路来解决这个问题:一种是通过设置操作系统的环境变量,另一种是分别配置各个工具自身的代理参数。此外,如果你想了解如何配置整个 Linux 系统的科学上网环境,可以参考相关的 Linux mihomo 设置教程。
临时设置终端代理环境变量
这是最常用也最轻量的一种方式,通过在当前的终端会话中导出(export)代理环境变量,使得当前终端里执行的所有命令都能走代理。
在终端中输入以下命令,可以临时设置 HTTP 和 HTTPS 代理(假设你的本地代理软件监听在 127.0.0.1:7890,请根据实际情况替换端口):
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
当这几条命令执行完毕后,当前的这个终端窗口就已经应用了代理。你可以使用 curl -I https://google.com 来测试是否连通。如果在返回内容中看到了 HTTP/2 200 等正常状态码,说明终端代理配置成功。
需要特别注意的是,这种方法仅仅在当前终端窗口有效。一旦你关闭这个终端,或者新开一个 Tab 页,代理设置就会失效,必须重新输入一遍命令。这种方式适合那些只在偶尔遇到网络问题时才需要翻墙的场景,避免代理一直开启影响本地局域网的测试。
永久设置终端代理环境(zsh / bash)
如果你希望每次打开终端时,都能够方便地开启或关闭代理,可以将上述的环境变量配置写入到你的 shell 配置文件中(如 .zshrc 或 .bashrc)。为了更加灵活地控制,我们一般推荐写成 alias(别名)函数,这样可以通过快捷指令来随时切换。
打开你的终端配置文件,例如使用 vim 编辑 ~/.zshrc(如果你使用的是 bash,则是 ~/.bashrc):
vim ~/.zshrc
在文件的末尾添加以下两段函数,分别用于开启代理和关闭代理。同样的,记得把其中的 7890 端口号换成你自己代理软件的本地监听端口:
# 开启终端代理
alias proxy="export http_proxy=http://127.0.0.1:7890; export https_proxy=http://127.0.0.1:7890; export all_proxy=socks5://127.0.0.1:7890; echo 'Terminal proxy enabled.'"
# 关闭终端代理
alias unproxy="unset http_proxy https_proxy all_proxy; echo 'Terminal proxy disabled.'"
添加完成后,保存并退出文件(在 vim 中按下 Esc,然后输入 :wq 并回车)。
接着,执行以下命令使配置文件立即生效:
source ~/.zshrc
现在,当你发现某个命令下载很慢时,只需要在终端里输入 proxy 并回车,这个终端就已经开启了代理;想要关闭时,只需要输入 unproxy 即可恢复直连。这种方式结合了永久配置的便捷性和按需使用的灵活性,是绝大多数开发者的首选方案。
git、npm、brew 单独设置
虽然上述的环境变量配置能够覆盖绝大多数支持读取环境变量的工具,但仍然有部分工具,或是我们更希望仅仅对特定工具开启代理,这时就需要针对 git、npm 等进行单独配置。
Git 代理设置
Git 是一款高度依赖网络的工具。你可以通过配置它的全局参数,让 Git 在执行 push、pull、clone 时默认走本地代理。
开启 Git 的 HTTP 和 HTTPS 代理:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
如果你希望取消 Git 的代理,可以使用以下命令:
git config --global --unset http.proxy
git config --global --unset https.proxy
这样配置之后,不论你当前的终端是否导出了 http_proxy 环境变量,Git 都会按照自身的全局设置来连接网络。
npm / yarn 代理设置
前端开发离不开 npm,下载包时不仅可以切换到淘宝镜像源,也可以直接挂上代理访问官方源。
为 npm 设置代理:
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
如需取消代理:
npm config delete proxy
npm config delete https-proxy
如果你使用的是 Yarn,其命令非常类似:
yarn config set proxy http://127.0.0.1:7890
yarn config set https-proxy http://127.0.0.1:7890
取消 Yarn 代理:
yarn config delete proxy
yarn config delete https-proxy
Homebrew 代理设置
Homebrew 是 Mac 上的必备包管理器。Homebrew 本身并没有特定的代理配置文件,它直接使用终端中的 all_proxy 或 http_proxy 环境变量。
因此,你只需要参考上面介绍的方法,使用 proxy 命令在终端里激活环境变量,再执行 brew install 即可让它通过代理下载包。此外,你也可以在执行 brew 时临时加上前缀:
ALL_PROXY=socks5://127.0.0.1:7890 brew update
用 TUN 模式一劳永逸
如果你厌烦了在不同的工具、终端和图形界面之间反复设置代理,或者有些更为底层的工具连代理配置都不支持,那么最好的解决方案就是直接启用 TUN 模式。
TUN(Tunnel)模式的核心原理是在操作系统内部创建一张虚拟网卡。通过路由规则,操作系统会将所有的网络流量强制引流到这张虚拟网卡上,然后由代理软件截获这些流量并交由远程服务器处理。由于是在操作系统的网络层直接接管流量,终端里的任何命令、脚本,甚至是不支持代理设置的应用,统统都会被强制走代理。关于 TUN 模式的详细工作原理与配置指南,可以参阅TUN模式科普教程。
目前市面上的主流代理软件(如 Clash for Windows, Clash Verge, V2rayN, Shadowrocket 等)均内置了对 TUN 模式的支持。你只需要在软件的高级设置或首页中勾选“开启 TUN 模式”(有时也叫虚拟网卡模式),软件会自动请求管理员权限并配置路由表。开启 TUN 之后,你不再需要在终端里 export http_proxy,也不需要给 Git、npm 单独做任何代理配置,即可体验到在整个操作系统级别下流畅的网络连接。这是目前对新手最为友好、开发体验最好的一种解决方案。
常见问题
设置了环境变量,为什么终端代理还是没生效?
请检查本地代理软件的端口是否与环境变量中设置的端口一致。如果是V2Ray、Clash等软件,默认本地端口通常是1080、7890等,如果输入错误则终端代理无法正常工作。
如何测试终端代理是否连通?
可以使用 curl -v https://www.google.com 命令,如果在输出信息中看到代理的IP或成功连接的字样,就说明当前终端环境已经成功走代理了。