
用Ubuntu这几年apt源这事儿给我留下的印象最深。刚上手那阵子每次执行apt install都得盯着进度条发呆一个几MB的包能拖到天荒地老中间还动不动就断断完还得重新下载。后来我了解到这问题多半出在软件源上也就是apt从哪儿拉软件包的地址。把源换成阿里云镜像之后下载速度几乎是肉眼可见地窜上来原来几十分钟的更新任务几十秒就能跑完。这篇文章我就把这个操作从头到尾拆开讲一遍包括为什么要这么做、每一步在干什么、失败时怎么排查尽量让刚接触Linux的朋友也能照着做成功也让老手能从中找到一些平时不太注意的细节。1. 为什么要把 apt 源换成阿里镜像换源这个操作听起来像是在改系统配置其实它做的只是一个非常朴素的事情告诉apt“你可以去哪个服务器下载软件”。默认情况下Ubuntu使用的是官方源服务器分布在海外从国内访问时绕了很远的路速度和稳定性自然都受影响。1.1 官方源为什么在国内这么慢Ubuntu官方源默认指向的是archive.ubuntu.com这类地址服务器大多部署在境外。国内用户访问时网络请求要经过国际出口在高峰期丢包、超时都是常事。apt在下载软件包时还会校验完整性如果连接中途断开往往整个deb包都要重新拉取体验就更差了。我最早不当回事觉得慢就慢吧多等一会儿总行。直到有一次在服务器上执行apt-get dist-upgrade需要升级几百个包结果跑了一个多小时还在那边反复重试我才意识到这不是简单等一等就能解决的问题。网络链路质量差不是你本地带宽高就能弥补的换一个国内可达的镜像源就是最直接的解法。1.2 阿里源好在哪儿又该注意什么阿里云镜像站是国内用得比较广泛的Linux软件源之一它的优势主要体现在几个方面。首先是速度服务器同样部署在国内访问延迟低满带宽下载是常态。其次是同步频率它和Ubuntu官方源保持定期同步绝大多数软件包都能及时更新日常使用基本感觉不到差异。再有就是稳定性大型镜像站的基础设施和冗余做得比较足不会因为一点小故障就大面积不可用。换成阿里源之前我也对比过其他几个国内源。有的同步不及时装某些新版本软件时找不到包有的覆盖率不够第三方源要手动补配置。相比之下阿里源在通用性和更新速度上平衡得比较好加上它的配置方式简单粗暴几乎就是替换文件里的服务器地址非常适合作为首选。不过有一点需要提前说明镜像源没有好坏绝对之分只有适不适合你的网络环境。如果你所在的网络访问其他镜像站更快那就灵活调整不用迷信哪一个。换源的核心思路是一样的就是想办法让apt离你的网络更近一步。2. 换源前的准备工作很多教程上来就让你改文件但我不建议这么做。换源看起来只是一条sed命令的事可如果版本搞错、文件改坏后面排查起来反而浪费时间。我习惯把准备工作分成三步确认系统版本、备份原始配置、搞清楚源文件的格式含义。2.1 先搞清楚你的 Ubuntu 版本Ubuntu每个正式版本都有一个代号比如20.04叫focal22.04叫jammy24.04叫noble。阿里源的配置内容里必须带上这个代号因为软件仓库是分目录存放的版本不同路径就不同。你要是拿jammy的源去配focal的系统轻则更新报404重则装错依赖把系统搞出问题。查看版本最直接的办法是执行lsb_release -a如果这条命令没装就用下面这条cat /etc/os-release看到VERSION_CODENAME这一行就足够了比如VERSION_CODENAMEjammy说明系统是22.04下面写源时就用jammy字样。我还习惯同时看一眼系统架构执行uname -m确认自己是amd64还是arm64。虽然阿里源大多数情况下能自动适配架构但手动确认一次能避免后续安装软件时踩到架构不匹配的坑。2.2 给源文件做好备份改系统配置文件之前先备份这个习惯能救你很多次。尤其是源文件这种改错会影响整个软件管理的文件备份更是必须做。原配的sources.list是apt工作正常的基准配置一旦你改坏或者写错还能用备份快速还原不至于手忙脚乱。备份命令很简单sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak有些新版Ubuntu已经把源拆分到了/etc/apt/sources.list.d/目录下用ubuntu.sources这种新格式。这时候建议把整个目录都备份一下sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak备份完不要急着走顺手验证一下文件确实生成了用ls命令看一眼就行。我就遇到过有人敲完备份命令后没确认后来改完源才发现备份根本没生成只能对着报错干瞪眼。2.3 理解 source list 里每一行在干什么Ubuntu的源文件里每一行都代表了apt可以访问的一个软件仓库。传统的sources.list格式大概是这样的deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse这一行拆开来看deb表示这是个二进制软件包仓库后面跟的是服务器地址然后是版本代号最后是仓库组件。组件里的main是官方维护的自由软件restricted是驱动等受限软件universe是社区维护的自由软件multiverse是包含版权或法律限制的软件。默认配置通常把四个组件全写上这样能安装的软件范围才完整。新版Ubuntu使用deb822格式写在/etc/apt/sources.list.d/ubuntu.sources里结构上是段落式的。但不管哪种格式要改的核心都是服务器地址。顺便说一句security仓库也很重要它负责推送安全更新换源时别把安全更新仓库漏了出现apt提示有安全漏洞没修复通常就是因为它没配上。3. 手把手配置阿里源准备工作做完了接下来就是实际操作。这一部分我会给出不同版本的完整源内容再讲两种写入方式最后说怎么验证是否生效。整个过程跟着走基本不会有问题。3.1 不同 Ubuntu 版本的源内容阿里云官方镜像站提供了现成的源配置示例直接复制对应的版本段落就行。这里拿最常见的三个版本举例注意把版本代号换成你自己系统的代号。20.04focal的源内容如下deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse22.04jammy则是deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse24.04noble也一样把代号换成noble就行deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse要是Ubuntu版本比较老或者之后出了新版本直接上阿里云镜像站的帮助页面查现成的配置比自己记代号和路径靠谱得多。另外如果你在用ARM架构的机器地址大概率不用变阿里源会自动处理架构重定向这一点实测下来问题是比较少的。3.2 用命令写入源文件的两套方案写入方式有两种我分别说一下。第一种适合有图形界面或者习惯用编辑器的朋友。直接用nano打开文件把原来的内容删掉粘贴新的源内容保存退出。如果你更熟悉vim就用vim操作效果一样sudo nano /etc/apt/sources.list这里提醒一个小细节编辑完成后一定检查有没有多余的空格、特殊符号有时候从网页复制内容会带上隐藏的格式字符一旦混进源文件apt解析时就会报“invalid value”之类的错。第二种方式适合命令行操作用echo把内容重定向到文件里。我常用的是给文件追加内容前先清空或者直接用多行字符串一次写入。比如sudo bash -c cat /etc/apt/sources.list EOF deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse EOF如果你用的是新版Ubuntu的sources.list.d目录结构建议把新的deb822格式配置写到/etc/apt/sources.list.d/ubuntu.sources里或者直接新建一个阿里源配置文件同时注释掉旧文件。个人经验是新老格式混用容易让人困惑干脆就把默认的ubuntu.sources内容替换成对应的阿里源段落再清掉sources.list里的官方地址避免两处配置冲突。3.3 更新软件源缓存并验证源文件改完之后必须执行apt update让系统重新拉取软件列表这一步跑不起来的话前面全都白做。命令是sudo apt update正常执行时终端会看到从mirrors.aliyun.com下载索引文件的过程最后提示“Reading package lists... Done”。看到这里基本就说明源已经生效了。接着可以顺手跑一次sudo apt upgrade用来验证软件包升级是否正常。第一次换源后跑upgrade可能会升级一批软件包这属于正常现象因为镜像源同步的内容可能比你本地缓存的更新。实测下来阿里源在高峰期也能保持比较稳定的连接就算偶发一次两次超时多跑一遍apt update往往就恢复了。4. 常见问题排查与避坑实录换源这个操作本身不难难的是出错之后怎么定位。我把自己踩过和帮别人排查过的典型问题整理出来按优先级排了个序你遇到报错时先对照看。4.1 404 错误仓库地址对不上版本更新时如果看到类似这样的提示Err:6 http://mirrors.aliyun.com/ubuntu/ jammy Release 404 Not Found原因基本只有一个你配置的版本代号和系统实际版本对不上或者镜像站没有收录这个仓库路径。解决办法是先确认自己的系统版本再回去对比3.1节的配置内容把代号改正确。还有一种情况是把软件源写太杂比如同时配置了老版本和新版本的仓库apt在做索引时就会报找不到某个目录的错。我建议保持源文件干净一个版本对应一份配置不要想着多管齐下。4.2 签名验证失败或 NO_PUBKEY执行apt update时偶尔会出现签名验证相关的报错像是NO_PUBKEY后面跟一长串密钥ID。这其实是系统在告诉你它不认这个仓库的GPG密钥。阿里云镜像站作为官方源的同步镜像一般来说密钥是齐全的但如果你的系统缺少某些第三方仓库密钥或者密钥过期了就会触发这个提示。处理方式分两步。第一步先试着更新密钥缓存sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密钥ID老版本里apt-key还能用新版Ubuntu更推荐把密钥放到/etc/apt/trusted.gpg.d/目录下。实在不行就搜索一下对应仓库的官方密钥安装说明按它的方式导入。多数情况下做完这些再跑一遍apt update就能顺利通过。4.3 连接超时或拒绝连接源文件配置正确但更新时卡住或者提示connect timed out这通常是网络层面的问题。镜像站并不是每一个时刻对所有网络都友好有些网络环境对海外IP限速特别明显这时可以检查一下有没有走代理或者尝试切换DNS。我有个比较土但有效的排查法先单独访问一下镜像站首页看看浏览器能不能正常打开。如果能打开而apt不行多半是防火墙或代理配置的问题如果浏览器也打不开那基本就是你的网络到镜像站根本不畅通这时候换一个国内源反而更实际。4.4 换源后软件包版本偏旧换源后有人会发现某些软件版本比官方源上标注的旧原因是镜像站的同步需要时间。阿里源通常同步频率很高但具体到每一个仓库、每一个包更新可能有延迟。遇到特别着急装的版本可以先用apt-cache policy 软件包名看看当前仓库里提供的版本如果确实落后要么等镜像同步要么去软件官方仓库加一行第三方源。需要注意第三方源和阿里源混用时依赖关系可能变复杂装完容易出问题。我的习惯是尽量少混源真要加第三方仓库也只在必要时临时启用装完就注释掉。4.5 关于安全性的几个提醒有些人换完源就不闻不问了其实有几个小细节值得留心。第一不要把源文件里的deb地址改成http之外的奇怪协议除非你非常清楚自己在做什么。默认的http在传输时没有加密如果担心被篡改可以考虑HTTPS镜像但前提是你的源确实支持。第二勤更新apt缓存别让软件列表太久没有刷新否则安全补丁会滞后。第三如果哪天系统提示某个软件包来自“未认证”的仓库先想想自己是不是加了奇怪的源再决定是否安装。我个人在实际操作里的体会是换源这件事本质上不是“一劳永逸”而是把软件获取这件事从不可控的境外网络转移到一个更可控的国内节点。它的价值在于让你后续安装软件、升级系统时都能有一个稳定的基础。对新手来说按照这个流程操作一次以后再遇到源相关的问题思路会清晰很多。最后分享一个小技巧换完源后定期执行一次apt update apt list --upgradable能让你对系统里有哪些可更新包心里有数这个习惯比临时抱佛脚强太多了。