.zshrc 中的环境变量只在 交互式 zsh 会话 中生效,而 apt-get 通常是在 非交互式 shell直接以 root 身份 运行的。注释掉 .zshrc 后仍然走代理,说明代理设置存在于其他地方。

常见原因及排查方法

1. apt 自身配置了代理

apt 有自己的代理配置文件,不受 shell 环境变量影响:

# 检查 apt 代理配置
cat /etc/apt/apt.conf
cat /etc/apt/apt.conf.d/* | grep -i proxy

如果看到类似下面的内容,就是 apt 直接配置了代理:

Acquire::http::Proxy "http://192.168.10.99:7890";
Acquire::https::Proxy "http://192.168.10.99:7890";

清除方法:

sudo rm -f /etc/apt/apt.conf.d/*proxy*
# 或者编辑删除其中的 Proxy 行
sudo nano /etc/apt/apt.conf

2. 系统级环境变量

检查这些全局配置文件:

# 系统级环境变量
cat /etc/environment | grep -i proxy
cat /etc/profile | grep -i proxy
cat /etc/profile.d/* | grep -i proxy

# 当前用户所有 shell 共用
cat ~/.profile | grep -i proxy
cat ~/.bashrc | grep -i proxy   # 即使你用 zsh,apt-get 可能通过 bash 调用

3. 当前 shell 会话还缓存了旧的环境变量

如果你是在注释 .zshrc 之前 打开的终端,当前会话中的 http_proxy 环境变量仍然有效:

# 检查当前环境变量
echo $http_proxy
echo $https_proxy
env | grep -i proxy

解决方法: 关闭当前终端,重新打开一个新的,或者手动取消:

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

4. sudo 保留了环境变量

如果用 sudo 运行 apt,且 sudo 配置保留了代理变量:

# 检查 sudo 环境
sudo env | grep -i proxy

快速排查步骤

按顺序执行:

# 1. 确认当前 shell 是否有代理变量
echo "当前 shell 代理: $http_proxy"

# 2. 确认 apt 自身配置
grep -ri proxy /etc/apt/apt.conf.d/ 2>/dev/null

# 3. 确认系统级配置
grep -ri proxy /etc/environment /etc/profile /etc/profile.d/ 2>/dev/null

# 4. 确认 sudo 下是否还有
sudo env | grep -i proxy

最可能的结论

根据你描述的现象(apt 明确显示连接 192.168.10.99),最大可能是 /etc/apt/apt.conf.d/ 目录下有代理配置文件,因为 apt 的 Acquire::http::Proxy 设置优先级高于环境变量,且独立于 shell 配置。

找到并删除那个文件即可:

sudo ls -la /etc/apt/apt.conf.d/
sudo rm /etc/apt/apt.conf.d/??-proxy  # 根据实际文件名调整

修改后无需重启,sudo apt-get update 立即生效。