
简介面向Ubuntu 20.04 LTS用户这份PDF文档聚焦sources.list配置文件被误改后的恢复需求提供系统默认源的完整内容与恢复思路尤其适合因APT源错误导致软件安装失败、系统更新中断或安全补丁无法获取的初学者和运维人员。整体为单个PDF文件压缩包仅35KB内容高度浓缩无需安装额外工具即可快速打开查阅。目前已有6782人浏览学习是解决Ubuntu源配置异常时的常用参考。文档完整收录了Ubuntu 20.04 LTS官方默认sources.list的全部仓库文本涵盖main官方支持、universe社区开源、multiverse非自由软件、updates与security等更新源并简要说明各仓库作用。读者可据此覆盖误改的sources.list内容再配合系统包管理器的更新命令即可恢复软件源从而重新获得稳定的软件包管理与系统升级能力。1. ubuntu20.04 的 sources.list改坏后先恢复默认源再谈换源提速ubuntu20.04 的 sources.list 是 apt 的灵魂也是很多人翻车的第一现场。装 ROS、配深度学习环境、按教程换镜像源随便哪一步手滑把文件内容改成别的发行版或漏掉几行sudo apt update 就会满屏报错装啥都提示找不到包。这个时候最不值当的选项是重装系统。下面要给的就是 Ubuntu 20.04 LTS 官方默认 sources.list 的完整内容、恢复步骤和验证方法顺带把从默认源换成国内镜像源的命令和五类高频报错拆开讲。适合改源改崩了想恢复、从旧版本升级上来、以及想在干净源基础上继续定制的人。2. 先看懂行语法与仓库分工为什么默认源长这样在动手恢复之前先把 sources.list 的语法看清楚是值得的。很多人改坏源文件不是因为不知道贴哪段内容而是不知道每一行在说什么结果把发行版代号、组件名、源地址混在一起保存完才意识到不对劲。Ubuntu 20.04 LTS 的默认源文件看似有几十行注释去掉注释后真正生效的就十几行这十几行里隐藏着完整的软件包来源策略。2.1 一行源记录拆开看deb、URI、套件、组件拿默认源里最典型的一行举例deb http://cn.archive.ubuntu.com/ubuntu/ focal main restricted这一行可以拆成四段。deb 表示这是二进制软件包源APT 从这里下载 .deb 文件并安装如果换成 deb-src表示同一路径下的源码包源只有用 apt-get source 拉源码时才会用到。第二个字段是 URI也就是仓库地址cn.archive.ubuntu.com 是 Ubuntu 官方针对中国网络设置的镜像入口后面统一接 /ubuntu/。第三个字段 focal 是发行版代号Ubuntu 20.04 的代号就是 Focal Fossa这个字段决定了 APT 去服务器的哪个目录找索引。第四个字段开始是组件名main restricted 表示这一行同时启用 main 和 restricted 两个组件多个组件用空格分隔不能写逗号。然后是套件的概念。focal、focal-updates、focal-security 虽然都出现在源文件里但它们是三个不同的套件suite在服务器上分别对应独立目录。focal 是 20.04 发布时的基线内容focal-updates 收集基线发布后的重要修复focal-security 单独从 security.ubuntu.com 拉取安全更新避免安全补丁被主仓库的发布节奏拖累。backports 是第四个套件放的是从新版本移植回来的软件默认不主动升级到它。字段示例作用deb / deb-srcdeb包类型二进制包或源码包URIhttp://cn.archive.ubuntu.com/ubuntu/仓库地址套件focal / focal-updates / focal-security / focal-backports对应仓库服务器目录组件main restricted universe multiverse软件包分类空格分隔注释# 开头不生效仅说明注意一点注释行里 # 开头的行不会生效但不要随手删光。默认源里的注释段落说明了每个仓库的支持边界下次排查时看着注释能少走弯路。2.2 五个组件与三个时间套件默认源覆盖了哪些包main 是 Ubuntu 官方团队直接维护的开源软件也是安装 ISO 里默认带的那些系统核心、常用命令行工具大多在这里。restricted 是官方支持但许可证不完全自由的软件最典型的是闭源显卡驱动比如 NVIDIA 驱动它在 main 里找不到必须启用 restricted 才能装。universe 是社区维护的开源软件数量远大于 main像 ffmpeg、mesa 这类包都住在 universeUbuntu 安全团队不承诺系统性地审查它但日常使用完全没问题。multiverse 是非自由软件包括一些受专利或版权限制的包装不装由你自己判断。套件层面focal 只是基线focal-updates 负责打补丁focal-security 单独服务安全修复focal-backports 提供新特性移植。对 20.04 用户来说默认源里四套件和 main/restricted/universe/multiverse 的组合是经过权衡的该有的都有不该默认装的也没给你装上。很多精简源把 universe 和 multiverse 删掉短期看不出问题等到装带依赖的软件时才意识到少了组件。组件软件范围官方安全支持main官方维护的开源软件是restricted官方支持的受限许可证软件是universe社区维护的开源软件否multiverse非自由软件自行判断合法性否backports新版本移植默认不自动升级视情况2.3 默认源里被注释掉的行deb-src、cdrom 与 partner前面说过默认源里几乎所有 deb-src 都被注释掉了。这不是漏写是刻意为之。deb-src 会拉取源码包的索引对日常 apt install 没有任何帮助反而会占用 /var/lib/apt/lists 下的磁盘空间让每次 apt update 多跑一会儿。只有要做软件打包、交叉编译、看依赖源码时才需要打开对应行。打开方式很简单把目标行的 # 去掉保存后重新 apt update。deb cdrom 那行是安装介质源系统从光盘或 U 盘安装完成后这行已经失去意义所以默认注释。focal partner 是 Canonical 合作伙伴仓库里面是第三方厂商随 Ubuntu 分发的闭源软件默认关掉用到时再取消注释。查看当前真正生效的源可以用这条命令sudo grep -v ^# /etc/apt/sources.list | grep -v ^$它会过滤掉注释和空行剩下的就是 APT 实际在用的全部源记录。恢复默认源之前先跑一次能让你清楚知道现在的文件到底改成了什么样。3. 恢复默认源三步走备份、写入、校验这一章是全文的核心操作按顺序执行就能把改乱的源恢复成官方默认状态。不要跳步尤其是备份那一步很多人就是嫌麻烦跳过结果恢复了半截又改错连原始文件长什么样都忘了。3.1 备份先把现文件留下再谈恢复sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %F)cp 命令把当前 sources.list 原样复制一份文件名里追加当天的日期。如果你之前已经把文件改得乱七八糟这份备份的意义在于留底后面可以 diff 对比到底动了哪些行就算文件完全不可用备份也不占多少空间留着没坏处。想要更精确的时间点把 $(date %F) 换成 $(date %F-%H%M%S) 就能精确到秒同一台机器一天改三回也不会覆盖。提示如果 /etc/apt/sources.list.d/ 目录下还有第三方源文件先不要动后面校验时会单独看它们。备份完顺手执行一次sudo grep -v ^# /etc/apt/sources.list | grep -v ^$记录当前有效源恢复完成后可以对比确认状态。3.2 写入官方默认源内容sudo gedit /etc/apt/sources.list把文件清空然后粘贴下面这段完整内容并保存。这段内容与 Ubuntu 20.04 LTS 安装后默认生成的 sources.list 一致注释行也一并保留#deb cdrom:[Ubuntu 20.04 LTS _Focal Fossa_ - Release amd64 (20200423)]/ focal main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://cn.archive.ubuntu.com/ubuntu/ focal main restricted # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal main restricted # # Major bug fix updates produced after the final release of the # distribution. deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates main restricted # # N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu # team. Also, please note that software in universe WILL NOT receive any # review or updates from the Ubuntu security team. deb http://cn.archive.ubuntu.com/ubuntu/ focal universe # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal universe deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates universe # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates universe # # N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu # team, and may not be under a free licence. Please satisfy yourself as to # your rights to use the software. Also, please note that software in # multiverse WILL NOT receive any review or updates from the Ubuntu # security team. deb http://cn.archive.ubuntu.com/ubuntu/ focal multiverse # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal multiverse deb http://cn.archive.ubuntu.com/ubuntu/ focal-updates multiverse # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-updates multiverse # # N.B. software from this repository may not have been tested as # extensively as that contained in the main release, although it includes # newer versions of some applications which may provide useful features. # Also, please note that software in backports WILL NOT receive any review # or updates from the Ubuntu security team. deb http://cn.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse # deb-src http://cn.archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse # # Uncomment the following two lines to add software from Canonicals # partner repository. # This software is not part of Ubuntu, but is offered by Canonical and the # respective vendors as a service to Ubuntu users. # deb http://archive.canonical.com/ubuntu focal partner # deb-src http://archive.canonical.com/ubuntu focal partner deb http://security.ubuntu.com/ubuntu focal-security main restricted # deb-src http://security.ubuntu.com/ubuntu focal-security main restricted deb http://security.ubuntu.com/ubuntu focal-security universe # deb-src http://security.ubuntu.com/ubuntu focal-security universe deb http://security.ubuntu.com/ubuntu focal-security multiverse # deb-src http://security.ubuntu.com/ubuntu focal-security multiverse # This system was installed using small removable media # (e.g. netinst, live or single CD). The matching deb cdrom # entries were disabled at the end of the installation process. # For information about how to configure apt package sources, # see the sources.list(5) manual.这段内容有几个关键点要说明。cn.archive 域名下只有 focal、focal-updates、focal-backports 三组源安全更新全部单独走 security.ubuntu.com不要自己把 security 也改成 cn.archive镜像同步延迟可能导致安全更新不是最新的。所有 deb-src 保持注释不需要源码包的场景不要打开否则每次 apt update 索引时间明显变长。如果系统没有图形界面用sudo nano /etc/apt/sources.list打开同一个路径粘贴相同内容保存后效果完全一样。3.3 校验sudo apt update 的输出怎么读sudo apt update输出里 Hit 表示索引未变化直接命中缓存Get 表示下载了新索引Ign 表示忽略一般是可选的翻译文件或某些辅助索引不用紧张。命令正常结束会显示 Reading package lists... Done没有任何 E: 开头的行就算通过。如果出现 E: 开头的行说明源文件里还有语法或路径错误回到 3.2 对照完整内容逐行检查。如果只有 W: 开头的行属于警告比如公钥缺失软件包仍能装但建议按第 5 章处理。4. 换源提速从 cn.archive 到清华 / 阿里镜像的 sed 操作默认源能跑通之后很多人还想让 apt 下载更快尤其是装深度学习依赖、ROS 这类几百兆的包时官方源在国内的延迟会被放大。这一章讲的是在不破坏默认源结构的前提下用一条 sed 命令整体换到镜像站。4.1 默认源在国内网络下的真实表现cn.archive.ubuntu.com 是 Ubuntu 官方面向中国网络的入口多数时候速度能接受但它和所在地区、运营商、时段关系很大。晚上高峰期下载小包经常超时重试一次 apt install 要拉几百 MB 依赖时超时一次就多等几分钟。这时把它整体替换成一个离你更近的镜像站是常见做法。注意是域名级替换不是删掉默认源重写原有结构、组件、注释都保留这样最不容易出错。4.2 用 sed 做域名级替换一处不改组件替换前先备份沿用 3.1 的习惯。然后执行sudo sed -i s|http://cn.archive.ubuntu.com/ubuntu|https://mirrors.tuna.tsinghua.edu.cn/ubuntu|g /etc/apt/sources.list如果偏好阿里镜像替换成sudo sed -i s|http://cn.archive.ubuntu.com/ubuntu|https://mirrors.aliyun.com/ubuntu|g /etc/apt/sources.list参数说明-i 表示直接写回文件不打印到屏幕s|旧|新|g 是替换表达式用 | 做分隔符是因为 URL 里到处是 /如果用 / 做分隔符就得写成s/http:\/\/.../https:\/\/.../g看着都累g 表示全局替换文件里所有 cn.archive 域名都会被换掉。security.ubuntu.com 不会被这条命令碰到所以安全更新源仍然走官方地址这是推荐的做法安全源保持官方比镜像站更可靠。替换前先看清楚会影响哪些行grep -n cn.archive /etc/apt/sources.list确认只有预期的主源、updates、backports 行再执行 sed。执行完保存然后做一次sudo apt update校验。4.3 换源后校验Index 下载成功不等于一切正常换源后的第一个命令仍然是sudo apt update重点关注有没有 404、Release 文件缺失这类错误。索引全部下载成功之后再抽查一个包的候选版本apt-cache policy apt输出里如果能看到500 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main amd64 Packages这样的行说明 APT 已经认到新源的索引源切换成功。如果候选版本来自 sources.list.d 里的其他源说明有第三方源在同台竞争需要检查优先级。4.4 精简源与混搭源的隐患网上不少教程会教你只留一行deb ... focal main restricted理由是装软件快一点。实际跑起来会发现很多包在 main 里找不到比如 ffmpeg、mesa 这类依赖 universe 的软件装到一半提示没有候选版本又回头补源。默认源四套件齐全是有原因的换源只换域名、不删组件是最稳的做法。另外不要在同一文件里同时保留 cn.archive 和镜像站两份源地址APT 会重复下载索引虽然不报错但等于白跑一遍。5. 避坑与排查sources.list 改坏后的五类报错改源这件事报错来来回回就那么几类把每个报错的触发点和修法记住比到处复制粘贴别人的源可靠得多。下面五类是这几年前端、运维、算法同事找我修 apt 时最常遇到的。5.1 Release 文件找不到路径或套件名写错现象sudo apt update 报E: The repository http://... focal Release does not have a Release file。原因URL 路径在源服务器上不存在。最常见的是套件名拼写错误比如 focal 写成 foccal或者把组件名 main restricted 误放到 URL 路径里APT 跟着错误的路径去找 Release 文件自然找不到。解决逐行核对套件字段合法值只有 focal、focal-updates、focal-security、focal-backports 四个。然后打开浏览器访问源地址确认对应目录真实存在。拿不准就回到第 3 章用完整默认源别手抖拼接。5.2 404 Not Found版本代号混用现象apt update 里出现404 Not Found错误行指向某条 deb 或 deb-src。原因最常见的是把 18.04 bionic 或 22.04 jammy 的源直接贴进 20.04 机器。镜像站同时服务多个发行版bionic、jammy 目录都存在所以网络层面能通但索引内容和你这台 focal 机器对不上下载时就会 404。解决统一改成 focal 系列。不要手动把 bionic 改成 focal 就完事还要检查 focal-updates、focal-security 是否存在对应路径直接套第 3 章的默认源最省事。5.3 NO_PUBKEY公钥缺失导致 W 警告现象apt update 提示W: GPG error: ... NO_PUBKEY xxxx软件源能用但每次更新都有警告。原因第三方源或某些镜像源的 Release 文件签名公钥没有导入系统。20.04 默认信任的是一组 Ubuntu 官方密钥第三方源需要单独导入。解决在确认源地址可信的前提下导入公钥。注意 apt-key 在 Ubuntu 20.04 已标记为 deprecated规范做法是把公钥文件放到 /usr/share/keyrings 再用 signed-by 引用。假设已经拿到公钥文件sudo gpg --dearmor archive-key.gpg /usr/share/keyrings/custom-archive-keyring.gpg然后在 sources.list 对应行末尾追加signed-by/usr/share/keyrings/custom-archive-keyring.gpg。临时应急也可以直接用sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID但新装的机器不建议再养这个习惯。5.4 误删整个 sources.list重建而不是重装现象apt update 报类似Your APT sources are not set up的提示或者直接说找不到任何软件仓库。原因整个文件被清空或者 rm 删掉了APT 只剩 sources.list.d 里少量第三方源正常软件源全部消失。解决不要重装系统。把第 3.2 节的完整默认源写回文件即可。如果 sources.list.d 里还有第三方源先确认它对应的发行版代号是否与 focal 一致不一致就注释掉否则恢复后源之间还会打架。5.5 文件里混用多版本源依赖错乱现象apt install 某些包时提示依赖无法满足或者 apt 试图把软件升级到异常版本装完系统反而变慢。原因同一文件里既有 focal 又有 bionic甚至有人装 ROS 时把不同发行版的 ROS 源都堆进来APT 会同时看到两套候选版本依赖解析直接乱掉。解决每个源文件只对应一个发行版代号。第三方源尽量放在 /etc/apt/sources.list.d/ 下的独立文件里方便整体禁用而不影响主源。看到 jammy 之类非 focal 的代号出现在 20.04 机器上第一反应就是删掉。6. 收尾验证用三个命令确认源干净可用恢复或换源之后不要急着装包先用三个命令把源的状态确认一遍能省掉后面一堆莫名其妙的问题。6.1 apt-cache policy 看源优先级apt-cache policy不带包名执行会列出所有源及其优先级。正常的源优先级是 500说明和默认包版本可以正常竞争。如果看到某个源是 100 或者 -1说明被 Pin 过装包行为会异常去检查 /etc/apt/preferences 和 /etc/apt/preferences.d/ 下有没有残留配置。6.2 update upgradable 双检查sudo apt update apt list --upgradable先更新索引再列出可升级包。刚装完系统的机器可升级列表一般是几十个安全更新如果列表为空或者突然冒出上百个包说明源内容和系统状态对不上先查是不是混用了版本代号。这一步只做检查不要顺手 apt upgrade生产机器尤其别冲动先把列表看清楚。6.3 我的备份习惯这个习惯是被坑出来的。去年帮一台跑着训练任务的服务器修 apt改源之前没备份sed 替换时把 security 源也一并换成了镜像站结果安全更新一直拉不下来排查了两个小时才发现是替换范围没控制好。从那以后我每次改源都强制走一遍备份 → 替换 → update → policy 这四步备份文件名带日期policy 输出存成日志即使后续出了怪问题也能对照日志确认是哪一步引入的。希望帮到你。本文还有配套的精品资源点击获取