尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

没有wget?用curl和手工repo切换CentOS yum国内镜像源

发布时间:2026/9/29 16:39:18

资讯中心
01
ARTICLE

没有wget?用curl和手工repo切换CentOS yum国内镜像源

没有wget?用curl和手工repo切换CentOS yum国内镜像源
刚接手一台最小化安装的CentOS服务器配置网络后发现没有wget命令连基本的软件源都换不了。遇到这种环境很多刚入行的运维会直接卡住毕竟网上大量教程都是“首先下载wget”可问题是前提就是不存在的。这篇文章就是来破这个局的专门讲在没有wget的时候怎么通过curl、yum自身、手工编写repo文件这些路子把yum安装源顺利切换成国内镜像源。适合所有被精简环境折磨过的Linux管理员尤其是刚接触服务器运维的同学看完能直接上手。1. 场景拆解为什么会有“没有wget”的尴尬1.1 最小化安装与基础工具缺失的原理用过CentOS、Rocky Linux的人应该都有体会安装系统时如果选了“Minimal”或者“最小化”系统只会装最核心的软件包。这种设计思路是减少攻击面、降低资源占用但副作用就是很多基础工具没了wget就是其中之一。另一些情况是容器镜像、云主机模板为了体积刻意裁掉了wget只保留curl。所以你会看到系统里明明有网络curl也能用但wget却提示command not found这时候别急着怀疑系统坏了这其实是设计上的取舍。我当时遇到的第一台机器就是云厂商提供的最小化镜像连man手册都没有只有一堆rpm包。想改yum源时习惯性输入wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo结果直接报错。那一刻才意识到运维不能只会复制粘贴一条命令必须理解命令背后的替代逻辑。1.2 修改yum源的真正本质替换repo文件所谓“修改yum安装源”很多人第一反应是执行某个神秘命令但实际上yum/RPM系的软件源机制非常简单系统读取 /etc/yum.repos.d/ 目录下所有以 .repo 结尾的文件根据其中的baseurl地址去下载软件包元数据。所以不管是wget还是curl还是直接vi编辑文件只要最终能把一个内容正确的repo文件放到这个目录下就成功了。理解了这一点思路就打开了。有wget就用wget没wget就用curl没curl就手工建文件甚至可以从另一台机器拷贝repo文件过来。关键是知道repo文件的格式和可用镜像地址而不是死记一条命令。2. 方案一curl完全替代wget一条命令解决问题2.1 curl与wget的差异快速对照很多人对curl和wget的印象是“都能下载文件”但实际使用中有不少细微差别。wget更专注于递归下载、断点续传这对于下载网页镜像很友好curl则是一个支持多种协议、更偏向数据传输的工具。在服务器日常运维中两者互换最常见的就是下载单个文件此时curl完全可以胜任。我用一张表把常用场景的对应关系列出来方便大家快速对照使用场景wget命令curl对应命令下载文件到当前目录并保留原文件名wget URLcurl -O URL下载文件并重命名wget -O 新文件名 URLcurl -o 新文件名 URL下载显示进度条wget 默认显示curl -# URL或指定进度条跟随重定向wget 默认跟随curl -L URL测试HTTP响应头curl -I 更具优势无对应常用wget这里要特别提醒curl下载文件时必须加 -O 或 -o如果只写 curl URL文件内容会被直接打印到终端输出一大片乱码很多人第一次就这样傻眼。另外curl默认不跟随重定向国内很多镜像站都是HTTP跳转到HTTPS的所以必须加 -L 参数否则你下载下来的可能是301跳转页面而不是真正的仓库文件。2.2 用curl下载阿里云repo文件并替换我们以CentOS 7为例阿里云镜像源提供的repo文件地址通常是 http://mirrors.aliyun.com/repo/Centos-7.repo 也可以使用HTTP的镜像地址。在没有wget的机器上用curl执行curl -L -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo分解一下执行过程-L 表示跟随重定向-o 指定输出文件路径后面跟URL。这里没有直接用 -O 是因为目标文件需要放在系统目录里而且文件名要改成CentOS-Base.repo所以用 -o 更合适。执行完可以再用 head -n 5 /etc/yum.repos.d/CentOS-Base.repo 查看一下文件内容确认下载的是text/plain格式而不是HTML错误页。有的同学会问如果URL用的是 https 开头怎么办那需要curl支持SSL一般系统自带的curl都有。如果提示证书问题可以在命令中临时加 -k 参数忽略证书校验但这只适合应急真正解决问题还是要安装ca-certificates。另外下载完记得清理一下yum缓存让新源生效。2.3 curl下载后清理缓存并验证源替换完repo文件后必须执行yum clean all yum makecacheyum clean all 用于清空原有缓存元数据makecache 会重新从新源下载元数据。如果源地址正确、网络通makecache 会输出类似“Determining fastest mirrors”或镜像站名并成功生成缓存。如果这一步报错比如“Could not retrieve mirrorlist”先别慌多半是repo文件里还有残留的其他源地址或者系统版本识别错误可以在后面章节排查。另外一个值得掺杂的小技巧curl很容易测试新源是否连通比如先执行 curl -I http://mirrors.aliyun.com/repo/Centos-7.repo 看返回的HTTP状态码是不是200响应头里是不是正常。这样可以避免直接替换repo文件后才发现地址根本不可用白白浪费一波makecache时间。3. 方案二先通过yum安装wget再走常规路子3.1 利用yum自身下载wget的原理既然yum能用为什么不直接 yum install -y wget 很多人会问但这里有个悖论如果当前系统默认源还在指向官方仓库而官方仓库在国内访问极其缓慢那安装wget可能会卡在等待网络响应上。但好消息是即便没有修改源yum在官方源上的元数据往往已经存在于基础镜像中或者至少能连上官方源把包拉下来。所以优先尝试 yum install -y wget 是最省事的成功概率并不低。如果默认源太慢也可以先临时指定一个源来安装wget。比如下载阿里云CentOS-Base.repo后目前已经切换成功再执行 yum install -y wget 就是顺理成章的事。这样做的好处是后续可以使用wget符合大多数教程的习惯团队协作时大家看命令也不会费解。3.2 分步操作临时源安装wget再配置正式源完整流程是这样的先备份原有repo文件mkdir -p /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/用curl下载一个临时repo文件到/etc/yum.repos.d/比如阿里云的CentOS-7.repo。执行 yum clean all yum makecache。执行 yum install -y wget。此时已经拥有wget可以按网上常规教程重新下载官方或你想要的源或删除临时源恢复正式源。这种“先让yum能用再装工具”的思路符合运维里的“先解决吃不上饭再挑菜品种”的逻辑。我建议团队里如果建立初始环境脚本可以考虑把wget用yum直接拉好避免后续每次都要面对没有wget的窘境。4. 方案三没有curl也没有网络条件时的手工方案4.1 手工编写一个最小化的repo文件极端情况下系统可能连curl都没有或者网络只能通过内网代理访问外网根本不通。此时替代思路就是手工创建repo文件。一个CentOS 7可用的最小repo文件长这样[base] nameCentOS-$releasever - Base baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [updates] nameCentOS-$releasever - Updates baseurlhttp://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [extras] nameCentOS-$releasever - Extras baseurlhttp://mirrors.aliyun.com/centos/$releasever/extras/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7直接用vi或者echo重定向将这段内容写入 /etc/yum.repos.d/CentOS-Base.repo。这里用了变量$releasever和$basearchyum会分别自动替换成系统大版本号和CPU架构比如7.9.2009和x86_64省得不同机器重复修改。gpgcheck1代表开启GPG校验此时必须有本机密钥文件。CentOS系统一般自带RPM-GPG-KEY-CentOS-7文件在/etc/pki/rpm-gpg/下如果不存在可以临时设置gpgcheck0绕过校验但这意味着信任风险仅用于内网环境或临时恢复。生产环境还是尽量把密钥文件补全。4.2 有光盘或ISO时配置本地源如果你手头有CentOS安装光盘或ISO镜像可以完全不依赖外网。挂载ISO后直接把repo指向本地文件系统例如mount -o loop /path/to/CentOS-7-x86_64-Minimal-2009.iso /mnt/cdrom cat /etc/yum.repos.d/local.repo EOF [local] nameLocal CentOS DVD baseurlfile:///mnt/cdrom gpgcheck0 enabled1 EOF yum clean all yum makecache这个本地源可以解决95%以上基础软件包的安装需求wget、vim、net-tools都可以直接装。我实际用这个方案抢救过一台内网离线机器连网络配置都是静态的且没有外网路由本地源是唯一出路。要知道yum源本质就是“一组文件路径”既可以是HTTP也可以是本地路径file://这一点很多人忘了。4.3 同架构机器直接scp或者拷贝repo文件如果手头有另一台同系统版本、同架构的机器甚至不需要写任何文件内容。直接用U盘拷贝或者在有网络的机器上用scp发送接收端用scp或cp放进去就行。比如scp root192.168.1.10:/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/如果接收端连scp命令都没有那说明openssh-clients也没装此时可以换用python内置的简易HTTP服务或者直接用base64编码把文件内容传过去。我记得有一次在两台机器之间传repo文件对方连scp都缺我就把文件内容用base64编码打印出来在另一端解码写入也就几十行字很方便。这一策略的本质是“借用现有基础设施”运维要灵活。5. 实测过程与关键踩坑记录5.1 从“命令不存在”到成功makecache的完整现场我拿一台CentOS 7.9最小化系统实测。登录后输入 wget 提示 -bash: wget: command not found输入 curl 则正常。先检查现有repo文件ls /etc/yum.repos.d/ 只看到CentOS-Base.repo和CentOS-Media.repo。我没动Media那个直接备份Basecd /etc/yum.repos.d/ mkdir -p backup mv CentOS-Base.repo backup/然后用curl下载清华源对应的repo文件。注意清华源给出的文件地址是 https://mirrors.tuna.tsinghua.edu.cn/help/centos/ 页面里的但实际文件比较难直接拿常规URL下载所以我改用阿里云的Centos-7.repocurl -L -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo下载完后执行 yum clean all 和 yum makecache输出里很快列出了阿里云的镜像源并完成了元数据缓存。紧接着 yum install -y wget 秒装成功。此时再回头执行wget下载其他文件一切顺畅。5.2 版本不匹配导致yum源失效的真实坑点换源过程中最容易踩的坑是系统版本与repo文件不匹配。比如你把CentOS 7的repo文件放到了CentOS 8系统上即使地址目录存在也会因为baseurl路径中的releasever变量不同导致404。更隐蔽的是repository ID冲突某些自定义的.repo文件与系统自带的源ID重复yum会忽略后加载的那个造成makecache时只更新了一个源。遇到这种情况尽量不要手工猜直接用对应官方迁移页面的repo文件。比如CentOS 8已经停止维护只能迁移到Rocky Linux或AlmaLinux直接拿CentOS 8的官方源地址可能已经失效这时候更推荐把系统尽量升级到社区迁移版。但如果是测试环境最简单的验证方法是用 curl -I 逐个检查repo中的baseurl路径看到200再写入文件。5.3 安装包时GPG签名与repo优先级问题有了源、装软件还会碰到两个高频问题。第一个是GPG key相关报“The GPG keys listed for the repository are not installed yet”解决办法是用 rpm --import 导入对应的官方公钥或者临时把gpgcheck设为0。第二个是优先级问题如果系统里同时存在多个源且包有不同版本可能出现安装到的不是你想要版本的情况。此时可以通过 yum --disablerepo其他源 --enablerepo目标源 install 包名 来指定来源。另外我遇到过yum makecache信息特别慢的情况经常卡在某个镜像上这是因为repo文件可能被写入了多个镜像列表yum会逐个探测。此时可以直接把baseurl改成固定的镜像地址不要再用mirrorlist。比如CentOS-Base.repo里本来就支持mirrorlist指令为了稳定我直接把它注释掉只保留baseurl这样makecache速度直线上升。6. 收尾给新手的实用建议我自己用的最多的是curl 手工备份组合。原因是curl作为系统基础工具出现概率远高于wget且写脚本时curl的-fS参数能更好地判断失败状态。第一次处理没有wget的服务器时心里也没底但等把repo文件成功切换后发现这根本不是什么难事关键是理解了yum源的本质和工具的替代关系。最后分享一个小技巧无论用哪种方式修改完源养成习惯在/etc/yum.repos.d/下保留一个backup目录把原始repo文件放进去。很多人在换源时直接把原文件删了结果发现业务里某个老包的版本只有原始源里有想回退都没地方找。备份一下随时能反悔这个习惯能帮你少踩很多坑。后续如果再遇到没有wget的环境先检查curl再考虑手工repo最后走本地源这条路子几乎能覆盖所有精简系统。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。