CKai 教程 · 进阶排障

装了 Clash / FlClash,
桌面端和终端却打不开?

多半是你以前手动设过 http_proxy / https_proxy 环境变量,它指向一个早就不存在的旧代理,把程序都带沟里了。本篇教你查出来、清干净。

一、先对症:是不是这个问题

如果你符合下面这些,基本就是环境变量的锅:

✗ 典型症状:Clash/FlClash 明明连上了、系统代理也开了,但终端命令(git / npm / pip / curl)超时;某些桌面 App(VS Code、Docker、下载工具)连不上、一直转圈。
✓ 根因:你(或以前装的别的软件)在系统里设过 http_proxy / https_proxy / all_proxy 环境变量,指向一个旧端口/旧软件(比如老的 7890、某个已卸载的代理)。程序优先读这个变量去连,那个代理早没了 → 直接超时。
💡 为什么系统代理开了还不行? 环境变量的优先级高于系统代理设置。命令行、很多 App 只认环境变量,你在 Clash 里开的"系统代理"它们根本不看。所以旧变量不清,怎么开代理都白搭。

二、选你的系统,照着做

💻 Windows
🖥️ Mac
🐧 Linux

第 1 步:查有没有旧代理变量

按 Win+R 输入 cmd 回车,打开命令行,粘贴:

命令提示符 (cmd)
C:\> set | findstr /i proxy
http_proxy=http://127.0.0.1:7890      # ← 有输出 = 中招了
https_proxy=http://127.0.0.1:7890

有输出(尤其端口不是你现在 Clash 的端口)就是它。PowerShell 里用 echo $env:http_proxy 也行。

第 2 步:图形界面删掉它

按 Win+R 输入 sysdm.cpl → 「高级」→ 「环境变量」。在用户变量和系统变量两个框里,找到并删除下面这些(有几个删几个):

环境变量
http_proxyhttp://127.0.0.1:7890删除
https_proxyhttp://127.0.0.1:7890删除
all_proxysocks5://127.0.0.1:7891删除
用户变量 + 系统变量里,把 http_proxy / https_proxy / all_proxy 全删掉

删完点确定,然后 把已经打开的终端 / VS Code / Docker 等全部关掉重开(甚至重启电脑最保险)——环境变量改了,旧窗口不会自动更新。

✅ 删完重开终端,再 set | findstr /i proxy 应该没有任何输出,就干净了。这时靠 Clash 的 TUN 模式 / 系统代理 就能让终端和 App 走代理。

第 1 步:查有没有旧代理变量

打开「终端」(Terminal),粘贴:

Terminal
$ env | grep -i proxy
http_proxy=http://127.0.0.1:7890       # ← 有输出 = 中招了
https_proxy=http://127.0.0.1:7890
all_proxy=socks5://127.0.0.1:7891

第 2 步:临时清掉(当前终端立刻生效)

Terminal
$ unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
$ env | grep -i proxy      # 没输出 = 当前终端已干净

这样当前这个终端窗口马上就好了,但新开窗口又会回来——因为它写在启动文件里,要做第 3 步永久删。

第 3 步:永久删(从启动文件里删掉那几行)

这些变量一般写在 ~/.zshrc(新版 Mac)或 ~/.bash_profile 里。用命令找出来:

Terminal
$ grep -n -i proxy ~/.zshrc ~/.bash_profile ~/.bashrc 2>/dev/null
/Users/you/.zshrc:42:export http_proxy=http://127.0.0.1:7890   # ← 就是它

用编辑器打开那个文件(比如 open -e ~/.zshrc),把含 proxy 的那几行 export 删掉,保存。然后:

Terminal
$ source ~/.zshrc      # 或者直接关掉终端重开
✅ 删完新开终端 env | grep -i proxy 没输出即成功。之后靠 Clash Verge/FlClash 的 TUN 模式 / 系统代理 让终端走代理。

第 1 步:查

terminal
$ env | grep -i proxy
http_proxy=http://127.0.0.1:8080       # ← 有输出 = 中招了

第 2 步:临时清

terminal
$ unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY

第 3 步:永久删(逐个文件查删)

可能写在下面任意文件里,挨个查、删掉含 proxy 的 export 行:

terminal
$ grep -rn -i proxy ~/.bashrc ~/.zshrc ~/.profile /etc/environment /etc/profile.d/ 2>/dev/null

删完 source ~/.bashrc 或重开终端。若是 /etc/environment 里的(全局),需 sudo 编辑删除后重新登录。

✅ 干净后靠 Clash 的 TUN 模式接管;命令行想单独走代理,再手动 export https_proxy=http://127.0.0.1:7897(你 Clash 的正确端口)即可。

三、两种正确做法(二选一)

做法 A(推荐)· 删干净 + 开 TUN:把旧的环境变量全删掉,然后在 Clash Verge / FlClash 里打开「TUN 模式 / 虚拟网卡」。TUN 会在系统底层接管所有流量,终端、桌面 App 全自动走代理,不用再设任何变量。
做法 B · 把变量指向 Clash 的正确端口:如果你就想用环境变量控制,那就把它们改成 Clash 当前的混合端口(常见 7897,在 Clash 设置里能看到):
export https_proxy=http://127.0.0.1:7897。端口一定要对,错了就还是打不开。
⚠️ 最容易踩的坑:环境变量里的端口是旧的/别的软件的(比如 7890、1080、8080),而你现在 Clash 是 7897。程序照着旧端口连一个不存在的代理 → 超时。要么删掉、要么把端口改对,二者选一。
常见问题
怎么知道我 Clash 的端口是多少?

打开 Clash Verge / FlClash,在设置 / 端口设置里看「混合端口 / Mixed Port」,我们的配置默认是 7897。做法 B 里就填这个。

删了环境变量,终端还怎么走代理?

开 Clash 的 TUN 模式(虚拟网卡) 就行,它在系统层接管,终端自动走代理,无需任何变量。这也是最省心的方式。

改完为什么还是不行?

八成是没重开窗口:环境变量改动,已经打开的终端 / VS Code / Docker 不会自动刷新,必须全部关掉重开,或直接重启电脑。

git / npm 有它们自己的代理设置吗?

有。若单独给它们设过,也要清:
git:git config --global --unset http.proxy 和 https.proxy;
npm:npm config delete proxy 和 npm config delete https-proxy。

我怕删错东西

只删含 proxy 字样的那几行/那几个变量,别的不动。删错了顶多某个软件不走代理,不会搞坏系统。拿不准就把 env | grep -i proxy 的结果核对,只删含 proxy 的那几行。