十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 20.04 sources.list 修复与软件源配置完全指南

Ubuntu 20.04 sources.list 修复与软件源配置完全指南 简介Ubuntu 20.04 LTS系统中因误修改sources.list文件导致的软件源异常可通过一套默认源配置方案快速恢复。面向系统运维者、开发者及日常使用Ubuntu时遇到apt更新失败或软件安装报错的用户操作门槛较低适合需要立即修复软件源、恢复正常升级渠道的场景。资源包含1个PDF文档大小约35KB完整列出了main、restricted、universe、multiverse等核心仓库的源条目并对Updates、Security等仓库的用途做了简要说明帮助读者理解每条配置的含义避免后续再次误改。文档同时给出了使用sudo gedit编辑、并通过apt update与apt upgrade刷新缓存的检查思路可有效解决因源内容残缺导致的依赖问题。目前已有6781人学习下载对于希望恢复系统默认更新渠道、保障apt正常工作的Ubuntu 20.04用户具备较强的参考价值。1. 一张改错的 sources.list能让 apt 全线罢工很多人在 Ubuntu 20.04 LTS 上第一次接触sources.list不是主动去学而是改崩了不得不回来补课。改源这事看着简单——把 URL 换掉、跑一句sudo apt update——可一旦格式写错、套件名写错、或者不小心把focal写成bionic系统会直接甩出一屏404 Not Found、Hash Sum mismatch甚至The repository does not have a Release file的报错新软件装不上旧软件升不了级安全补丁也断了。最难受的是你根本不知道是哪一行出了问题。这份资源就是用来兜底的完整的 Ubuntu 20.04 LTS 默认sources.list文件内容配套备份、恢复、验证的完整操作。适合刚把源改崩的新手也适合要在新机器上快速配源、给 ROS 或深度学习环境铺路的熟手。先把默认源恢复回去再谈别的。2. sources.list 的结构拆解每一行是什么改错会怎样2.1 一行源记录的信息量比你想的大先看默认文件里的核心行deb http://cn.archive.ubuntu.com/ubuntu/ focal main restricted这行可以被拆成四个字段deb是类型表示这是二进制软件包仓库http://cn.archive.ubuntu.com/ubuntu/是仓库地址focal是发行版代号对应 Ubuntu 20.04 LTS 的版本名 Focal Fossamain restricted是组件也就是这个仓库里要启用哪几个软件类别。deb对应的是编译好的二进制包apt install直接拉取的就是这些文件。每行deb下面往往跟一行deb-src这是源码包仓库平时绝大多数情况下用不到——除非你要apt source拉源码重新编译。把deb-src全部注释掉apt update的耗时能明显缩短因为 apt 不用再去拉取源码包的索引。我一般恢复完默认源之后会顺手把所有的deb-src行都注释掉除非当周要做源码级的二次开发。这里有一个值得单独说明的点focal和focal-updates、focal-security不是同一个东西。默认文件里每类仓库分三段写focal是发布当天的原始包集合focal-updates是发布之后陆续进场的 bug 修复和功能更新focal-security是安全漏洞补丁三者是叠加关系不是互斥关系。很多人改源时只留了focal main结果apt upgrade永远拿不到安全更新这就是把三者的关系搞混了。2.2 四个组件名决定你能装什么软件默认源里出现频率最高的四个组件是main、restricted、universe、multiverse它们代表的是 Ubuntu 对软件的不同支持力度和授权状态。这四者的差别直接决定了apt install能不能搜到某个包很多人装了软件报Unable to locate package根源往往不是网络而是组件没开全。组件软件性质Ubuntu 团队支持典型例子main自由软件官方维护完全支持bash、nginx、python3restricted闭源但官方提供支持的驱动与工具完全支持显卡驱动、部分固件universe社区维护的开源软件不提供支持仅收录ffmpeg、vim 扩展等multiverse非自由授权软件不支持需自担风险部分解码器、压缩格式工具focal-backports是另一个容易被忽略的仓库。它提供的是把新版本软件反向移植到 20.04 的包比如你在 20.04 上想用比默认仓库更新的某个工具版本在 backports 里可能找得到。但它不像其他仓库那样默认开启默认文件里明确写了这些包未经与 main 同等强度的测试生产环境慎开。2.3 为什么默认源是 cn.archive.ubuntu.com装系统时如果选择了国内镜像生成的sources.list里就会写入对应的镜像地址cn.archive.ubuntu.com是 Ubuntu 官方在中国的分发节点不是第三方源。很多人会纠结要不要把它换成阿里云或者清华的源答案是如果你在国内且cn.archive.ubuntu.com的速度可以接受保持默认不动最稳。只有当你发现apt update经常超时、下载速度只有几十 KB 的时候才需要换第三方镜像。换法在第 5 章展开这里先记住原则默认源是保底方案永远留一份备份。3. 恢复默认源备份、写入、验证三步走3.1 先备份给系统留一颗后悔药任何对sources.list的操作第一步永远是备份。不要觉得文件内容你已经记住了就跳过这一步——改源过程中手一抖少写一个字母、多写一个空格apt update就会用报错教育你。备份命令如下sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date %Y%m%d)这条命令把当前sources.list复制一份带日期的备份文件比如sources.list.bak.20250601放在同一个目录下。日期后缀的作用是防止覆盖之前的备份你改源改了三轮目录里就有三份不同时间的备份随时可以回退到任意一个时间点。备份做完之后建议顺手列一下目录确认文件确实生成ls -l /etc/apt/sources.list*看到.list和.list.bak.20250601两个文件同时存在再继续下一步。这个习惯花不了十秒钟但能避免你在一顿操作之后发现自己把唯一一份有效配置覆盖了连后悔药都没有。3.2 写入默认源内容Ubuntu 20.04 桌面版通常自带 gedit用sudo gedit /etc/apt/sources.list打开编辑器服务器版没有图形界面就改用sudo nano /etc/apt/sources.list或者sudo vim /etc/apt/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粘贴完成后保存退出然后执行更新验证sudo apt update这里解释几个细节。第一cdrom行默认是被注释掉的它是安装光盘的软件源物理机安装时偶尔会用到但我们现在都是网络安装或镜像安装这行不注释反而是个隐患——apt 有时会因为它提示你插入光盘。第二security.ubuntu.com单独成段不在cn.archive.ubuntu.com下面这是 Ubuntu 的刻意设计安全更新走独立通道平时不要把这几个focal-security行删掉否则安全补丁就断了。第三partner仓库默认注释那是 Canonical 合作伙伴的闭源软件用不到就不开。3.3 验证阶段从 update 输出读健康状态sudo apt update跑完后重点看输出的最后几行。正常情况下会看到类似All packages are up to date或者一堆Hit结尾说明源配置没有语法问题。如果输出里有Err开头的行后面跟着404 Not Found或Could not resolve说明源文件有问题需要回头看是哪一行。判断方法很直接——Err行末尾会明确告诉你失败的仓库 URL对着源文件找对应行即可。如果只是想确认源配置在语法层面是否合法可以跑这个命令apt-get check它会检查软件包管理器的内部状态是否一致如果输出没有任何错误提示说明当前的源文件至少是结构完好的。这两条命令组合起来基本能把恢复操作是否成功这件事落实到位。4. 避坑与排查改源后翻车现场实录4.1 现象apt update 报 404 Not Found还带一长串 URL原因版本代号写错了。最常见的操作是把别人博客里的 bionic 源直接贴到 20.04 系统上bionic对应 18.04focal才是 20.04。仓库服务器上根本没有bionic这个目录自然返回 404。解决把源文件里所有的bionic全部替换成focal用 sed 一步到位sudo sed -i s/bionic/focal/g /etc/apt/sources.list替换后再跑一次sudo apt update。这里有个细节值得注意如果你是从 18.04 升级上来的系统sources.list里可能还残留着旧版本的源地址升级完成后 apt 不会自动帮你改源文件必须手动处理。4.2 现象The repository does not have a Release file原因这个报错比 404 更让人懵因为它不直接告诉你哪一行出了问题。实际上它意味着 apt 在指定地址找不到可用的 Release 元数据文件。常见原因有三个套件名写错、组件名写错、或者整行格式缺字段。比如把focal main restricted写成focal mainrestrictedapt 会尝试访问一个不存在的仓库目录。解决逐行对照默认源文件检查。重点看每一行的第四、第五个字段是否和默认文件完全一致。如果自己看不出来直接删掉重来把第 3 章的默认源全文再粘贴一遍这是效率最高的做法。与其花半小时猜哪行错了不如三十秒重写。4.3 现象NO_PUBKEY 或 GPG 签名验证失败原因源文件本身没毛病但系统缺少该仓库的公钥。这种情况通常发生在你额外添加了第三方源之后比如 ROS 源、Docker 源添加源的命令执行了一半wget 公钥成功但 add-apt-repository 没跑完或者公钥过期了。解决报错信息里会直接给出缺失的 key ID形如NO_PUBKEY F42ED6FBAB17C654取后八位执行sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB17C654不过apt-key在 20.04 里已经标记为废弃推荐用更规范的方式sudo gpg --keyserver keyserver.ubuntu.com --recv-keys AB17C654 sudo gpg --export AB17C654 | sudo tee /etc/apt/trusted.gpg.d/custom-source.gpg注意不要因为报 GPG 错误就顺手加--allow-unauthenticated强行绕过签名验证这等于把系统软件源的安全防线拆了装到带毒的第三方包后悔都来不及。4.4 现象apt update 卡住不动或者提示 Media change原因cdrom那行没有被注释掉。apt 在读取源列表时发现cdrom:开头的条目会认为需要访问光盘设备于是停下来等待你插入安装介质。很多新手在恢复源时把注释符号#删掉了就会触发这个诡异的提示。另一个常见原因是某个网络源响应极慢apt 默认不设超时上限会一直干等。解决确认cdrom行开头有#确保它处于注释状态。网络源慢的问题要么换镜像源见第 5 章要么给 apt 增加超时配置。在/etc/apt/apt.conf.d/下新建一个文件比如99timeout写入Acquire::http::Timeout 10; Acquire::https::Timeout 10; Acquire::ftp::Timeout 10;保存后 apt 在单个源上最多等 10 秒超时就跳过并报错不会再无限期卡住。4.5 现象apt update 能过但 apt install 报 Unable to locate package原因这个报错和源文件格式无关多半是你想装的软件不在当前启用的组件里。比如想装某个 multiverse 组件里的软件但源里只配了main restrictedapt 压根不知道这个包存在。解决缺哪个组件就补哪个。执行sudo apt install software-properties-common后可以用add-apt-repository管理组件和第三方源但最简单直接的办法还是确认源文件里focal universe multiverse这些行都在。在 Ubuntu 20.04 上装 ROS noetic 之前很多人的Unable to locate package就是因为只开了 main没装 universe 和 multiverse。5. 不只是恢复按场景把默认源改造成顺手的样子5.1 官方源太慢只替换域名不碰套件和组件如果你身处国内且cn.archive.ubuntu.com速度不理想可以考虑换成阿里云或清华的镜像。换源有一个铁律只换域名套件名和组件名完全不动。因为镜像站的结构和官方站完全一致只是分发节点不同。用 sed 替换域名最省事sudo sed -i s/cn.archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update换成清华源就改为mirrors.tuna.tsinghua.edu.cn。替换之后务必执行sudo apt update确认新源可用然后sudo apt upgrade验证升级流程是否正常。这里有个很容易忽略的点换源之后 apt 的索引缓存里还是旧源的记录有时会残留奇怪的报错可以先清理缓存再更新sudo apt clean sudo apt update5.2 装 ROS 或深度学习环境前源应该怎么配在 Ubuntu 20.04 上装 ROS noetic 之前光配好系统源是不够的还要把 ROS 自己的源加进去。常见做法是分两步先用系统默认源把基础依赖装齐再添加 ROS 官方源并导入公钥。这个顺序很重要因为 ROS 源里的包依赖大量系统包如 boost、python3系统源不健康ROS 装上必然缺依赖。比如用中科大 ROS 镜像时先执行sudo sh -c echo deb http://packages.ros.org/ros/ubuntu focal main /etc/apt/sources.list.d/ros-latest.list添加 ROS 源再sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654导入公钥最后sudo apt update。整个过程之后你可能会看到第 4 章里说的 NO_PUBKEY 报错处理方式就是对着 key ID 重新导入不用慌。搭 yolov8 这类深度学习环境时逻辑也一样系统源先恢复默认再用 pip 的-i https://pypi.tuna.tsinghua.edu.cn/simple加速 Python 包下载apt 源和 pip 源分开处理不要混为一谈。5.3 一个实用的源检查脚本改源是高频操作每次手动验证又麻烦。我一般会在机器上留一个小脚本放到/usr/local/bin/check-apt-source.sh#!/bin/bash echo 检查源文件语法 sudo apt-get check echo 执行 update 并提取关键输出 sudo apt update 21 | grep -E Err|Ign|W: || echo 更新正常无错误 echo 列出可升级的安全更新数量 apt list --upgradable 2/dev/null | grep -c ^ || echo 0保存后赋予执行权限chmod x /usr/local/bin/check-apt-source.sh之后每次改完源直接跑这个脚本三行输出就能确认源的健康状态。脚本里的grep -E Err|Ign|W:会把 update 输出里的错误和警告过滤出来没有匹配到时自动输出「更新正常」避免每次刷一屏输出还要自己找错。6. 最后这一步验证技巧值得养成习惯恢复完源文件、跑完sudo apt update很多人到这里就停了。但我建议再多做一步用apt-cache policy验证包来源。这个命令能告诉你系统实际从哪个仓库解析某个包也能确认你的源配置是否真的生效。执行方式很简单apt-cache policy nginx输出里会列出Candidate版本和Version table重点看500 http://cn.archive.ubuntu.com/ubuntu focal/main amd64 Packages这类行它表示 nginx 是从你配置的 focal main 里解析出来的。如果这里显示的是别的地址说明你的源文件可能被其他配置覆盖了——比如/etc/apt/sources.list.d/目录下还有别的文件在起作用。这一点经常被人忽略/etc/apt/sources.list不是唯一生效的源配置。系统还会读取/etc/apt/sources.list.d/目录下所有以.list结尾的文件这些文件里的源和主文件是叠加关系。有些软件安装时会自动往这个目录写入自己的源比如 Docker、VS Code如果安装后出现源冲突不要只盯主文件检查一下这个目录下的文件列表。ls -l /etc/apt/sources.list.d/看到不认识的.list文件先cat看一眼内容确认来源再决定是否禁用——把文件后缀改成.list.disabled就可以临时停用而不用删除这是个很实用的技巧。我自己的习惯是每次改完源强制走一遍固定的三连——备份、改文件、sudo apt update后跑一次apt-cache policy 随便一个已安装软件确认来源。这套流程在最开始也救过我不少次尤其是在 RK3588 这类板子上烧写完系统、磁盘空间紧张的时候源一旦配错apt 报错叠加磁盘不足排查起来非常折磨。从那以后我每次在新机器上配源或者帮别人修源都强制走一遍备份加验证的流程不再跳过任何一步。希望这篇记录能帮你避开那些我踩过的坑。本文还有配套的精品资源点击获取
返回列表