目录
Ubuntu 修改 apt 源(国内环境)经验分享
本文记录在国内网络环境下,把 Ubuntu 的 apt 软件源切换到国内镜像(如阿里云、华为云、清华、中科大)的几种做法。重点在于:新装系统可能是新格式(DEB822),老系统还是老格式(传统 sources.list),两种方式命令不一样,本文都覆盖,并给一个自动兼容脚本。照着做基本能一次换通。
一、先判断当前系统用哪种格式
Ubuntu 24.04 起官方默认改用 DEB822 格式,源文件从 /etc/apt/sources.list 转移到了 /etc/apt/sources.list.d/ubuntu.sources。判断方式:
bashls -l /etc/apt/sources.list.d/ubuntu.sources 2>/dev/null && echo "新格式(deb822)" || echo "老格式(sources.list)"
- 有
ubuntu.sources→ 走「新方式(24.04+)」 - 只有
/etc/apt/sources.list→ 走「老方式(22.04 及以前)」
注意:部分云厂商精简镜像、Docker 容器、定制版仍保留老格式,别一上来就改
ubuntu.sources,先确认文件存在。
版本代号对照表(写源时 Suites 字段要用)
| Ubuntu 版本 | 代号(Suite) |
|---|---|
| 20.04 LTS | focal |
| 22.04 LTS | jammy |
| 24.04 LTS | noble |
| 25.04(非 LTS) | plucky |
| 26.04 LTS | resolute |
国内主流镜像站地址(Ubuntu 路径统一为 /ubuntu/):
- 阿里云:
https://mirrors.aliyun.com/ubuntu/ - 华为云:
https://mirrors.huaweicloud.com/ubuntu/ - 清华大学:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ - 中科大:
https://mirrors.ustc.edu.cn/ubuntu/
二、老方式(22.04 及以前,传统 sources.list)
配置文件:/etc/apt/sources.list,传统单行格式 deb <地址> <代号> <组件>。
方法 A:整文件替换为国内源(以 22.04 jammy + 阿里云为例)
bashsudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 先备份
sudo tee /etc/apt/sources.list > /dev/null <<'EOF'
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
sudo apt update
换成华为云 / 清华 / 中科大,只需把上面 URL 换成对应镜像站地址;换成 20.04 则把
jammy改成focal。
方法 B:sed 一行替换(不改结构,只换域名)
适合只想把官方域名替换成镜像,保留原文件其余内容:
bashsudo sed -i 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list
sudo sed -i 's|http://security.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list
sudo apt update
三、新方式(24.04+,DEB822 ubuntu.sources)
配置文件:/etc/apt/sources.list.d/ubuntu.sources,键值对结构。默认的 ubuntu.sources 长这样(以 26.04 resolute 为例):
iniTypes: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: resolute resolute-updates resolute-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: resolute-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
方法 A:直接改 URIs 字段(推荐,最稳)
备份后,把两段 URIs 都换成镜像地址,其余不动。务必保留 Signed-By 行(绑定 GPG 密钥,丢了会报签名错误)。
阿里云(26.04 resolute):
bashsudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null <<'EOF'
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu/
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: https://mirrors.aliyun.com/ubuntu/
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
sudo apt update
华为云(把 URIs 换成 https://mirrors.huaweicloud.com/ubuntu/ 即可,其余同上)。
如果是 24.04,把上面所有
resolute换成noble。代号写错(比如把 noble 写成 plucky)会直接 404,这是最高频的坑。
方法 B:sed 一行替换(自动化 / 远程运维友好)
bashsudo sed -i 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i 's|http://security.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list.d/ubuntu.sources
sudo apt update
换源后建议做一次升级:
bashsudo apt full-upgrade -y # full-upgrade 比 upgrade 更智能,按新源依赖自动处理
四、兼容脚本(自动判断新老方式,一条命令搞定)
把下面脚本存成 change_apt_mirror.sh,在任何 Ubuntu 版本上都能跑——它会先检测 ubuntu.sources 是否存在,存在用新方式 sed,否则用老方式 sed**:
bash#!/bin/bash
# 用法:sudo bash change_apt_mirror.sh [镜像地址]
MIRROR="${1:-https://mirrors.aliyun.com/ubuntu/}"
if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then
echo "检测到 DEB822 新格式,替换 ubuntu.sources ..."
sudo sed -i "s|http://archive.ubuntu.com/ubuntu/|${MIRROR}|g" /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i "s|http://security.ubuntu.com/ubuntu/|${MIRROR}|g" /etc/apt/sources.list.d/ubuntu.sources
else
echo "检测到传统 sources.list 格式,替换 ..."
sudo sed -i "s|http://archive.ubuntu.com/ubuntu/|${MIRROR}|g" /etc/apt/sources.list
sudo sed -i "s|http://security.ubuntu.com/ubuntu/|${MIRROR}|g" /etc/apt/sources.list
fi
sudo apt update && echo "换源完成 ✅"
使用示例:
bashsudo bash change_apt_mirror.sh https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ # 换清华源
sudo bash change_apt_mirror.sh # 不传参默认阿里云
五、常见问题排查
| 现象 | 原因 | 处理 |
|---|---|---|
404 Not Found / Unable to locate package | 代号写错(如 24.04 写成 plucky 而非 noble;26.04 写成 noble 而非 resolute) | 核对代号表,改对 Suites 后 apt update |
| GPG 签名错误 / 密钥过期 | Signed-By 行丢失或密钥损坏 | 重新安装密钥环:sudo apt install --reinstall ubuntu-keyring |
| 换源后装包依赖冲突 | 本地已装版本高于镜像当前版本 | sudo apt --fix-broken install -y;再 sudo dpkg --configure -a |
apt update 卡在官方域名 | 改错了文件(比如系统其实是新格式,却只改了 sources.list) | 用第四节脚本重新检测替换;或回滚备份 |
含 cdrom:// 的行报错(多见于 Debian 初装) | 源里残留光盘源 | 编辑文件把 deb cdrom://... 那行注释掉(加 #) |
| 回滚 | 换源后异常 | 老方式:sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list;新方式:sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources |
六、经验提醒
- 改之前一定先备份:新方式
ubuntu.sources.bak,老方式sources.list.bak,一行回滚救命。 - 代号比 URL 更容易出错:24.04 是
noble、26.04 是resolute,别凭记忆乱填。不确定就用lsb_release -cs查当前代号。 - 云主机优先同厂商内网源:阿里云 ECS 用阿里云源有内网加速(不占公网带宽),华为云同理。
apt update是验收标准:输出开头显示你的镜像域名且无报错,就说明换通了。- 和初始化流程衔接:换源通常是新系统装好后的第一步,之后才是装 openssh-server、配网络。
七、参考资料(来自「Linux运维」知识库)
- 《新装 Ubuntu 26.04 LTS 换源终极指南:阿里云/华为云 DEB822 配置教程》—— ClawLoader
- 《CentOS系统更换阿里云yum源&Debian系统更换APT源》—— 云自由
- 《各种编程语言的 国内镜像源 配置》—— 时空的窝(含清华/中科大镜像站地址)
ai协作,人工编辑