很多刚接触 Linux 的朋友,拿到一台服务器,或者刚装好一台虚拟机,第一句话问我的常常是:“怎么装软件?”第二句话十有八九是:“这个 vi 怎么退出?”这两句话,恰好就是 yum 和 vim 这两个基础工具要解决的问题。yum 管软件的安装、卸载和依赖关系,vim 管文件的查看、修改和代码编写。标题里写着“基础开发工具”,但真正用起来你就会发现,它们是每个 Linux 用户几乎每天都要碰的东西。
我见过不少人因为 yum 源没配好装不上包,因为不知道 vim 怎么保存退出,最后干脆放弃命令行回到图形界面。这和智商没关系,纯粹是没人把原理讲清楚,也没人告诉你踩坑之后怎么爬出来。所以我这篇文章不打算只堆命令,而是尽量把“为什么这么配”“报错到底在说什么”一起讲透。哪怕你是第一次接触 Linux,照着做也能把一套常用的开发环境搭起来,并且以后再遇到类似问题,心里会有一个清晰的排查方向。
1. 先搞清楚这两个工具到底解决什么问题
1.1 刚拿到 Linux 环境,最先崩心态的两件事
第一件事是装软件。你敲一个 yum install xxx,系统要么提示找不到包,要么提示依赖缺失,要么干脆卡在那里不动。很多初学者到这里就懵了,以为是命令敲错了,其实是 yum 源没有配置好,或者系统不知道该去哪里找这个软件包。说白了,yum 本身只是一个“客户端”,它要去你指定的仓库地址拉取软件信息,仓库没配对,后面全白搭。
第二件事是改文件。你用 vim 打开一个配置文件,发现方向键变成了 ABCD,不知道按什么才能退出,一不小心还把文件改乱了。这个体验确实不友好,但它是可以完全解决的。你只需要理解 vim 的模式机制,它其实比你在图形界面里点点点要高效得多。
1.2 yum 和 vim 的分工,以及为什么它们绕不开
yum 解决的是“软件从哪里来、缺了什么依赖、怎么升级和卸载”的问题。Linux 不像 Windows 那样一个 exe 双击完事,软件包之间牵扯着大量的依赖关系,yum 这类包管理器就是专门来解决这个麻烦的。
vim 解决的是“文件怎么改”的问题。你可能会说现在有 VS Code、有 IDEA,为什么还要用 vim?因为生产环境里的服务器绝大多数没有图形界面,你 ssh 上去之后,唯一能用的可靠编辑器就是 vim 这一族。不管是改 Nginx 配置、改 yum 源、写一段脚本,还是临时看一段日志,vim 都是最稳妥的选择。
1.3 这篇文章要带你看完什么
下面我会先讲 yum 的仓库原理、三种主流源配置场景,再讲本地源的完整配置步骤;然后进入排错环节,把最常见的 yum 报错和排查链路拆开来看;接着进入 vim 的模式思维和命令速查,再做一些高频实操,比如多行注释、全选复制、批量替换;最后用一套“用 vim 配 yum、用 yum 装工具链、再用 vim 写代码编译”的组合流程,把这两个工具串起来。你会发现,它们不是孤立的知识点,而是同一个工作流里的前后环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. yum:从“装不上”到“装得明白”,关键是理解仓库
2.1 yum 不是自己会装软件,它背后有一个“仓库”
你可以把 yum 想象成一个手机应用商店。商店本身不自带软件,它需要连接服务器,服务器上放着大量打包好的 rpm 包,以及一份描述这些包的信息清单。yum 运行时,先读取这份清单,你告诉它要装什么,它就根据清单计算依赖关系,然后把需要的包和依赖一起下载安装。
仓库的地址写在哪?在 /etc/yum.repos.d/ 目录下的 .repo 文件里。系统中可以同时存在多个仓库文件,每个文件里可以配置多个 [仓库名] 段落。你执行 yum repolist 看到的就是当前启用的仓库列表。
仓库地址也可以指向多种来源:可以是互联网上的镜像站,可以是本地磁盘里的 ISO 镜像,也可以是公司内网搭建的私有仓库。不管哪种,核心要素都一样:仓库名、baseurl(包实际存放地址)、enabled(是否启用)、gpgcheck(是否校验数字签名)。baseurl 这个词值得多一点关注,后面我们配置本地源的时候,所有工作围绕的都是把 baseurl 指向一个正确的位置。
2.2 先查一下你的系统现在用的是哪个源
拿到一台新机器,别急着装东西,先看看当前的源状态:
bash复制yum repolist
这个命令会列出所有启用的仓库 ID、名称和可用软件包数量。你也可以直接查看目录内容:
bash复制ls /etc/yum.repos.d/
CentOS 7 默认的 CentOS-Base.repo、openEuler 的 openEuler.repo、麒麟 V10 里的各种 Kylin-*.repo,大同小异。如果你发现某个仓库的软件包数量是 0,或者执行 yum install 时显示 "No package xxx available",那大概率就是仓库地址失效了、路径不对或者元数据没拉取成功。
另外两个高频查询命令也顺手说一下:
bas复制
