终端使用代理加速的正确方式
终端使用代理加速的正确方式
我们在终端使用 Homebrew、git、npm、pip 等命令时,经常因为网络问题而安装失败。尤其是第一次安装 Homebrew,不少人需要花很长时间解决,心里不知吐槽了多少遍“该死的网络”。
虽然设置国内镜像确实有用,但镜像有时更新不及时,且没有普适性。今天就介绍一种通用的方法:让终端也走代理。这样无论你用什么包管理器,都能享受代理带来的加速。
本文以 Shadowsocks 为例,其他代理软件(如 Clash、V2Ray)配置思路完全一致,只需找到对应的 HTTP 代理端口即可。
一、macOS & Linux
1. 基础环境变量
终端命令行的网络请求默认不会经过代理,我们需要通过设置环境变量来告诉系统使用代理。
在终端中直接执行以下命令可以临时开启代理(仅对当前终端窗口有效):
bash
export http_proxy=http://127.0.0.1:1080export https_proxy=$http_proxy注意:1080 是 HTTP 代理的默认端口,但你的实际端口可能不同。请打开 Shadowsocks 的偏好设置 → 高级,查看 HTTP 代理端口,将上述命令中的 1080 替换为你自己的端口。
2. 便捷脚本(永久生效)
每次都手动敲命令太麻烦,我们可以写两个函数,方便随时开关代理。
首先根据你使用的 Shell 决定配置文件:
- 执行
echo $SHELL查看 Shell 类型/bin/bash→~/.bash_profile/bin/zsh→~/.zprofile
然后使用以下命令将脚本追加到对应的配置文件,并立即生效(以下以 .zprofile 为例,请按实际情况替换):
cat >> ~/.zprofile << 'EOF'function proxy_on() { export http_proxy=http://127.0.0.1:1080 # 端口按实际情况修改 export https_proxy=$http_proxy echo -e "终端代理已开启。"}
function proxy_off() { unset http_proxy https_proxy echo -e "终端代理已关闭。"}EOF
source ~/.zprofile之后,你只需要在终端输入 proxy_on 即可开启代理,输入 proxy_off 关闭代理。
3. 验证代理是否生效
执行以下命令,如果返回的 IP 是你代理服务器的 IP,说明代理生效:
curl cip.cc或者使用:
curl -I https://www.google.com如果看到 HTTP/2 200 之类的响应,说明可以正常访问 Google。
注意:有时 Google 会返回
403,这是因为 Google 对某些代理 IP 做了限制,可以换用cip.cc验证 IP 归属地。
二、Windows
Windows 下的配置略有不同,主要有两种方法:通过 CMD/PowerShell 设置环境变量,或者使用图形化工具。
1. 临时设置(CMD)
在命令提示符中执行:
set http_proxy=http://127.0.0.1:1080set https_proxy=http://127.0.0.1:1080这种方法只对当前 CMD 窗口有效,关闭后失效。
2. 永久设置(系统环境变量)
通过 系统属性 → 高级 → 环境变量,为当前用户或系统添加两个变量:
- 变量名:
http_proxy,值:http://127.0.0.1:1080 - 变量名:
https_proxy,值:http://127.0.0.1:1080
设置后重新打开终端即可生效。
3. PowerShell 便捷函数
在 PowerShell 中,可以将函数添加到 $PROFILE 中,实现类似 Linux 的开关功能。
首先检查 $PROFILE 文件是否存在:
Test-Path $PROFILE如果返回 False,则创建它:
New-Item -Path $PROFILE -ItemType File -Force然后用记事本打开编辑:
notepad $PROFILE添加以下内容:
function proxy_on { $env:http_proxy = "http://127.0.0.1:1080" $env:https_proxy = "http://127.0.0.1:1080" Write-Host "终端代理已开启。"}
function proxy_off { Remove-Item Env:http_proxy -ErrorAction SilentlyContinue Remove-Item Env:https_proxy -ErrorAction SilentlyContinue Write-Host "终端代理已关闭。"}保存后,重启 PowerShell 或执行 . $PROFILE 使函数生效。之后就可以使用 proxy_on 和 proxy_off 了。
三、其他代理方式
除了设置环境变量,还有一些更灵活的方式可以实现终端代理。
1. 使用 Socks5 代理
某些代理软件只提供 Socks5 端口,没有开启 HTTP 代理。此时可以用工具将 Socks5 转换为 HTTP,或者直接设置 ALL_PROXY 变量(某些软件支持 Socks5)。
export all_proxy=socks5://127.0.0.1:1080 # 端口为 Socks5 端口export http_proxy=socks5://127.0.0.1:1080export https_proxy=socks5://127.0.0.1:1080注意:并非所有命令行工具都支持 Socks5,例如 curl 和 wget 支持,但 git 需要额外配置。
2. 为 Git 单独设置代理
如果你只想让 Git 走代理,而其他命令不走,可以单独配置 Git:
# HTTP 代理git config --global http.proxy http://127.0.0.1:1080git config --global https.proxy http://127.0.0.1:1080
# Socks5 代理git config --global http.proxy socks5://127.0.0.1:1080git config --global https.proxy socks5://127.0.0.1:1080
# 取消代理git config --global --unset http.proxygit config --global --unset https.proxy3. 使用 proxychains(Linux/macOS)
proxychains 是一个强大的工具,可以强制任意命令通过代理,无需修改环境变量。
-
安装:
brew install proxychains-ng(macOS) 或sudo apt install proxychains(Debian/Ubuntu) -
配置:编辑
/etc/proxychains.conf,在末尾添加代理信息,如:socks4 127.0.0.1 1080 -
使用:在需要代理的命令前加上
proxychains4(或proxychains),例如:Terminal window proxychains4 brew install wget
4. 仅对当前命令临时启用代理
如果你不想全局开启代理,只想让某一条命令走代理,可以直接在命令前加上环境变量赋值:
http_proxy=http://127.0.0.1:1080 https_proxy=http://127.0.0.1:1080 curl cip.cc这种方式只对紧跟的命令生效,不影响后续命令。
四、常见问题
1. 如何获取正确的代理端口?
- Shadowsocks:在客户端设置中查看「HTTP 代理端口」,通常默认为
1080或1087。 - Clash:在配置文件中查看
port(HTTP 代理端口)和socks-port,或者打开 Clash 面板查看。 - V2Ray:取决于客户端配置,一般也会提供 HTTP 或 Socks 端口。
2. 为什么设置代理后某些命令仍然很慢?
可能是 DNS 解析没有走代理。可以尝试设置 ALL_PROXY,或者使用支持远程 DNS 解析的工具(如 Clash 的 redir-host 模式)。对于 curl 等工具,也可以使用 --socks5 参数指定 Socks5 代理。
3. 使用 Google 验证时返回 403
Google 可能会检测代理 IP 并返回 403,这并不代表代理失效。建议使用 cip.cc 或 ip.sb 等 IP 查询网站验证。