Linux & MacOS 换源全指南:解决软件下载慢问题
概述
不管是 Linux(像 Ubuntu、CentOS)还是 MacOS,用系统自带的包管理器(apt、yum、brew)下软件时,经常遇到“速度慢、超时报错”的情况——根本原因就是默认源服务器都在国外,国内访问延迟高、带宽还受限。
解决这个问题的关键,就是把源换成国内镜像源(比如阿里云、清华大学、中科大镜像)。这些镜像源会把国外官方仓库的内容同步过来,国内访问飞快(通常能到 MB/s 级别)。
这篇针对 Ubuntu(apt 工具)、CentOS(yum 工具)、MacOS(Homebrew 工具) 这三大主流系统/工具,给出“备份原配置 → 替换国内源 → 生效配置”的完整步骤,每一步都把关键注意事项(比如系统版本适配、终端类型区分)标出来,新手照着做也能搞定,彻底摆脱软件下载慢的烦恼。
一、Ubuntu 系统:替换 apt 源(Debian 系通用)
Ubuntu 用 apt(Advanced Package Tool)管软件,默认的源配置文件是 /etc/apt/sources.list。下面以阿里云为例(稳定又快),一步步换成国内源:
1. 第一步:备份原配置文件(关键!避免出错无法恢复)
改系统配置之前,一定先备份原文件,万一出问题能快速还原:
# 备份 sources.list,备份文件名为 sources.list.bak
sudo cp /etc/apt/sources.list{,.bak}
- 命令解析:{,.bak} 是 Shell 语法糖,等价于 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak,快速创建备份;
- 执行后可通过 ls /etc/apt/sources.list* 验证,若显示 sources.list 和 sources.list.bak,说明备份成功。
2. 第二步:替换为阿里云源
用 sed 命令把配置文件里的源地址批量替换掉(不用手工编辑文件,免得格式写错):
# 替换 3 类 Ubuntu 源地址为阿里云镜像
sudo sed -i s/cn.archive.ubuntu/mirrors.aliyun/g /etc/apt/sources.list
sudo sed -i s/archive.ubuntu/mirrors.aliyun/g /etc/apt/sources.list
sudo sed -i s/security.ubuntu/mirrors.aliyun/g /etc/apt/sources.list
- 命令解析:
- sed -i:直接修改文件内容(i 表示 “in-place”);
- s/旧地址/新地址/g:全局替换(g 表示 “global”),覆盖 Ubuntu 官方源(archive.ubuntu)、中国区源(cn.archive.ubuntu)、安全更新源(security.ubuntu)。
3. 第三步:验证替换结果
替换完最好确认一下配置文件里已经没有官方源地址了,免得混着用出冲突:
# 查看 sources.list 中非注释、非空行的内容(过滤无用信息)
cat /etc/apt/sources.list | grep -vE '^#|^$'
- 预期输出:所有地址均包含 mirrors.aliyun.com(如 deb https://mirrors.aliyun.com/ubuntu/ focal main restricted),无 archive.ubuntu.com 等官方地址,说明替换成功。
4. 第四步:更新源缓存(使配置生效)
换完源得执行 apt update,让系统重新加载新源的软件包索引:
sudo apt update
- 执行过程中若显示 “Hit:1 https://mirrors.aliyun.com/ubuntu/ focal InRelease” 等信息,且无 “404 Not Found” 报错,说明新源已生效;
- 后续安装软件(如 sudo apt install git)时,将从阿里云源下载,速度会显著提升。
二、CentOS 系统:替换 yum 源(RHEL 系通用)
CentOS 用 yum(Yellowdog Updater Modified)管软件,默认源配置文件是 /etc/yum.repos.d/CentOS-Base.repo。同样以阿里云为例,步骤如下:
1. 第一步:备份原 repo 文件
# 备份 CentOS-Base.repo,备份文件名为 CentOS-Base.repo.bak
sudo cp /etc/yum.repos.d/CentOS-Base.repo{,.bak}
- 验证备份:ls /etc/yum.repos.d/CentOS-Base.repo*,显示两个文件即为成功。
2. 第二步:下载阿里云 repo 文件替换原文件
CentOS 不同版本(比如 7、8)的 repo 配置不一样,直接去阿里云下载对应版本的配置文件最稳妥,省得手工改格式出错:
# 以 CentOS 8 为例,下载阿里云的 Centos-8.repo 替换原文件
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
- 版本适配:
- 若为 CentOS 7,将链接改为 http://mirrors.aliyun.com/repo/Centos-7.repo;
- 若不确定系统版本,执行 cat /etc/centos-release 查看(如 CentOS Linux release 8.5.2111)。
- 命令解析:curl -o 目标路径 下载链接,将阿里云的 repo 文件直接保存到 /etc/yum.repos.d/ 目录,覆盖原文件。
3. 第三步:清理旧缓存并生成新缓存
yum 会缓存旧源的软件包信息,得先清掉再生成新缓存,保证用的是新源:
# 清理旧缓存(删除过期的软件包索引)
sudo yum clean all
# 生成新缓存(加载阿里云源的软件包索引)
sudo yum makecache
- 执行 yum makecache 后,若显示 “Metadata cache created”,说明新缓存生成成功;
- 后续执行 yum install 软件名(如 yum install wget)时,将从阿里云源下载。
三、MacOS 系统:替换 Homebrew 源
Homebrew(简称 brew)是 MacOS 最常用到的包管理器,默认从 GitHub 和 Homebrew 官方仓库下软件,国内访问很慢。需要把 brew 核心仓库、homebrew-core 软件仓库、bottles 预编译包源 这三类地址都换掉,下面以阿里云为例:
1. 第一步:替换 brew 核心仓库(brew.git)
brew 自己的代码仓库(brew.git)默认托管在 GitHub 上,换成阿里云镜像:
# 进入 brew 仓库目录(通过 brew --repo 获取路径)
cd "$(brew --repo)"
# 将 git 远程地址改为阿里云镜像
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
- 验证替换:git remote -v,若显示 origin https://mirrors.aliyun.com/homebrew/brew.git (fetch),说明成功。
2. 第二步:替换 homebrew-core 软件仓库(homebrew-core.git)
homebrew-core 是 brew 官方的软件仓库(绝大多数软件的配方都在里面),同样换成阿里云镜像:
# 进入 homebrew-core 仓库目录
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
# 将 git 远程地址改为阿里云镜像
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
- 验证替换:git remote -v,显示阿里云地址即为成功。
3. 第三步:替换 bottles 预编译包源(关键!加速二进制包下载)
brew 下软件时,优先下载预编译好的二进制包(叫 bottles),默认源在国外,得通过环境变量 HOMEBREW_BOTTLE_DOMAIN 指定国内源。这里要根据你的终端类型(bash 还是 zsh)去改对应的配置文件:
情况 1:使用 bash 终端(默认终端)
# 将环境变量写入 ~/.bashrc(bash 启动配置文件)
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bashrc
# 使配置立即生效(无需重启终端)
source ~/.bashrc
情况 2:使用 zsh 终端(如 Oh My Zsh 用户)
如果已经切到 zsh 了,配置文件就是 ~/.zshrc,得改对应的文件:
# 将环境变量写入 ~/.zshrc(zsh 启动配置文件)
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
# 使配置立即生效
source ~/.zshrc
- 验证配置:执行 echo $HOMEBREW_BOTTLE_DOMAIN,若输出阿里云地址,说明生效。
4. 第四步:更新 brew 源(使配置生效)
brew update
- 执行后若显示 “Already up-to-date.” 或从阿里云源拉取更新,说明新源已生效;
- 后续执行 brew install 软件名(如 brew install node)时,bottles 包将从阿里云下载,速度大幅提升。
5. 可选:恢复为 Homebrew 官方源
万一哪天想切回官方源(比如国内源同步有延迟),执行下面这些命令:
# 恢复 brew 核心仓库
cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git
# 恢复 homebrew-core 仓库
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core.git
# 清除 HOMEBREW_BOTTLE_DOMAIN 环境变量(bash 用户)
sed -i '' 's/.*HOMEBREW_BOTTLE_DOMAIN.*//'g ~/.bashrc
source ~/.bashrc
# 清除 HOMEBREW_BOTTLE_DOMAIN 环境变量(zsh 用户)
sed -i '' 's/.*HOMEBREW_BOTTLE_DOMAIN.*//'g ~/.zshrc
source ~/.zshrc
# 更新官方源
brew update
四、常见问题与解决方案
1. Ubuntu 换源后 apt update 提示 “404 Not Found”
- 原因:源地址和系统版本对不上(比如用了 CentOS 的源,或者 Ubuntu 版本代号写错了);
- 解决:
- 执行 lsb_release -c 获取 Ubuntu 版本代号(如 focal 对应 20.04,jammy 对应 22.04);
- 手动编辑 sources.list:sudo nano /etc/apt/sources.list,把地址里的版本代号改成正确的值(如 https://mirrors.aliyun.com/ubuntu/ focal main);
- 保存后重新执行 sudo apt update。
2. CentOS 8 换源后 yum 提示 “Failed to download metadata”
- 原因:CentOS 8 官方已经停止维护,得用 CentOS Stream 8 的源;
- 解决:下载阿里云的 CentOS Stream 8 源:
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-Stream-8.repo
sudo yum clean all && sudo yum makecache
- 原因:部分软件(比如非官方仓库的软件)没同步到国内源,或者 HOMEBREW_BOTTLE_DOMAIN 没生效;
- 解决:
- 验证环境变量:echo $HOMEBREW_BOTTLE_DOMAIN,确保输出阿里云地址;
- 若仍不行,尝试重启终端,或用 brew install —build-from-source 软件名 从源码编译(速度慢一些,但能绕过源同步的问题)。
五、其他推荐国内源
除了阿里云,下面这些国内源也挺稳定,可以按地理位置挑(比如北方选阿里云,南方选腾讯云,教育网选清华源):
换源的时候,只要把前面命令里的“阿里云地址”替换成对应源的地址就行(步骤完全一样)。
六、总结
这篇覆盖了三大系统/工具的换源流程,核心逻辑都是一套:备份原配置 → 替换国内源 → 生效配置,关键要记住这几点:
- Linux 系统:改包管理器的核心配置文件(sources.list/CentOS-Base.repo);
- MacOS Homebrew:要同时换“仓库地址 + 预编译包源”,还要分清终端类型;
- 版本适配:源地址必须和系统版本对上(比如 Ubuntu 20.04 对应 focal,CentOS 8 对应 Stream 源)。
换源之后,软件下载速度一般能从“几十 KB/s”飙到“几 MB/s”,彻底跟“安装软件超时”说拜拜,也为后面搭开发环境(比如装 Git、Python、Docker)打好基础。