资讯详情

Ubuntu 20.04 apt换阿里源完整实操与避坑

📅 2026/9/17 14:46:03 | 华诺云谱 👁 阅读
Ubuntu 20.04 apt换阿里源完整实操与避坑
装完 Ubuntu 20.04 之后我做的第一件事永远是把 apt 源换成阿里源——不是因为它有多高级纯粹是被默认源那几十 KB/s 的速度折磨怕了。Ubuntu 20.04 换源到阿里源这件事说穿了就是把/etc/apt/sources.list里的官方地址替换成mirrors.aliyun.com几分钟就能搞定但它直接影响你后面装 Docker、编译环境、Python 依赖时是等着喝咖啡还是几秒钟拉完。这篇文章我会把换源的完整流程、每一条命令背后的意图、以及我踩过的那些坑一次性讲清楚不管你是刚在虚拟机里装好 Ubuntu 的新手还是已经用了一段时间但一直没折腾过源的老用户照着做都不会出问题。1. 换源这件事到底解决了什么问题1.1 apt 默认源慢在哪不是网速是链路很多人以为apt update慢是自己宽带不够其实跟带宽关系不大。Ubuntu 20.04 默认的/etc/apt/sources.list指向的是archive.ubuntu.com和security.ubuntu.com这两个官方归档站它们物理位置在海外。你发出去的请求要跨好几跳路由才能到达每一跳都有延迟和丢包风险最终体现出来就是apt update卡在Waiting for headers或者速度在 20KB/s 上下挣扎。更难受的是apt install安装大包时比如build-essential、docker-ce这类几百 MB 的东西中途断一次就得重来虽然 apt 有断点续传机制但反复重连的体验非常糟糕。这里有个细节值得说清楚apt 的下载是分片并发还是串行默认情况下 apt 会并行下载多个包但并发数有限。当你从海外源拉取时每个连接都要经历高延迟的握手并发带来的收益被延迟吃掉了。换成阿里源之后服务器在境内RTT 通常在 10ms 到 30ms 之间握手快、丢包少同样的并发数下吞吐量能差出一两个数量级。我实测过在同样的家用宽带上默认源apt update要两分多钟换阿里源之后稳定在 5 到 8 秒。1.2 阿里源凭什么稳镜像同步机制阿里源本质上是官方归档的一个完整镜像它通过定时任务把archive.ubuntu.com的内容同步到自己的服务器上。同步频率通常是一天几次对于 Ubuntu 20.04 这种已经进入稳定期的 LTS 版本绝大多数包早就同步完了你拉到的索引和官方几乎没有时间差。这一点很重要——有些小众镜像站同步不及时会出现索引里有包但实际下载 404 的情况而阿里源在这方面的口碑一直不错。另外阿里源对 Ubuntu 的目录结构是原样保留的dists/focal/main/binary-amd64/这套路径完全一致所以换源只需要改域名不用动路径。这也是为什么一条sed命令就能搞定的根本原因。理解这一点之后你以后换成清华源、中科大源、华为源操作逻辑是完全一样的只是域名不同可以举一反三。提示换源只改变软件包的下载地址不改变包的版本和内容。GPG 签名校验依然由 Ubuntu 官方密钥完成安全性不受影响。1.3 换源和用国内源是两回事有个概念要区分开换源是把 apt 的下载地址换掉而不是把系统换成国产系统。系统本身还是 Ubuntu 20.04内核、组件、软件生态一个字节都没变。你在网上看到的一些教程把概念混在一起讲容易让新手以为换源会改变系统性质其实完全没有这回事。它就是一个纯粹的下载路径优化风险极低随时可以换回去。这也是为什么我建议所有人在装完系统的第一时间就做这件事——它属于一次投入长期受益的配置而且成本极低。唯一需要注意的是备份原文件万一改错了可以秒回滚。2. 动手前的准备工作与风险控制2.1 确认版本代号别把 focal 写成 jammyUbuntu 的每个版本都有一个代号apt 源里的路径就是用这个代号命名的。20.04 的代号是focal全称 Focal Fossa。如果你在 20.04 上写了jammy22.04 的代号apt update会直接报 404因为阿里源的服务器上确实没有那个路径对应 20.04 的索引。查代号最简单的方式是lsb_release -cs正常输出就是focal。如果这条命令提示找不到说明lsb-release没装可以用cat /etc/os-release看VERSION_CODENAME那一行效果一样。我见过有人在容器镜像里操作基础镜像裁剪得比较狠lsb_release不存在这时候cat /etc/os-release就是更可靠的兜底方案。注意Ubuntu 20.04 之后的 22.04、24.04 代号分别是 jammy、noble路径名一定要和系统版本严格对应写错一个字母都会导致整个源失效。2.2 备份 sources.list这是保命操作改配置文件之前先备份这是我做运维多年养成的肌肉记忆。apt 源改错虽然不至于让系统崩溃但如果你在半夜急着装东西却发现源挂了手边又没有备份那种焦虑感很难受。备份命令很简单sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %F)加上日期后缀是个好习惯如果你改多次历史版本都能留存不会互相覆盖。回滚的时候sudo cp /etc/apt/sources.list.bak.2026-08-01 /etc/apt/sources.list sudo apt update两行命令就恢复了。我个人的习惯是在服务器上保留最近三次的备份虚拟机里就保留一份够用就行。别小看这个动作我曾经在一台生产环境的机器上改源时手滑多删了一行focal-security导致安全更新拿不到排查了半小时才想起来是备份没对比。2.3 权限、网络和磁盘的三个前置检查换源本身不需要网络——你改的是本地文件。但改完之后apt update需要联网所以动手之前先确认三件事。第一是权限sources.list属于 root所有编辑操作都要加sudo普通用户直接vim会提示只读。第二是网络可达性先 ping 一下阿里的域名ping -c 4 mirrors.aliyun.com有回包说明解析和路由正常。如果这一步不通换源也是白换得先解决网络问题。第三是磁盘空间apt update会把索引写到/var/lib/apt/lists/大概占用几十到一百多 MB用df -h /var看一眼剩余空间太紧张的话先清一下sudo apt clean这三步加起来不到一分钟但能避免后面 90% 的换源了怎么还是不行的情况。很多新手的问题其实不在源本身而是网络压根不通。2.4 顺手记一下当前源的响应情况在动手改之前我建议你先跑一次time sudo apt update把当前耗时记下来。换完之后再跑一次形成前后对比。这个动作有两个好处一是你能直观感受到换源带来的收益二是万一换源之后反而变慢比如公司内网有本地缓存源你有数据可以判断要不要回退。我见过一些企业内网环境本身就有内部镜像这时候换阿里源反而绕远了有对比数据才能做出正确决策。3. Ubuntu 20.04 换阿里源完整实操3.1 一行 sed 命令搞定域名替换最省事的方式是用sed做原地替换。Ubuntu 20.04 默认的sources.list里通常出现两个域名archive.ubuntu.com和security.ubuntu.com有的镜像里还会带cn.archive.ubuntu.com。一条命令同时处理sudo sed -i s|http://archive.ubuntu.com|http://mirrors.aliyun.com|g; s|http://security.ubuntu.com|http://mirrors.aliyun.com|g; s|http://cn.archive.ubuntu.com|http://mirrors.aliyun.com|g /etc/apt/sources.list这里用|作为分隔符而不是/是因为被替换的字符串里本身包含斜杠用/分隔需要转义写起来容易出错。-i表示直接修改原文件g表示全局替换一行的多个匹配都会处理。执行完立刻检查有没有漏网的grep -n ubuntu.com /etc/apt/sources.list如果还有输出说明有别的域名格式没覆盖到把输出内容贴出来手动改一下就行。这条命令我用了好几年在 20.04、22.04 上都通用唯一要注意的是别在/etc/apt/sources.list.d/目录下的文件上乱用那些是第三方源的配置域名各不相同。3.2 手写一份干净的 sources.list如果你更喜欢掌控感或者原文件已经被改得乱七八糟直接重写是更彻底的做法。先用sudo vim /etc/apt/sources.list打开把里面内容全删掉vim 里ggdG两下搞定然后粘贴下面这份deb http://mirrors.aliyun.com/ubuntu/ focal 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 multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse这四行的分工要讲清楚不然你以后遇到问题不知道删哪一行。focal是主仓库包含发行时冻结的软件包focal-updates是发布后的常规更新绝大多数软件的版本升级走这里focal-security是安全补丁专用通道优先级最高这个千万别省focal-backports是向后移植的新版本软件属于可选装了也不会有副作用我一般保留。后面的四个字段main restricted universe multiverse是组件分类。main是官方支持的自由软件restricted是官方支持的专有驱动比如显卡驱动universe是社区维护的自由软件multiverse是有版权或法律限制的软件。四个都写上最省事装什么都不缺。提示deb-src开头的行是源码仓库只有需要apt source下载源码编译时才用得到。默认是注释状态不用管它开着反而会让apt update变慢。3.3 处理 sources.list.d 里的第三方源/etc/apt/sources.list不是唯一的源配置文件/etc/apt/sources.list.d/目录下的.list文件同样会被读取。你装 Docker、NodeSource、Wine 这类软件时它们的安装脚本会往这个目录塞文件里面往往也指向海外地址。换源之后这些文件没动apt update还是会被它们拖慢。先看看有哪些ls -l /etc/apt/sources.list.d/常见的比如docker.list、nodesource.list。这些文件里的域名各不一样不能用同一条 sed 命令批量处理得逐个看。举个例子Docker 的官方源可以用阿里云的镜像替代具体做法是新建一个文件echo deb http://mirrors.aliyun.com/docker-ce/linux/ubuntu focal stable | sudo tee /etc/apt/sources.list.d/docker.list然后把原来的文件重命名成.bak让 apt 不再读取。这个操作要谨慎因为第三方源的路径结构和 Ubuntu 主源不一样替换之前最好去阿里云的镜像站确认路径存在方法是用浏览器打开对应 URL 看能不能列出目录。3.4 刷新缓存并读懂 apt update 的输出改完之后执行sudo apt update输出大概长这样Get:1 http://mirrors.aliyun.com/ubuntu focal InRelease [265 kB] Get:2 http://mirrors.aliyun.com/ubuntu focal-updates InRelease [128 kB] Get:3 http://mirrors.aliyun.com/ubuntu focal-security InRelease [128 kB] Get:4 http://mirrors.aliyun.com/ubuntu focal-backports InRelease [128 kB] ... Reading package lists... Done Building dependency tree... Done Reading state information... Done判断成功的标准有三个每行都以mirrors.aliyun.com开头没有Err:或W:开头的警告行最后出现Reading package lists... Done。如果输出里还夹杂着archive.ubuntu.com说明还有文件没改到。如果出现W: Failed to fetch但其他行正常通常是某个第三方源的问题不影响主源使用可以后面再处理。速度上第一次apt update因为要下载全套索引大概几十 MB很快就能跑完。之后再执行会发现只更新变化的索引一秒钟结束这是 apt 的增量更新机制在起作用不是出问题了。4. 换源后的常见问题与排查实录4.1 报错信息速查对照表换源之后遇到的报错八九不离十就那几种我把它们整理成一张表遇到问题直接对号入座报错关键词大致原因处理方式404 Not Found版本代号写错或该路径在镜像上不存在用lsb_release -cs核对代号检查 URL 大小写Could not resolve mirrors.aliyun.comDNS 解析失败检查/etc/resolv.conf测试ping域名Hash Sum mismatch本地索引缓存损坏sudo rm -rf /var/lib/apt/lists/*后重跑 updateNO_PUBKEY缺少第三方源的签名密钥用apt-key或 keyring 方式导入对应公钥Release file is not valid yet系统时间错误比服务器时间早sudo date检查开启 NTP 同步Connection timed out网络不通或被防火墙拦截检查代理设置、路由、DNSTemporary failure resolvingDNS 配置问题手动指定公共 DNS 后重试这张表覆盖了我这几年遇到的绝大多数情况。其中Hash Sum mismatch特别常见于虚拟机快照恢复的场景因为快照里的索引和当前服务器上的可能已经不一致清掉缓存重新拉就好。4.2 索引缓存损坏的彻底清理方法Hash Sum mismatch这个报错值得单独讲一下因为它最容易被误判成源的问题。实际原因通常是/var/lib/apt/lists/里存着旧的部分下载文件apt 在对比哈希时对不上。清理方式分三个级别从轻到重# 级别一只清缓存包文件 sudo apt clean # 级别二清掉索引目录推荐 sudo rm -rf /var/lib/apt/lists/* # 级别三连 partial 目录一起清 sudo rm -rf /var/lib/apt/lists/partial一般做到级别二就能解决然后重新sudo apt update。如果还不行检查一下是不是系统时间不对——虚拟机关机久了时间会漂移时间戳校验会失败timedatectl status看System clock synchronized是不是yes。不是的话sudo timedatectl set-ntp true等几秒再看。这个问题在我用 VMware 快照恢复 Ubuntu 20.04 的时候出现过两次都是时间漂移导致的记下来能省不少排查时间。4.3 GPG 公钥报错的处理边界NO_PUBKEY这个报错有个重要特点它几乎只出现在第三方源上主源不会报。原因是 Ubuntu 官方的签名密钥在系统装好时就内置了而 Docker、NodeSource 这些源需要你自己导入密钥。处理方式分新旧两种新版系统推荐用 keyring 方式curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg然后把源文件里的deb改成deb [signed-by/usr/share/keyrings/docker-archive-keyring.gpg]的格式。老的sudo apt-key add方式虽然还能用但已经标记为废弃新装系统别再用了。这里有个判断原则如果NO_PUBKEY出现在你不认识的源上先别急着导密钥先确认那个源是不是你自己配置的。有些软件安装脚本会偷偷加源来源不明的密钥导入有风险该删的源直接删掉。4.4 换了源但速度没变快的三个隐蔽原因明明改成了阿里源apt install还是慢这种情况我遇到过几次原因往往不在源本身。第一种是 DNS 缓存或者 hosts 文件里有旧记录用getent hosts mirrors.aliyun.com看解析出来的 IP 是否正常。第二种是系统配了代理apt 会走/etc/apt/apt.conf.d/里的代理配置用grep -r -i proxy /etc/apt/查一下有没有残留有的话删掉对应行。第三种最隐蔽apt 有本地缓存目录/var/cache/apt/archives/如果你之前已经下载过某个包的一部分apt 会优先用本地的分片而这些分片可能是从旧源拉的、校验失败重试表现就是卡着不动。这时候sudo rm -rf /var/cache/apt/archives/*.deb清掉再装。注意/var/cache/apt/archives/里的 deb 文件是安装后自动保留下来的清理它们不会影响已安装的软件只是下次安装需要重新下载。5. 顺手把 pip、conda、npm 的源一起配了5.1 pip 换阿里源一行配置永久生效apt 源换完之后Python 用户下一步大概率会撞上 pip 的墙。默认的 PyPI 源在国内访问同样慢尤其装 torch、numpy 这类大包的时候。配置阿里源最省事的命令是pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/这条命令会把配置写进~/.config/pip/pip.confLinux 下的路径全局生效不需要每次敲-i参数。如果你用的是系统 Python 并且想给所有用户配置可以写到/etc/pip.conf[global] index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.comtrusted-host这一行在你用 https 且证书链正常时其实可以省略写上只是为了兼容一些老的 pip 版本。验证方式pip config list能看到global.index-url就是配好了。我实测过装numpy这种几十 MB 的包从默认源的两三分钟到阿里源的七八秒差距非常明显。5.2 conda 换源要注意的兼容性问题conda 换源比 pip 复杂一些因为它有多个 channel 需要分别指定。编辑~/.condarc没有就新建channels: - defaults show_channel_urls: true default_channels: - https://mirrors.aliyun.com/anaconda/pkgs/main - https://mirrors.aliyun.com/anaconda/pkgs/r - https://mirrors.aliyun.com/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.aliyun.com/anaconda/cloud pytorch: https://mirrors.aliyun.com/anaconda/cloud不过这里必须提醒一句conda 换源后可能出现依赖解析变慢甚至找不到包的情况原因是镜像同步有延迟而 conda 的依赖求解对 channel 内包的完整性要求很高。我的经验是如果只是偶尔装几个包保持默认源配合代理反而更省心如果长期需要批量装包换源收益更大。这属于个人取舍没有标准答案。提示改完.condarc后跑一次conda clean -i清掉索引缓存避免新旧 channel 混用。5.3 npm 和 Docker 的源配置前端开发常用的 npm换源命令是npm config set registry https://registry.npmmirror.com注意现在淘宝 npm 镜像已经迁移到registry.npmmirror.com这个域名了老教程里的registry.npm.taobao.org已经停用配置了会报证书错误。验证npm config get registryDocker 的镜像加速配置在/etc/docker/daemon.json阿里云会给每个账号分配专属的加速地址需要登录控制台获取这里不展开。要强调的是这类配置建议一次性整理好写进自己的初始化脚本或者 Ansible playbook 里新机器开箱即用比每次手动敲命令靠谱得多。我自己维护了一个setup.sh里面把 apt、pip、npm 的换源都包进去了装新虚拟机的时候直接跑一遍五分钟进入工作状态。6. 实操心得与避坑清单换了这么多年源有几个经验是文档里不会写、但实际特别有用的。第一条是关于http和https的选择阿里源两种协议都支持但我在虚拟机里更倾向用http因为https需要ca-certificates包正常且系统时间准确虚拟机刚恢复快照时时间容易漂移https会因为证书校验失败直接报错而http不受影响。安全性上不用担心apt 有自己的 GPG 签名校验环节传输层不是唯一防线。第二条是关于源的统一管理。Linux 下有apt、pip、conda、npm、gem等一堆包管理器每个都要单独配源很容易顾此失彼。我的做法是在家目录放一个sources/目录把各家的配置文件模板存进去新机器直接软链接过去。这样以后想换清华源或者换回官方源改一个地方就够了。第三条是关于回滚的判断标准。换源之后如果出现大量包的版本和预期不符比如你发现某个软件版本比官方低那可能是镜像同步滞后了这时候先别急着骂镜像站用apt policy 包名看看候选版本再决定要不要等一天。绝大多数情况下同步延迟在几小时内就会追平。第四条是关于容器环境。Docker 镜像里换源要注意基础镜像可能是精简版/etc/apt/sources.list的路径可能不同Debian 系也有自己的配置格式而且容器重启后改动会丢失正确做法是写进 Dockerfile 的RUN指令里。我之前犯过一个错误在跑起来的容器里手动换源调试结果重新docker run之后配置没了白折腾半天。最后分享一个排查问题的小技巧当你怀疑是源的问题时用curl -I直接请求那个索引文件看返回码和响应时间curl -I http://mirrors.aliyun.com/ubuntu/dists/focal/InRelease返回200 OK说明服务端正常问题在本地返回404说明路径写错了超时说明网络链路有问题。这个小动作能把源的问题和本地的问题一刀切开比反复跑apt update猜原因快得多。我在几台不同网络环境的机器上都用这套方法定位过问题准确率很高你也可以把它加进自己的排查工具箱。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。