用了这么多年 Ubuntu,最折磨人的其实不是命令行操作,而是 apt-get install 那个下载速度。尤其在国内网络环境下,明明带宽几百兆,apt 硬是给你跑出几十 KB/s 的“龟速”,装个 build-essential 都能等出一杯咖啡的时间。后来我换了清华源、阿里源,速度确实有改善,但单线程下载的天花板摆在那里,遇上大包或者源站波动,照样卡到你怀疑人生。直到我折腾出 apt-fast 这个工具,才算是把带宽真正吃满了。
apt-fast 本质上是一个 apt 的包装脚本,它的核心思路很简单:把原本 apt 的单线程下载改成多连接并发下载,配合 aria2c 或 axel 这类下载工具,同时从配置好的多个镜像源拉取同一个包的不同分片,最后合并校验。实际用下来,同一个软件包,下载时间能缩短到原来的五分之一甚至十分之一,尤其适合装大型软件、批量更新系统依赖、或者在嵌入式开发板上交叉编译环境时使用。这篇文章我就从原理到配置,把 apt-fast 的完整安装和使用过程捋一遍,附上我这几年的踩坑记录,新手照着抄作业就行。
1. 先说清楚 apt-fast 到底做了什么
1.1 它和普通 apt 的下载逻辑有什么本质区别
要理解 apt-fast 为什么快,得先看看普通 apt 是怎么下载软件的。apt 默认调用的是 http 或 https 协议,通过单线程从你在 sources.list 里指定的那个源地址拉取 .deb 包。单线程意味着什么?就是不管你的宽带是 100M 还是 1000M,实际下载速度取决于源服务器愿意给你开多大窗口,以及网络链路的拥塞情况。国内访问某些海外源时,单线程速度经常被限制在几十 KB/s,这不是玄学,是国际出口带宽和 QoS 策略导致的现实。
apt-fast 的处理方式就取巧了。它不是一个独立的软件包管理器,而是一个胶水脚本。安装之后,你仍然用 apt-fast install <包名> 这种命令来操作,但脚本内部会做这些事情:
- 把你系统里
sources.list和sources.list.d/下所有已启用的软件源地址收集起来。 - 根据你的配置,把同一份
.deb文件的下载请求同时发给多个镜像站。 - 依赖
aria2c这类支持分片下载的工具,把文件切成几段,每个连接拉一段,最后拼起来。 - 下载完成后用
apt自带机制校验 GPG 签名和哈希,确认文件完整无损。
也就是说,apt-fast 不改变软件包的来源和校验逻辑,只改变“怎么把字节从服务器搬到本地”的方式。多镜像并发下载天然比单源单线程快,这是它最核心的优势。
1.2 为什么推荐用 aria2c 而不是 axel
apt-fast 支持两种下载后端,axel 和 aria2c,装哪个都能用,但我的建议是优先选 aria2c。这两个工具定位相似,但实现质量差距挺大。axel 年代久远,代码常年不更新,对 HTTPS 的支持依赖老旧的 OpenSSL 库,遇到某些新证书的源站会直接握手失败。而 aria2c 至今保持活跃维护,支持 HTTP/HTTPS/FTP/BT 等多种协议,对 IPv6、代理、断点续传的支持都很完善,分片调度的效率也更高。
从实际体验来看,aria2c 在弱网环境下的重试策略更聪明,某个连接断了它会自动换分片大小继续拉,不会整个任务卡死。axel 有时会出现某个分片反复失败,导致整个下载进程挂起,你得手动 Ctrl+C 重来。所以本文后面所有的配置和命令,都默认以 aria2c 作为后端来讲解,这也是大多数 apt-fast 用户实测后留下的选择。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的准备事项
2.1 先更新系统软件源并安装基础依赖
无论你是在 Ubuntu 桌面版、服务器版,还是在 WSL 里操作,第一步都是先确认系统软件源是正常的,然后装上 aria2c 和几个必要的基础工具。打开终端,逐行执行:
bash复制sudo apt update
sudo apt install -y aria2 wget gnupg lsb-release ca-certificates
aria2 是后续的核心下载引擎,wget 和 gnupg 用来处理某些安装脚本的密钥导入,lsb-release 可以帮助脚本识别你的 Ubuntu 版本号。这里强调一下,这一步不要跳过,有些朋友图省事直接装 apt-fast,结果装完之后脚本报 aria2c: command not found,还得回头补装,多折腾一趟。
执行完之后,可以用 aria2c --version 验证一下是否安装成功。如果能看到版本号输出,说明基础环境已经就绪。
2.2 检查网络环境和软件源配置文件
安装 apt-fast 之前,顺便检查一下你的软件源。apt-fast 的加速原理是“多镜像并发”,所以软件源里最好同时配置几个可用的镜像站。如果你目前只有官方源,或者只有一个国内镜像源,那并发效果会打折扣,不过也不会比普通 apt 慢,至少 aria2c 的多连接分片还是能带来一些提升。
查看当前软件源的命令是:
bash复制cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
国内用户建议至少配置两个镜像源,比如清华源和阿里源,或者中科大源和华为源。不同镜像站的网络路径不同,并发拉取时可以把各自的带宽优势叠加起来。注意,这里说的叠加只是下载阶段的加速,最终 apt 校验和安装仍然是以主源为准的,包的一致性和安全性没有任何折扣。
3. apt-fast 的两种安装方式详解
3.1 通过官方 PPA 源安装(推荐)
apt-fast 的维护者提供了一个官方 PPA,这是最省事的安装方式。PPA 的好处是后续 apt update && apt upgrade 可以直接升级 apt-fast 本身,不需要手动关注新版本。依次执行:
bash复制sudo add-apt-repository ppa:saiarcot895/apt-fast
sudo apt update
sudo apt install -y apt-fast
执行到第三步的时候,安装脚本会弹出几个交互式对话框,一般是问你用什么下载后端、允许的最大连接数是多少。如果你不想在对话框里浪费时间,也可以提前用环境变量规避,或者安装后再改配置文件。不过我更推荐新手在对话框里直接选 aria2,连接数先填 4,后面我们再精细化调优。
安装完成后验证一下版本:
bash复制apt-fast --version
能看到版本信息就说明装好了。如果你用的不是 Ubuntu,而是 Debian 或衍生发行版,PPA 方式不适用,可以直接跳到 3.2 节看手动安装方法。
3.2 从 GitHub 源码手动安装(备用方案)
有些场景下你不想引入第三方 PPA,比如公司内网环境有安全策略限制,或者你用的是 Debian 系但不想添加 Ubuntu 的 PPA,这时候可以走源码安装的路线。从 apt-fast 的 GitHub 仓库(仓库名就叫 apt-fast,作者是 ilikenwf)拉取脚本,手动放到系统路径里:
bash复制git clone https://github.com/ilikenwf/apt-fast.git
cd apt-fast
sudo cp apt-fast /usr/local/bin/
sudo cp apt-fast.conf /etc/
sudo chmod +x /usr/local/bin/apt-fast
这样只安装了主程序和默认配置,还差一个 completions 目录下的 bash/zsh 补全脚本,拷到对应目录即可:
bash复制sudo cp completions/apt-fast.bash /etc/bash_completion.d/
源码安装方式没有经过 PPA 的打包校验,所以需要你自己保证系统里有 aria2c 和 apt 这些基础命令。不过对于“公司内网环境不给用 add-apt-repository”的读者来说,这是最稳妥的路线。
3.3 安装完成后先跑一遍自检脚本
不管你用哪种方式装完,都建议先跑一个空操作验证基本功能:
bash复制sudo apt-fast update
这个命令会读取所有软件源索引,同时触发 apt-fast 脚本内部的配置加载逻辑。如果配置有问题,比如后端路径写错、镜像列表为空,这里就会直接报错,趁早暴露总比等到真正安装软件时再抓瞎好。
4. 核心配置文件的逐项解读
4.1 /etc/apt-fast.conf 的必改参数
apt-fast 的配置文件在 /etc/apt-fast.conf,用 sudo nano /etc/apt-fast.conf 打开,内容不算长,但里面的每一项都值得琢磨。下面是我挑出的几个关键参数和推荐设置:
bash复制# 下载后端,只能是 aria2c 或 axel
_APTFAST_DOWNLOAD_BACKEND="aria2c"
# 每台服务器允许的最大连接数
_MAX_CONNECTIONS_PER_SERVER="4"
# 允许 apt-fast 管理的镜像列表,按空格分隔
MIRRORS=( 'http://archive.ubuntu.com/ubuntu, http://mirrors.tuna.tsinghua.edu.cn/ubuntu' )
_APTFAST_DOWNLOAD_BACKEND 上文已经说过,选 aria2c。_MAX_CONNECTIONS_PER_SERVER 这个值比较讲究,填 4 到 8 都是安全区间,过高的数字会让源站以为你在恶意请求,反而触发限流。MIRRORS 这里要说明一下:如果留空,脚本会自动读取你 sources.list 里所有源;但如果手动填了,就只从你填的这几个列表里选择。我建议不要手动填死,留空让脚本自动适配就行。
4.2 分片大小与速度限制的调优思路
配置文件里还有几个进阶参数,平时用默认值就行,但理解它们的含义有助于处理特殊场景。_MIN_SPLIT_SIZE 和 _MAX_SPLIT_SIZE 控制分片大小的上下限,aria2c 会根据文件大小自动调整分片数量。默认的 _MIN_SPLIT_SIZE="1M" 意味着小于 1MB 的文件不拆片,直接单连接下载,避免小文件拆分的额外开销。这个设计很巧妙,因为拆片和合并也是要花时间的,小文件不值得折腾。
_DOWNLOAD_SPEED 是全局下载速度上限,默认是 0,表示不限速。如果你是多人共用的服务器,怕 apt-fast 把出口带宽占满影响其他人,可以设一个速度限制,比如:
bash复制_DOWNLOAD_SPEED="5000K"
单位是 KB/s,上面这行就把下载总速度限制在约 5MB/s。设置之后可以观察一段时间,如果发现下载经常因为限速拖慢整体安装流程,再适当调大。
4.3 配置代理和其他零碎参数
如果服务器是通过代理访问外网的,需要设置 _APTFAST_HTTP_PROXY 和 _APTFAST_HTTPS_PROXY,格式类似:
bash复制_APTFAST_HTTP_PROXY="http://127.0.0.1:7890"
_APTFAST_HTTPS_PROXY="http://127.0.0.1:7890"
注意,apt-fast 的代理配置只影响下载阶段,apt 本身的配置是独立的,需要另配 apt.conf 里的 Acquire::http::Proxy。两处要对应上,不然会出现“脚本走代理下载、但 apt 校验时直连超时”的精分现场。
另外一个容易忽略的配置是 _MAX_CONNECTIONS_PER_SERVER 乘上镜像数量的上限问题。apt-fast 默认允许同时打开的全局连接数上限较高,但你实际生效的总连接数大致等于“镜像数量 × 每服务器连接数”。比如你配置了 3 个镜像源,每服务器 4 连接,那实际并发大约 12 路,这在绝大多数场景下已经足够了。
5. 实战:安装、升级与卸载软件
5.1 常用命令和普通 apt 几乎一致
apt-fast 的命令设计原则就是“跟 apt 长得一样”,你不需要重新学一套操作。以下是我日常用得最多的几个命令:
bash复制# 更新软件源索引
sudo apt-fast update
# 安装软件包
sudo apt-fast install nginx
# 升级所有可升级的包
sudo apt-fast upgrade
# 发行版升级
sudo apt-fast dist-upgrade
# 安装本地 deb 文件
sudo apt-fast install ./google-chrome-stable_current_amd64.deb
# 清理下载缓存
sudo apt-fast clean
安装软件时的过程和普通 apt 一样,会先解析依赖、提示将安装哪些额外包,确认后才会进入下载安装流程。唯一不同的是,你会在日志里看到类似 aria2c 的分片下载进度,有时还能看到多个 URL 同时出现在下载列表里,那一瞬间确实有种“带宽跑满”的舒爽感。
5.2 大型软件安装实测记录
为了让你有个直观感受,我说一个最近的真实场景。前阵子我给一台开发机装 ROS 2 的完整桌面版,相关依赖加起来大概 1.8GB。用普通 apt 配合清华源,实测下载耗时约 6 分 40 秒。启用 apt-fast 并配置了清华源和阿里源两个镜像后,同一批软件包下载耗时缩减到 1 分 20 秒左右,差距接近五倍。整个过程里 CPU 占用不高,主要瓶颈反而在磁盘写入和 dpkg 的安装解压阶段,这说明下载已经不再是瓶颈了。
如果你的网络环境本身是千兆光纤,但软件源离你非常近,比如直接用内网镜像源,那 apt-fast 的提升幅度可能没那么夸张。因为它本质上是把多路低效连接合并成多路高效连接,当单路单线程速度已经接近物理带宽上限时,并发提升的空间自然会变小。但这不代表没用,至少它可以减少源站单连接限速带来的损失。
5.3 和 apt 混用会不会出问题
很多人担心,我昨天用 apt-fast install,今天用 apt install,两个工具混用会不会把系统搞乱。这个担心是多余的。apt-fast 只是把下载部分替换掉了,安装和依赖处理仍然是 apt 自己完成的。它生成的缓存目录、锁文件都和 apt 完全兼容,混用不会有任何冲突。
不过有一点要注意:如果 apt-get 进程正在运行,你执行 apt-fast 会提示锁被占用,这是正常的,两个工具共用同一个 dpkg 锁。反过来也一样,所以不要在系统正在自动更新的时候强行跑 apt-fast install,等它结束再操作。
6. 常见问题与故障排查实录
6.1 aria2c 退出码和下载失败的对策
用 apt-fast 最常见的报错来自 aria2c,比如:
text复制Exception caught
Exception: [AbstractCommand.cc:351] errorCode=1
这种错误信息很笼统,大多数情况下是某个镜像源连接超时或者 TLS 握手失败。遇到时先别慌,按下面顺序排查:
- 先单独测试所有软件源的连通性,
curl -I http://mirrors.xxx/ubuntu/看看是否返回 200。 - 检查
/etc/apt-fast.conf里有没有手动设置的错误代理,有就先注释掉。 - 确认系统时间和实际时间一致,
date -R看一下时区偏移,TLS 证书校验对时间偏差非常敏感。 - 在命令前面加
DEBUG=1跑一次,脚本会输出详细的子命令调用过程,能定位到具体是哪个 URL 失败。
如果只是个别镜像源不稳定,最简单的办法是删掉 sources.list.d/ 里对应的源文件,或者调整 MIRRORS 列表,只保留连通性好的源。没必要在一个站上死磕。
6.2 提示 MIRRORS 为空导致退化的解决思路
有些版本 apt-fast 在读取不到 sources.list 时,会直接退化为单源下载,表现就是“没感觉到加速”。排查方法是加 DEBUG=1 看日志,如果日志里显示 MIRRORS is empty,说明脚本没解析出任何源地址。
常见原因是 sources.list 里的镜像地址写法用了新格式(比如 deb822 格式的 .sources 文件),旧版 apt-fast 不支持它。解决方法要么是升级 apt-fast 到最新版,要么在配置文件里手动指定 MIRRORS,把几个镜像地址填进去:
bash复制MIRRORS=( 'http://mirrors.tuna.tsinghua.edu.cn/ubuntu, http://mirrors.aliyun.com/ubuntu' )
注意逗号后面有空格,这是脚本解析的分隔符。我自己就被这个格式坑过一次,漏了个空格导致整个列表没被正确识别。
6.3 升级大版本时 dist-upgrade 的隐藏技巧
当你需要从 Ubuntu 22.04 升级到 24.04 这类大版本时,apt-fast dist-upgrade 理论上也能用,但我不建议直接跨版本用。原因是大版本升级往往涉及内核、引导加载器和系统库的更换,apt-fast 的多源并发虽然快,但万一下载过程中某个镜像服务商临时抽风,可能导致你拿到不一致的包版本,虽然 APT 最后会做校验,但这种大型操作还是稳妥优先。
我的做法是:跨版本升级时先用普通 apt,日常安装软件和常规升级再切 apt-fast。毕竟系统大版本升级一年也就一两次,没必要为了那几分钟去冒额外的风险。
7. 进阶玩法与个人经验总结
7.1 搭配 proxychains 使用反向代理链
有些公司的内网服务器没有直连外网的权限,只能通过 HTTP 代理出网。apt-fast 配合代理链时,除了配置文件里的两个代理参数,还建议在启动命令前加上 proxychains4,把 aria2c 的子进程流量也统一走代理:
bash复制sudo proxychains4 apt-fast install python3-pip
这样能避免脚本里某些环节不走代理导致的超时。注意,proxychains 和 apt-fast 的代理配置只需要二选一,同时启用可能会让代理链反复套娃,速度反而更慢。
7.2 定时任务与无人值守升级
如果你管理着一批 Ubuntu 服务器,可以把 apt-fast 写进定时任务里,实现夜间自动更新。在 /etc/cron.daily/ 下新建一个脚本,内容类似:
bash复制#!/bin/bash
/usr/local/bin/apt-fast update
/usr/local/bin/apt-fast upgrade -y
然后 chmod +x 赋予执行权限。服务器会在每天凌晨自动更新软件包,白天你来上班时系统就已经是最新状态了。这里有个细节:无人值守模式下,apt-fast 的某些交互确认需要额外加 -y 参数,否则任务会卡在确认提示上。脚本里尽量把 -y 写全。
7.3 我踩过坑之后的一些建议
最后分享几个从实际使用中攒下的经验。第一,apt-fast 不是越新的版本就越好,如果你在某台老旧的 Ubuntu 16.04 上跑最新版,可能会因为脚本依赖了新版 bash 特性而报错,这种情况下锁住版本反而更安心。第二,下载缓存目录 /var/cache/apt-fast 会随时间膨胀,建议每个月跑一次 sudo apt-fast clean 清理掉不再使用的 deb 包。第三,如果你同时用了 unattended-upgrades 这一类的自动更新工具,注意它们默认调用的是 /usr/bin/apt-get,和 apt-fast 不冲突,但也不会自动享受加速效果,需要手动把命令替换成 apt-fast。
apt-fast 算是我装完 Ubuntu 之后第一批安装的工具之一。它解决的痛点足够具体,实现思路也足够简单高效,你在网上能找到的所有“Ubuntu 下载慢”的解决方案里,它是最直接改变下载行为的那一个。如果你也被 apt 的龟速折磨过,不妨花十分钟装好它,下次 apt update 和安装大型软件包的时候,你会明显感觉到区别。
