debian(WSL) apt 代理配置

🛠️问题:

windows开启了网络代理,且wsl已设置网络为镜像模式,但是安装了第三方软件源(被墙)后却无法通过sudo apt update更新缓存。

🔍原因:

APT 有自己的配置体系:APT 使用独立的配置文件(如 /etc/apt/apt.conf)或专用命令行参数,不会自动继承 shell 的 http_proxy。
apt 命令本身确实支持读取 http_proxy 和 https_proxy 环境变量。但是,执行 apt 必须拥有 root 权限(即使用 sudo),而 sudo 默认会“清空”环境变量。sudo 为了安全,默认只保留极少数环境变量(如 PATH、TERM),将 http_proxy 等绝大多数变量丢弃。

解决方案

✅方案 1,为 APT 配置代理(推荐持久配置)

在 apt 的命令行配置中,Acquire 是 APT 内部负责文件获取(下载)子系统的名称。
简单来说,Acquire 就是 APT 的“下载引擎”,所有通过网络获取软件包、索引文件(Packages、InRelease 等)的操作,都由这个子系统负责。
在 WSL 中执行

sudo bash -c 'echo "Acquire::http::Proxy \"http://127.0.0.1:你的代理端口/\";" > /etc/apt/apt.conf.d/95proxies'
sudo bash -c 'echo "Acquire::https::Proxy \"http://127.0.0.1:你的代理端口/\";" >> /etc/apt/apt.conf.d/95proxies'

注意 http 必须是小写,因为 APT 的配置字段是区分大小写的。

验证:

cat /etc/apt/apt.conf.d/95proxies

然后再次执行 sudo apt update

删除代理配置文件(可选):

sudo rm /etc/apt/apt.conf.d/95proxies

✅方案 2. 临时命令行方式(不持久)

sudo apt -o Acquire::http::Proxy="http://127.0.0.1:你的代理端口" -o Acquire::https::Proxy="http://127.0.0.1:你的代理端口" update

⚠️只在 apt update 这一个命令的执行过程中生效, 之后 apt install <package> 还是不会走代理导致失败。

✅方案 3. 在 sudo 命令前临时指定(不持久)

sudo http_proxy=http://127.0.0.1:你的端口 https_proxy=http://127.0.0.1:你的代理端口 apt update

⚠️只在 apt update 这一个命令的执行过程中生效, 之后 apt install <package> 还是不会走代理导致失败。

✅方案 4.使用 sudo -E 选项,保留当前用户的所有环境变量(不持久)

export http_proxy="http://127.0.0.1:你的代理端口"
export https_proxy="http://127.0.0.1:你的代理端口"
sudo -E apt update

⚠️只在 apt update 这一个命令的执行过程中生效, 之后 apt install <package> 还是不会走代理导致失败。

附录,apt update 返回内容的状态标识

在 apt update 的输出中,这四种状态标识代表了 APT 在连接软件源服务器并比对本地缓存时的具体处理结果。简单来说:

  • Hit(命中):本地缓存有效,跳过下载(速度快)。
  • Get(获取):检测到更新,正在下载新数据。
  • Ign(忽略):文件无变化或非必需,主动跳过(通常无害)。
  • Err(错误):下载失败,需要立即关注并修复。
posted @ 2026-06-26 16:14  悠哉大斌  阅读(3)  评论(0)    收藏  举报