1. 项目概述为什么要更换Ubuntu的软件源如果你刚装好Ubuntu 20.04或者已经用了一段时间可能会发现通过apt update或apt install安装软件时速度时快时慢甚至偶尔会卡住不动。这通常不是你的网络问题而是默认的软件源服务器repository server可能在地球的另一端物理距离和网络拥堵导致了延迟。对于国内用户来说将Ubuntu官方的软件源替换为国内的镜像源比如清华大学开源软件镜像站Tuna几乎是提升系统使用体验的第一步。这不仅仅是“换个地址”那么简单它直接关系到你后续所有软件安装、系统更新的速度和稳定性。简单来说Ubuntu的软件源就是一个巨大的软件仓库列表里面记录了从哪里下载系统核心组件、应用程序、语言包、安全更新等。默认情况下系统会使用Ubuntu官方在全球架设的服务器。而清华镜像源在国内有服务器节点相当于把整个仓库“搬”到了家门口下载速度自然会有质的飞跃。这个操作本身不复杂但背后涉及到系统配置文件的修改、密钥的验证以及不同场景下的源地址选择对于新手来说理解每一步在做什么比单纯复制命令更重要。接下来我会带你从原理到实操彻底搞懂如何安全、高效地将Ubuntu 20.04的源换成清华镜像。2. 核心原理与文件结构解析在动手之前我们先搞清楚要修改的是什么以及为什么这么修改是安全的。这能让你在遇到问题时知道从哪里排查。2.1 软件源配置文件/etc/apt/sources.list这是整个操作的核心文件。aptAdvanced Package Tool是Ubuntu的包管理工具它的一切行为都基于这个文件。你可以用任何文本编辑器打开它看看sudo cat /etc/apt/sources.list你会看到很多以deb或deb-src开头的行。每一行定义了一个软件源。我们来拆解一行的含义deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiversedeb: 表示这是一个二进制软件包仓库我们安装的软件都是这种。如果是deb-src则表示是源代码包仓库普通用户很少用到。http://archive.ubuntu.com/ubuntu/: 这是仓库的根URL。我们更换镜像源主要就是替换这部分地址。focal: 这是Ubuntu 20.04的代号。每个Ubuntu版本都有一个代号如18.04是bionic22.04是jammy。这一点至关重要必须匹配你的系统版本否则会导致安装错误的软件包可能让系统崩溃。main restricted universe multiverse: 这是软件包的组件Component。它们代表了Ubuntu对不同软件的自由度和支持程度的分类。通常我们会全部启用以确保软件库的完整性。注意在修改前强烈建议备份原始文件。这是一个好习惯万一新源有问题可以瞬间恢复。命令很简单sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup。2.2 镜像源的选择为什么是清华国内有多个优秀的开源镜像站如阿里云、中科大、华为云等。选择清华镜像Tuna的原因有几个一是历史悠久稳定可靠二是同步速度通常很快基本与官方源保持即时更新三是其提供的文档非常清晰。对于Ubuntu来说各镜像站的内容本质上是一样的都是官方源的完整拷贝所以选任何一个在速度上都不会有本质区别你可以根据网络情况测试后选择。本文以清华源为例方法是通用的。2.3 APT的工作流程当你执行sudo apt update时apt会读取sources.list中的所有地址去这些地址下载一个叫做InRelease或Release.gpg的文件包含仓库的元数据索引以及Packages.gz等文件。这个过程会验证服务器的数字签名通过/etc/apt/trusted.gpg.d/目录下的密钥确保软件包来源可信且未被篡改。更换镜像源后apt只是从另一个同样被Ubuntu官方签名的服务器获取数据安全性是有保障的。3. 详细操作步骤命令行与图形界面两种方法我们将分两种方法进行纯命令行适用于服务器、桌面版终端和图形界面适用于桌面版新手。请务必先备份3.1 方法一命令行手动替换推荐通用性强这是最根本、最清晰的方法。我们直接编辑配置文件。步骤1备份现有源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak这行命令创建了一个名为sources.list.bak的备份文件。如果后续操作失误你可以通过sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list来恢复。步骤2编辑源列表文件使用你熟悉的命令行文本编辑器。最常用的是nano对新手友好或vim。sudo nano /etc/apt/sources.list打开文件后你会看到所有现有的源地址。我们的目标是将其中http://archive.ubuntu.com/ubuntu/以及类似http://security.ubuntu.com/ubuntu/的URL替换为清华源的地址。步骤3替换URL你需要将文件中所有http://archive.ubuntu.com/ubuntu/替换为https://mirrors.tuna.tsinghua.edu.cn/ubuntu/。同样将http://security.ubuntu.com/ubuntu/替换为https://mirrors.tuna.tsinghua.edu.cn/ubuntu/。在nano编辑器中你可以使用快捷键Ctrl\进行搜索替换。不过更稳妥的做法是注释掉所有旧行新增对应的新行。具体操作如下在每一行旧地址的行首加上#号来注释它。例如# deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse # deb-src http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse在文件末尾添加以下对应清华源的新行。请确保focal与你系统版本一致deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb-src 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-src 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-src 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 deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiversefocal: Ubuntu 20.04 代号。focal-updates: 正式版发布后的更新。focal-backports: 为旧版系统提供的新版软件。focal-security: 重要的安全更新。这部分源至关重要必须正确配置。步骤4保存并退出在nano中按CtrlO写入文件回车确认然后按CtrlX退出。步骤5更新软件包列表这是检验配置是否正确的关键一步。sudo apt update这个命令并不会升级任何软件它只是让apt去你新设置的清华源服务器上获取最新的软件包列表信息。如果终端开始快速滚动显示从mirrors.tuna.tsinghua.edu.cn获取信息的进度并且最后没有报错看到“全部完成”或“All packages are up to date”之类的提示那么恭喜你换源成功了实操心得执行sudo apt update时如果遇到Certificate verification failed或The following signatures couldn‘t be verified这类错误很可能是因为你的系统时间不正确或者镜像站正在同步短暂不可用。可以先检查系统时间date或等待几分钟再试。清华源非常稳定后者情况较少。3.2 方法二使用sed命令一键替换快速但需谨慎如果你熟悉命令行想更快地完成可以使用sed流编辑器进行全局替换。这同样需要先备份。sudo sed -i.bak s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g;s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list这条命令做了两件事-i.bak在原位编辑文件并自动创建一个带.bak后缀的备份sources.list.bak。s/A/B/g这是一个替换命令将文件中所有匹配A的字符串替换为B。这里我们执行了两次替换分别将archive.ubuntu.com和security.ubuntu.com替换为mirrors.tuna.tsinghua.edu.cn。执行后同样运行sudo apt update测试即可。注意事项sed命令虽然快捷但它会替换文件中所有匹配的字符串。请确保你的sources.list文件格式标准没有其他注释或特殊内容包含这些域名否则可能导致意外修改。对于新手更推荐方法一可控性更强。3.3 方法三图形界面设置Ubuntu Desktop对于桌面用户Ubuntu 提供了更友好的设置方式。打开“软件和更新”Software Updates应用。你可以在应用菜单中搜索找到它。在弹出的窗口中第一个标签页就是“Ubuntu 软件”Ubuntu Software。在“下载自”Download from的下拉菜单中选择“其他...”Other...。这时会弹出一个服务器列表。点击“选择最佳服务器”Select Best Server系统会自动测试并推荐一个速度最快的镜像。通常这会选中国内的某个镜像站可能是清华、阿里云或中科大。你也可以手动选择。在服务器列表中找到“China”并展开从列表里选择mirrors.tuna.tsinghua.edu.cn。点击“选择服务器”Choose Server输入密码授权。关闭“软件和更新”窗口系统会提示列表已过时点击“重新载入”Reload。这个过程就相当于在后台执行了sudo apt update。图形化方法的本质也是修改/etc/apt/sources.list文件只不过它帮你完成了编辑和验证的步骤。4. 验证与进阶配置换源之后我们来做一些验证和优化。4.1 验证换源是否成功执行sudo apt update后仔细看输出的每一行。你应该看到大量的Hit行URL 开头都是https://mirrors.tuna.tsinghua.edu.cn。例如获取:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease [265 kB] 获取:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease [114 kB] ...这明确表示正在从清华源拉取数据。然后尝试安装或更新一个软件来感受速度sudo apt install htop如果下载速度飞快通常能达到几MB/s甚至更高说明换源效果显著。4.2 处理可能的“404 Not Found”错误有时在apt update时可能会针对某个子仓库如focal-backports报404 Not Found错误。这通常不是因为源地址错了而是该镜像站可能没有同步某个非常用组件或者你的sources.list中存在错误的、不属于当前系统版本的仓库行例如混入了其他版本如jammy的源。排查步骤再次检查/etc/apt/sources.list文件确保所有focal的拼写正确并且没有多余的其他版本代号的行。检查/etc/apt/sources.list.d/目录。这个目录存放着第三方软件源的独立列表文件比如Docker、Node.js等。有时问题出在这里。你可以用ls /etc/apt/sources.list.d/查看并逐一检查这些文件中的源地址是否也需要更换或是否兼容。如果错误仅来自一两个不常用的组件如deb-src源码包而你确定不需要它们可以直接在对应行首添加#注释掉然后再次apt update。4.3 为特定软件使用特定源高级有时候你可能希望大部分软件从清华源下载但某个特定软件比如某个游戏的启动器需要从其官方源获取。这时就不应该修改全局的sources.list而是利用/etc/apt/sources.list.d/目录。例如要添加Docker的官方源安装依赖以使apt能通过HTTPS使用仓库sudo apt install ca-certificates curl添加Docker的官方GPG密钥用于验证sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod ar /etc/apt/keyrings/docker.asc将Docker仓库添加到APT源列表中这里依然会用到focal代号echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ focal stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null更新列表并安装sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io这样Docker就会从其官方源安装而系统其他软件仍从清华源获取。这是一种更清晰、更易于管理的源配置方式。5. 常见问题与排查技巧实录即使按照步骤操作也可能遇到一些问题。这里记录了几个我实际遇到过的坑和解决方法。5.1 问题sudo apt update失败提示“无法安全地用该源进行更新所以默认禁用该源”错误信息示例W: GPG error: https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease: The following signatures couldnt be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXXXXXX E: The repository https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease is not signed. N: Updating from such a repository cant be done securely, and is therefore disabled by default.原因与解决 这表示系统缺少验证该仓库软件包所需的GPG公钥。虽然清华镜像站的内容是官方同步的但apt需要对应的密钥来验证完整性。解决方法是从官方渠道导入缺失的密钥。从错误信息中复制XXXXXXXXXXXXXXXX这部分密钥ID。使用以下命令从Ubuntu密钥服务器导入sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXXXXXXXXX例如如果密钥ID是3B4FE6ACC0B21F32则命令为sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32。导入成功后再次运行sudo apt update。注意apt-key命令在较新版本的Debian/Ubuntu中已被标记为弃用但对于处理历史遗留的第三方源密钥问题仍然有效。更现代的做法是像前面Docker例子那样将密钥单独放到/etc/apt/trusted.gpg.d/目录或使用signed-by指令。5.2 问题更新速度依然很慢排查思路检查源地址是否正确再次确认sources.list中的地址是mirrors.tuna.tsinghua.edu.cn并且协议是httpshttp也可但https更安全。可以尝试ping一下这个域名看延迟如何ping mirrors.tuna.tsinghua.edu.cn。网络环境问题如果你使用了某些特殊的网络配置如代理可能会影响。apt默认使用系统代理设置。你可以通过检查环境变量echo $http_proxy $https_proxy来确认。如果需要为apt单独设置代理可以创建配置文件/etc/apt/apt.conf.d/proxy.conf并添加Acquire::http::Proxy http://your-proxy-address:port; Acquire::https::Proxy http://your-proxy-address:port;请将your-proxy-address:port替换为你的实际代理地址和端口如果不需要代理则删除此文件或注释掉内容。尝试其他国内镜像清华源虽然快但网络是复杂的。你可以临时将地址换成阿里云镜像mirrors.aliyun.com或中科大镜像mirrors.ustc.edu.cn试试速度。方法同上只需替换URL中的域名部分。5.3 问题执行apt install时某些包找不到错误信息示例E: Unable to locate package python3-pip解决 这通常是因为软件包列表没有更新或者你输入的包名确实不存在。请按顺序排查首先确保你已经成功运行了sudo apt update。使用apt search命令查找准确的包名apt search python3 pip。如果确信包名正确但依然找不到检查你的sources.list是否包含了所有必要的组件main, restricted, universe, multiverse。特别是universe和multiverse仓库包含了大量社区维护和版权受限的软件很多常用工具都在里面。确保你的源行末尾包含了这些组件。5.4 问题误操作导致源文件混乱如何恢复这是备份习惯派上用场的时候。如果你按照建议做了备份直接还原sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list如果没有备份别慌。Ubuntu 官方提供了一个最基础的sources.list文件。你可以清空当前文件然后填入官方源地址。一个更简单的方法是直接下载一个针对20.04版本的默认文件模板但记得替换为国内源地址。或者如果你能记住最初的几行可以手动重写。终极方法使用apt自带的software-properties-common工具重置。安装它如果尚未安装sudo apt install software-properties-common然后使用sudo add-apt-repository --remove来删除错误的仓库但更直接的是你可以从另一台正常的 Ubuntu 20.04 机器上拷贝一个/etc/apt/sources.list文件过来修改。为了避免这些问题最好的习惯就是修改任何系统重要配置文件前先备份。我个人在实际操作中的体会是更换软件源这个操作看似简单却是深入理解Linux系统管理的一个绝佳切入点。它让你直接接触到包管理系统的核心配置理解了仓库、组件、版本代号这些概念。成功换源后带来的速度提升是立竿见影的这会让后续所有的开发、学习体验顺畅很多。对于服务器环境这更是部署前的标准动作能显著减少软件安装和系统更新的等待时间。最后一个小技巧是你可以定期比如每半年或一年重新评估一下哪个国内镜像站对你的网络最快因为网络环境可能会变化换个更快的源只需几分钟却能持续受益。