简介对于误改或丢失 /etc/apt/sources.list 导致软件更新失败、依赖报错的 Ubuntu 20.04 LTS 用户这份资源给出了系统官方默认源文件完整内容可直接复制覆盖快速恢复 APT 包管理配置。资源包仅含 1 份 PDF 文档大小 35KB但完整收录了 main、universe、multiverse 三大软件仓库及 updates、security、backports 等更新源配置每一处均保留官方注释便于理解各仓库的用途与适用范围其中 main 仓库为官方支持的开源软件universe 由社区维护multiverse 则包含非自由软件读者可按需取舍。读者无需记忆地址或比对历史配置打开文档即可按需提取同时能根据各仓库的注释说明自行裁剪源列表明确是否启用社区或非自由软件仓库。目前已有 6781 人学习使用适合 Ubuntu 初学者排查源配置错误也适合系统管理员或运维人员在批量部署时作为标准配置参考。1. 换源不是改个文件而已先搞懂 sources.list 在 apt 里的位置ubuntu20.04 LTS 装完第一件事是什么我的习惯是先看一眼/etc/apt/sources.list里那几行deb http://archive.ubuntu.com/ubuntu/开头的默认源然后果断换掉。这个文件就是 apt 的「寻址表」你apt install装 vim、gcc、python3-pip背后全是它在定位软件包。默认源放在国外网络差的时候 apt update 能卡三分钟装一个依赖树稍大的包比如搭建 yolov8 环境 cpu 版本要的 python 依赖几乎没法用。这篇文章就把改 sources.list 这条线讲透文件结构、镜像源怎么选、怎么改、改完怎么验证、有哪些坑。我会把实际运维里踩过的坑写出来让你一次改对不用反复折腾。适合刚装完 ubuntu20.04 双系统、或者准备在这台机器上装 ROS、跑深度学习环境的读者——换源是这一切的前提值得先花十分钟处理掉。2. 默认源文件长什么样focal 四段式与备份的第一步2.1 解析默认 sources.listdeb、deb-src 与 focal 的含义先看一份干净的 ubuntu20.04 LTS 默认 sources.list 长什么样通常在/etc/apt/sources.list里# deb cdrom:[Ubuntu 20.04 LTS _Focal Fossa_ - Release amd64 (20200423)]/ focal main restricted deb http://archive.ubuntu.com/ubuntu/ focal main restricted deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted deb http://archive.ubuntu.com/ubuntu/ focal universe deb http://archive.ubuntu.com/ubuntu/ focal multiverse deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ focal-security main restricted deb http://security.ubuntu.com/ubuntu/ focal-security universe deb http://security.ubuntu.com/ubuntu/ focal-security multiverse几层含义拆开说。deb表示这是二进制包仓库deb-src则是源代码仓库。后面跟的 URL 是软件源地址然后是发行版代号——ubuntu20.04 的代号是focal这决定了你在镜像源上要选对应的发行版目录如果在清华源里手滑选了jammy22.04 的代号apt 直接报 404。仓库类别四个main是官方维护的自由软件restricted是闭源驱动类比如显卡驱动universe是社区维护的开源软件multiverse是版权有争议或非自由许可的软件。实际运维里main和universe覆盖了绝大多数场景restricted在装 NVIDIA 驱动这类时候才真正需要。另外要注意focal-updates是新版本修复focal-security是安全补丁这两个一定要留focal-backports是回溯的新版软件如果对稳定性敏感可以注释掉。deb-src行默认是被注释的。需要用apt source拉源码编译比如编译安装 ROS 依赖的某个自定义库时才取消注释。我见过有人在换源时把deb-src全删了后来要编第三方驱动源码时到处找头文件这是后话。2.2 先备份再动手迁移路径放对后悔药才有效改系统配置文件之前备份是最低成本的保险。常见做法是复制一份带时间戳的备份到当前目录这样找起来方便不用去/tmp翻sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %F) ls -l /etc/apt/sources.list*执行完ls应该能看到两个文件一个是原文件一个是sources.list.bak.2025-xx-xx。这个备份的恢复方式很简单sudo mv /etc/apt/sources.list.bak.2025-xx-xx /etc/apt/sources.list sudo apt update即使改坏了也只是恢复一下mv回来的事情不用重装系统。这里有个细节尽量用mv而不是cp恢复因为mv会保留原文件属性语法上也会把备份文件移走避免系统里残留一个多余文件干扰 apt 的解析。属于零成本的后悔药一定要养成这个操作习惯。另外提醒一下apt除了加载/etc/apt/sources.list之外还会加载/etc/apt/sources.list.d/目录下所有.list后缀的文件。这就意味着你只改/etc/apt/sources.list不等于全部换源完成如果/etc/apt/sources.list.d/里有第三方源比如装 docker 或 ROS 时自动写入的这些仍是独立配置后续排查「为什么 apt update 还是很慢」时先查这个目录。3. 把默认源换成国内镜像三种源的选择与手动修改全步骤3.1 清华、阿里、中科大镜像源选哪个看同步策略和场景国内可用的 Ubuntu 镜像源不少我用过且长期在跑的是清华 TUNA、阿里云、中科大 USTC 三家的。选源的核心指标只有一个同步频率和稳定性不是网速因为各家在千兆带宽下差别你根本感受不到。清华源mirrors.tuna.tsinghua.edu.cn是教育网出身高校和科研机构用得最多同步策略是每 6 小时同步一次稳定性在我使用经历里是最好的高峰期也几乎没见 404。如果你在学校或者公司网络环境有教育网出口选清华源会比其他源快得多因为走的是教育网内部链路。阿里云源mirrors.aliyun.com胜在服务器节点多CDN 覆盖广家宽或者云服务器 ECS 上表现最好。同步频率我记得是官方源更新后约 4 小时内跟进对绝大多数场景够用。如果你这台 ubuntu20.04 本身就是跑在阿里云 ECS 上直接换成阿里云源就行走内网隧道如果配置了专有网络还能更快。中科大源mirrors.ustc.edu.cn也是个好选择优点是额外提供了一些比较冷门的第三方仓库镜像但因为它同时服务校内外大量用户偶尔会有限速的情况。个人经验是追求稳就清华源追求广就阿里云源想覆盖冷门依赖就中科大源。你甚至可以主源用清华、focal-security用阿里云但我不建议这样做会让问题排查变复杂一个源出了问题都不知道查哪边。3.2 手动修改 sources.list 的完整流程与验证命令说完选型直接落手。下面我用清华源做示例因为它的源地址结构最典型换成阿里云或中科大时只需要替换域名部分。先编辑文件sudo nano /etc/apt/sources.list # 如果没有 nano用 sudo vim /etc/apt/sources.list 也可以然后把文件内容整体替换为以下内容# 默认源注释掉不再生效 # deb http://archive.ubuntu.com/ubuntu/ focal main restricted # 清华 Ubuntu 镜像源 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse这一段是完整版把四个类别main、restricted、universe、multiverse一次性放进去避免后续装东西时提示「Package not found」。如果你对安全更新路径有特殊要求也可以把 focal-security 单独指到 security.ubuntu.com但既然走国内镜像就统一走镜像省得 apt 更新时混合源导致依赖解析变慢。改完文件后必须执行更新和验证sudo apt update sudo apt list --upgradable第一条命令会重新拉取软件包索引如果配置错误会在这里报错比如「Failed to fetch ... 404 Not Found」或者「Temporary failure resolving」。看到这两类报错基本就是源的地址路径不对或者网络不通DNS 或防火墙需要回头检查文件里的 URL。第二条命令看有没有可更新的包正常有输出说明源已经生效。接下来建议顺手升级一下系统软件包元数据sudo apt full-upgrade这个命令会把本地的软件包索引和源上的比对然后升级所有可升级的包。第一次换源后做一次全量升级是值得的把之前因为源不稳定而滞后的安全补丁拉齐。注意full-upgrade可能会处理依赖冲突执行时留意输出有「The following packages will be REMOVED」要仔细看别盲目回车。3.3 添加第三方源ROS noetic 和 zabbix 7.0 lts 的启示换完系统默认源你实际使用中还会遇到需要额外添加非官方源的场景这里提前讲清楚省得你后面举一反三时走弯路。常见的做法是在/etc/apt/sources.list.d/下单独建文件比如装 ROS noeticUbuntu20.04 对应的 ROS 1 发行版时sudo sh -c echo deb http://packages.ros.org/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list wget -qO - https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add -先写.list文件再导入 GPG key一套组合拳。apt-key add的写法在 20.04 里已经不再推荐但还能用新写法是用gpg --dearmor把 key 放到/usr/share/keyrings/比如wget -qO - https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | gpg --dearmor | sudo tee /usr/share/keyrings/ros-archive-keyring.gpg /dev/null echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal main | sudo tee /etc/apt/sources.list.d/ros.list注意signed-by参数指向 keyring 文件这是 20.04 比较规范的姿势比apt-key add更安全不会污染全局信任链。跟你装 zabbix 7.0 lts 在 VMware 虚拟机上配源是一个道理第三方源的 GPG 密钥管理是避不开的环节。核心原则只有一条第三方源的 .list 文件独立存放不去改动系统自带的 sources.list。这样系统升级、排错时问题边界清楚你一眼能看出哪个是官方源、哪个是额外加的。4. 换源常见的 5 个坑现象、原因、解决办法4.1 apt update 报 404多半是代号或路径写错现象apt update时刷出一大片Failed to fetch ... 404 Not Found后面跟着[IP: ...]。原因源地址里把 focal 写成了别的代号比如jammy或bullseye。还有一种可能是路径里写成ubuntu/dists/focal/但镜像站根本没同步这个目录。解决先ls /etc/apt/sources.list.d/看有没有第三方源混在里面写错再检查 sources.list 里的 distribution 是不是focal。确认无误后sudo apt clean清掉缓存重新apt update。这个坑在刚换源时最高发我见过有人把清华源里的路径抄错了层级把ubuntu/写成了ubuntu/dists/也会 404因为后者不是仓库根路径。4.2 https 源报错缺 ca-certificates 导致的连带故障现象换成清华源https 协议后apt update报Certificate verification failed或The repository ... does not have a Release file。原因清华源走的是 https如果系统里没有安装ca-certificates这个包apt 就无法验证 TLS 证书直接拒绝连接。解决临时改回 http 协议的默认源然后sudo apt update sudo apt install ca-certificates装完再改回 https 源。如果你已经没法访问默认源可以用阿里云的 http 源顶一轮deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse装上ca-certificates后重新切换。注意这个坑多发生在最小化安装的 ubuntu20.04 server 上desktop 版一般自带这个包。这里补充一个细节如果运行在虚拟化环境里比如 VMware 装的 ubuntu20.04还可能因为虚拟机的时钟没同步差几分钟导致 TLS 证书验证失败排查时先date看一眼系统时间时间不对就用sudo ntpdate ntp.aliyun.com校准一下。4.3 改完没执行 apt update还在用旧的包索引现象换源之后apt install xxx速度没有变快还是从 archive.ubuntu.com 拉包或者显示包版本是旧的。原因改完文件直接去装包apt 还在用/var/lib/apt/lists/里的旧索引甚至根本没意识到源变了。解决改完任何.list文件第一件事永远是sudo apt update。没执行这一步之前后续所有操作都会用到旧缓存。清掉旧缓存可以执行sudo apt clean sudo apt update。这个问题容易在大家第一次手动改源的时候出现习惯性以为保存文件就生效了。顺手说一下怎么确认当前生效的源apt-cache policy可以看每个包的来源优先级grep -r ^deb /etc/apt/sources.list /etc/apt/sources.list.d/可以列出所有生效中的源行改完源快速自检用很顺手。4.4 sources.list.d 目录里藏着旧配置改了白改现象grep -r archive.ubuntu /etc/apt/还能看到一堆旧地址apt update 依然去访问国外源。原因之前装 ROS、Docker、zabbix 或某些软件时安装脚本在/etc/apt/sources.list.d/下放了自己的 .list 文件。你只改了主 sources.list这些第三方源不受影响。解决逐个检查/etc/apt/sources.list.d/下的文件确认是否还需要。不需要的直接删掉或移走ls -l /etc/apt/sources.list.d/ # 确认后例如把不再使用的旧源移走 sudo mv /etc/apt/sources.list.d/old-archive.list /tmp/ sudo apt update如果你在用 rk3588 板子、刚烧写的 ubuntu20.04 磁盘空间没了也要顺手看这里——嵌入式板卡厂商经常在系统里塞自己的源文件磁盘告急时先确认是不是 apt 缓存在/var/cache/apt/archives堆积这个比源问题更吃空间。4.5 源配置正确但速度还是慢IPv6 和 DNS 解析在拖后腿现象apt update能通但速度极慢卡在Hit:1 ...界面很久才动一下。原因镜像站域名同时解析出 IPv6 和 IPv4 地址系统默认优先走 IPv6但网络环境对 IPv6 支持不稳定导致连接超时重试。另一种原因是系统 DNS 设置太慢解析耗时几秒。解决让 apt 强制走 IPv4在 apt 配置里加一行echo Acquire::ForceIPv4 true; | sudo tee /etc/apt/apt.conf.d/99force-ipv4 sudo apt update如果还是慢检查/etc/resolv.conf的 DNS 是不是指向了不可达的内网 DNS改成nameserver 223.5.5.5阿里 DNS或nameserver 114.114.114.114这类公共 DNS。ForceIPv4这个配置在双栈网络里很有用特别是校园网环境经常 IPv6 地址拿到了但路由不通光 DNS 解析成功没用TCP 握手时卡住才是真凶。5. 换完源之后做的事验证、加速、自定义源这层窗户纸源换好了还要做三件事这层窗户纸捅破之后你就彻底掌握 sources.list 修改这件事了。第一件事做一个自己的换源脚本。这么做的价值在于以后在另一台 ubuntu20.04 上云服务器、嵌入式板卡、公司新发的机器不用再手动敲命令尤其是连 ROS 源、zabbix 源一起配的时候更省事。下面这个脚本我一直在用逻辑很简单但很实用#!/bin/bash # 换源脚本备份 - 写入清华源 - 更新索引 - 可选安装常用工具 set -euo pipefail MIRRORhttps://mirrors.tuna.tsinghua.edu.cn/ubuntu/ echo 备份原 sources.list ... sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %F) echo 写入新源 ... cat EOF | sudo tee /etc/apt/sources.list deb ${MIRROR} focal main restricted universe multiverse deb ${MIRROR} focal-updates main restricted universe multiverse deb ${MIRROR} focal-backports main restricted universe multiverse deb ${MIRROR} focal-security main restricted universe multiverse EOF echo 更新索引 ... sudo apt update echo 源切换完成。若需要 ROS/GitLab 等第三方源请手动追加到 /etc/apt/sources.list.d/set -euo pipefail保证任何一步出错脚本就停下来不会改一半系统处于「无源可用」的状态。备份用date %F打时间戳追溯方便。这个脚本放在~/bin/chsrc.sh里chmod x之后随手就能用。也可以改成接受镜像站域名为参数在清华、阿里、中科大之间一键切换但个人使用固定清华就够不用过度设计。第二件事验证源的实际效果。换完后用time sudo apt update看一眼耗时以及装一个依赖较多的包测试整体下载速度。这里分享一个小技巧sudo apt install -s vim可以模拟安装不实际下载但能测试依赖解析是否正常真的想测网速就装一个axel或aria2这种多线程下载工具再配合time统计。实测国内源在百兆带宽下apt update应该在 3 到 5 秒内完成整个索引拉取不会有明显的卡顿感。第三件事理解源的分层结构不再被「改源」这件事束手束脚。系统默认源负责所有 ubuntu 官方软件包第三方源比如packages.ros.org、repo.zabbix.com负责各自的软件两者互不干扰。你的 sources.list 修改工作流应该是备份 → 改主源 → 单独文件管理第三方源 → apt update 验证。这套流程应用到 ubuntu22.04、24.04 LTS 上同样成立只是代号变成 jammy 和 noble路径结构完全一样。我在实际工作中换过太多台机器的源了从 x86 服务器到 RK3588 开发板从 VMware 虚拟机到 WSL2每一次都是这套流程。最深刻的教训就是别觉得自己记性好改之前先备份别觉得一次能成改完必须apt update验证别把所有源都堆在一个文件里分类管理才是长期维护之道。有一次我给客户的 20.04 服务器换源顺手清理了/etc/apt/sources.list.d/下一个废弃好几年的旧源文件apt update 速度直接快了一倍——小习惯带来的收益往往超出预期。按照文章里的步骤操作你的 ubuntu20.04 换源过程应该十分钟内就能完成而且不会有后遗症希望帮到你。本文还有配套的精品资源点击获取
