地阶法宝——基础开发工具(yum, vim)
在Linux环境里摸爬滚打这些年,我越来越觉得yum和vim就是开发者的“地阶法宝”——听起来平平无奇,但你要是真正用好了它们,日常工作的效率提升是立竿见影的。yum是CentOS/RHEL系Linux的软件包管理器,负责解决装软件、查依赖、更新系统这些最基础的“补给问题”;vim则是一款能陪你走完整个开发周期的文本编辑器,从改配置、写脚本到撸代码,它一个窗口全包。这篇文章面向的是刚入门Linux、或者已经用了一阵子但总觉得差点意思的开发者,我会把yum和vim从“会用”到“用好”的关键点都梳理一遍,帮你们绕过那些我当年踩过的坑。
很多人觉得这类基础工具没什么好学的,会用几条命令不就够了?但实际情况是,不会配yum源,你装个软件能卡一下午;不懂vim的模式切换,你写代码时连删除一行都要纠结半天。正好结合最近社区里讨论热度很高的几个话题——本地yum源配置、CentOS 7阿里云yum源、vim保存退出命令、vim与Xcode对比——我把这两件“法宝”掰开揉碎,从原理到实战逐一拆解,保证你看完能直接用上。
1. 内容整体设计与思路拆解
1.1 为什么yum和vim能被称为“地阶法宝”
修仙小说里,法宝分天地玄黄,地阶法宝意味着什么?意味着它没有天阶法宝那么炫酷拉风,但胜在普适、稳定、关键时刻绝对靠谱。yum和vim在我眼里就是这样的存在。
先说yum。它解决的是Linux软件分发中最头疼的依赖地狱问题。你在源码编译装软件时,肯定经历过configure阶段报缺库、make阶段报缺头文件、运行阶段报找不到动态链接库,一环扣一环,能让你怀疑人生。yum基于RPM包管理,仓库(repo)里预先构建好了二进制包,同时维护着包之间的依赖关系表。你执行一条yum install,它自动帮你拉取所有依赖项,安装完成后直接就能用,根本不用关心底层头文件装到哪个目录、动态库路径怎么设置。这就好比你去超市买一份料理包,所有配料人家给你配好了,回家热一下就能吃,而不是逼你从种菜开始。
再说vim。这东西是Vi Improved的缩写,首次发布于1991年,到现在三十多年了。你可能会问,一个上古时代的编辑器,凭什么到今天还能在开发者工具链里占一席之地?原因很简单:它在服务器环境里是默认标配。不管你是连ECS、物理机还是Docker容器,只要进入命令行,vim几乎一定存在。你会Vim的基础操作,就意味着你在一台全新服务器上也能立刻改配置、写脚本,不用等待任何IDE的加载过程。此外,vim的设计哲学是“把手留在键盘上”,熟练后你的编辑速度可以远超鼠标流操作,这种效率优势是图形化编辑器很难追上的。
1.2 工具选型:为什么要用yum而不是其他包管理器
如果你接触过不同Linux发行版,会发现包管理器的江湖其实挺热闹:Debian系用apt,Arch系用pacman,openSUSE用zypper,Gentoo用portage。那为什么我们在CentOS/RHEL环境里选择yum?
核心原因是生态兼容。CentOS/RHEL系列在服务器市场的占有率极高,大量商业软件、数据库、中间件都优先针对RHEL系做兼容性验证。你用yum安装的软件包,都是经过发行版官方或EPEL(Extra Packages for Enterprise Linux)仓库验证过的,稳定性和安全性相对有保障。另外一个实在的原因是,很多运维自动化工具(比如Ansible的yum模块、Ambari搭建Hadoop集群时的前置依赖安装)原生支持yum,你换成别的包管理器,这些工具就玩不转了。
当然,yum本身也在进化。CentOS 8开始用dnf替代yum作为默认包管理器,但dnf的命令语法和yum高度兼容,你实践中看到的很多“yum教程”在dnf上一样能跑。我个人的建议是,不用纠结到底是yum还是dnf,把yum的核心用法吃透,到新系统上遇到dnf也就自然上手了。
1.3 vim vs 现代编辑器的差异化定位
每次我推荐vim,总有人说:“有VSCode、Xcode这种现代IDE,为什么不选那些?界面好看,插件丰富,还有智能提示。”这话没毛病,但忽略了一个核心场景:你并不是永远都有图形界面可用。
举个真实例子,之前排查线上问题,SSH连上服务器后发现是纯命令行环境,连tmux都没有。我需要在10分钟内修改Nginx配置、调整PHP-FPM参数、写一个简单的Shell脚本看日志过滤结果。这时候vim是我唯一且最可靠的选择。哪怕VSCode有Remote SSH插件,你也得先保证本地网络、端口、SSH密钥全都正常,而vim不需要这些——它就在那里,打开即用。
还有人问vim和Xcode怎么选。这俩根本不是一个赛道的东西。Xcode是macOS上开发iOS/macOS应用的集成开发环境,项目的编译、调试、签名、打包全流程都靠它;vim是通用文本编辑器,它能写任何语言,但它不直接编译、不直接调试。用生活类比就是:Xcode是精装厨房,燃气灶、烤箱、水槽全配好了,你做西餐很爽;vim是一把好菜刀,配上任何厨房(任何操作系统、任何环境)都能用,但你需要自己搞定其他厨具。所以要不要学vim?只要你有可能跟Linux服务器打交道,就值得学。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心细节解析与实操要点
2.1 yum源配置:yum的灵魂所在
yum虽然好用,但前提是你得有一个能用的软件源。所谓软件源(repo源),就是yum去哪个服务器拉取软件包的地址列表。系统安装完后,默认的yum源指向发行版官方的镜像站。但国内网络访问官方源经常慢得想摔键盘,所以第一步要做的就是配置一个适合自己的yum源。
这里我完整走一遍CentOS 7配置阿里云yum源的操作流程,这套方法在CentOS 7.x全版本通用。
首先,备份系统自带的repo文件。不要嫌这一步啰嗦,万一你改坏了,还能一键还原。
bash复制mkdir -p /etc/yum.repos.d/backup
cp -r /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
rm -f /etc/yum.repos.d/*.repo
然后,下载阿里云的repo文件。注意区分系统版本,用cat /etc/redhat-release确认是CentOS 7还是CentOS 8。
bash复制# CentOS 7
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# CentOS 8
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
接下来清理缓存并生成新缓存:
bash复制yum clean all
yum makecache
最后验证源是否生效:
bash复制yum repolist
如果显示出一串仓库ID和软件包数量,说明配置成功了。
注意:不要用
rm -rf /etc/yum.repos.d/删整个目录。有些发行版的repo配置后期还需要依赖这个目录结构,保留backup目录是最稳妥的做法。另外,yum clean all和yum makecache这两步不能省,后者尤其关键,因为yum需要重建软件包元数据缓存,没有这一步新换的源不会立刻生效。
2.2 本地yum源:离线环境下的救命稻草
有外网的时候,配个镜像源就够用了。但真实运维环境里,很多服务器是内网隔离的,根本没有外网权限。有的企业出于安全考虑,只开放特定端口访问内网源;有的边缘机房,连内网镜像服务器都没有,只有几块装着离线RPM包的硬盘。这时候,你如果不会配置本地yum源,装个软件都得跪着求人。
所谓本地yum源,就是把RPM包文件放到本机的某个目录,然后让yum从这个目录读取软件包和依赖信息。最简单的一种做法是直接挂载系统安装光盘(ISO)作为本地源。
操作流程大概是这样的:
先挂载ISO镜像。假设你的光驱设备是/dev/cdrom,挂载点自建一个目录。
bash复制mkdir -p /mnt/cdrom
mount -o loop /dev/cdrom /mnt/cdrom
如果不能直接挂载,说明你拿到的是ISO镜像文件,那就要用loop设备:
bash复制mount -o loop /path/to/CentOS-7-x86_64-DVD-1810.iso /mnt/cdrom
然后在/etc/yum.repos.d/下新建一个本地repo配置文件:
ini复制[local]
name=Local CentOS 7 Repository
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
最后执行缓存更新:
bash复制yum clean all
yum makecache
yum repolist
这个过程我踩过一个坑:baseurl=file:///mnt/cdrom,这个路径别少写一个斜杠。很多人写成file://mnt/cdrom或者file:/mnt/cdrom,yum会提示找不到仓库。文件协议的URL标准写法就是file://加绝对路径,绝对路径本身以/开头,所以就成了三个斜杠。
2.3 配置本地yum源的真实实验场景
我见过很多朋友在学习Hadoop部署时,需要手动安装JDK、ZooKeeper、HDFS相关依赖,集群里每台机器都要装同样的基础包。如果你一台一台从外网下RPM再手动rpm -ivh安装,光处理依赖就能烦死你。我当时在一个练习环境里搭Hadoop集群,就是先在一台能上网的机器上把所有需要的RPM包下载好,然后打包拷贝到内网集群的每台机器,最后每台机器配置同一个本地yum源,统一装依赖。
这个实验的核心步骤可以总结为四条:
- 准备一个RPM包存放目录,比如/tmp/local-repo。
- 使用
yumdownloader命令(需要先安装yum-utils)下载所需RPM及其依赖包。 - 执行
createrepo命令生成仓库元数据。 - 在集群节点上配置指向这个目录的repo文件。
其中第3步是最容易被忽略的。你以为包放进了目录就完事了?不行。yum必须读取目录下的repodata目录里的元数据文件,才知道这个仓库里有哪些包、依赖关系是什么。createrepo就是干这个的:
bash复制yum install -y createrepo
createrepo /tmp/local-repo
执行完后,/tmp/local-repo下会多出一个repodata目录。之后在集群其他机器上配置:
ini复制[hadoop-local]
name=Hadoop Local Repo
baseurl=file:///tmp/local-repo
enabled=1
gpgcheck=0
再yum makecache一下,就能愉快的yum install了。实测下来,装JDK和Hadoop依赖的速度比从外网拉快得多,也稳定得多。这个思路在实际生产环境里同样管用,很多公司内部的软件分发平台本质上就是这么玩的,只不过加了权限控制和HTTP服务。
2.4 yum常见命令速查与核心参数解析
光会配置源不够,yum的命令体系你也得玩熟。这里我把日常使用频率最高的命令整理成一个速查表,按使用场景分类:
| 使用场景 | 命令示例 | 说明与心得 |
|---|---|---|
| 安装软件 | yum install -y nginx |
-y表示自动确认,脚本里必加,交互环境下可省 |
| 卸载软件 | yum remove -y nginx |
会同时卸载依赖它的包,小心误伤 |
| 搜索软件 | yum search 关键词 |
不确定包名时先搜一下,比猜包名靠谱 |
| 查看包信息 | yum info nginx |
查版本、大小、仓库来源,装之前先看一眼版本 |
| 列出已安装 | yum list installed |
查系统里已经装了啥,排查冲突时用得上 |
| 检查更新 | yum check-update |
只检查不更新,返回码为100时表示有可用更新 |
| 更新软件 | yum update -y 包名 |
单独更新某个包,避免全量更新导致配置漂移 |
| 全量更新 | yum update -y |
慎用!生产环境可能触发内核升级、服务重启 |
| 历史记录 | yum history |
一条命令查看最近做了哪些变更,回滚有据可循 |
| 回滚操作 | yum history undo 编号 |
撤销指定ID对应的变更,应急恢复神器 |
这里多说一句yum history,这是很多人忽略的功能。你在一台生产服务器上折腾了半天,装了一堆依赖,结果出问题了,想恢复到装之前的状态怎么办?yum history会以事务为单位记录所有安装、升级、删除操作,你只要找到对应的ID号,执行yum history undo ID,就能自动回滚这次操作涉及的所有变更。这功能我推荐每个人都练熟,关键时刻能救大命。
2.5 vim为什么难学,以及它的三种模式
聊完yum,来聊聊vim。很多初学者第一次打开vim,看到的是一个空白的界面,敲键盘输入文字没反应,想退出又不知道怎么弄,最后只能强制关闭终端,这就是对vim的模式机制不理解导致的。
vim是一种模式化编辑器,它有几种核心模式,其中最常见的三种是普通模式(Normal Mode)、插入模式(Insert Mode)和命令行模式(Command-Line Mode)。
刚打开vim时你处于普通模式。在这个模式下,键盘上的按键不是用来输入文字的,而是用来执行编辑命令的,比如dd删除当前行、yy复制当前行、p粘贴。你想打字?按i进入插入模式,这时候键盘输入才真正变成文本内容。当你写完想保存退出,得先按Esc退出到普通模式,然后输入:wq(命令行模式)回车,保存并退出。
用一句话总结:普通模式是操作模式,插入模式是输入模式,命令行模式是执行保存、查找、替换等高级操作的入口。理解了这个机制,vim就不再神秘。你只需要记住,任何时候懵了,连续按几次Esc回到普通模式,一切都在掌控中。
网上有一张很经典的vim键盘图,把各个快捷键和模式的关系标得一清二楚。我建议初学者把这三种模式的切换原理搞清楚,再配合肌肉记忆去练习,一周左右就能脱离“打开就懵”的状态。
2.6 vim保存退出命令详解
“vim保存退出命令”是搜索热度非常高的词组,说明这是新手最痛的点。我这边把情况一次性说透。
在vim中,保存和退出是两条独立命令,可以组合用、分开用:
| 操作意图 | 命令 | 使用场景 |
|---|---|---|
| 保存但不退出 | :w |
写代码过程中的常规保存 |
| 不保存直接退出 | :q! |
改乱了不想保存,强制退出 |
| 保存并退出 | :wq |
最常见的组合操作 |
| 保存并退出(等同快捷键) | ZZ |
大写Z按两次,在普通模式下更快 |
| 强制保存并退出 | :wq! |
对只读文件有时需要,慎用 |
| 另存为 | :w /path/to/file |
把当前内容写到别的文件 |
这里要特别提醒的是:q!里的那个感叹号。如果你用:q退出时系统提示“No write since last change”,意思是你上次保存之后又有修改了,想退出不保存,必须加!强制执行。新手在这里经常会卡住,其实就是在告诉你:兄弟,你还没保存呢。
另外一个容易踩的坑是,当你用vim打开一个没有写权限的文件(比如/etc/nginx/nginx.conf),修改后:wq会提示“E45: 'readonly' option is set”,这时你可能会下意识加!强制保存,然后发现还是失败,因为这涉及到系统文件权限的问题,不是vim能解决的。正确做法是先用sudo重新打开,或者:w !sudo tee %(这个黑科技命令用得少,但确实有效)。
3. 实操过程与核心环节实现
3.1 从零开始配置CentOS 7阿里云yum源全流程
这部分我重新整理一版完整可复制的操作流程,把之前散落在各节的步骤串起来。假设你拿到的是一台刚装好的CentOS 7最小化安装服务器,没有图形界面,只有命令行。
第一步,确认系统版本和网络状况。
bash复制cat /etc/redhat-release
ping -c 3 mirrors.aliyun.com
第二步,备份并替换repo配置。
bash复制mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
注意我这里用的是mv而不是cp,因为默认那些官方repo配置源指向的是国外的mirror.centos.org,留着不删也没用,还有可能干扰后续的源选择。如果你确实想保留官方源作为备用,那就用cp,然后在repo文件里把enabled改成0,手工禁用。
第三步,清理并重建缓存。
bash复制yum clean all
yum makecache
执行yum makecache时会从阿里云镜像下载元数据,速度通常很快,几十秒到一两分钟不等,取决于你的网速。
第四步,验证源生效。
bash复制yum repolist
yum install -y tree
装一个tree命令试试水,如果能正常下载安装,说明整套配置就通了。
3.2 手工搭建本地yum源仓库完整记录
这个流程我在配置Hadoop实验环境时跑通过,现在完整记录一遍。场景是:内网有三台服务器,需要统一安装Java、Python3以及若干工具链依赖,但是它们都没有外网权限。
我在外网中转机器上操作:
先安装yum-utils(提供yumdownloader命令)和createrepo:
bash复制yum install -y yum-utils createrepo
创建本地仓库目录,并下载目标RPM包。比如我需要下载nginx和它的依赖,可以这样:
bash复制mkdir -p /tmp/local-repo
cd /tmp/local-repo
yumdownloader --resolve nginx
--resolve参数会连带下载所有依赖包,这是关键。如果不加这个参数,只下载nginx本体,那其他机器上装的时候还是会报缺依赖。
下载完一批包之后,生成仓库元数据:
bash复制createrepo /tmp/local-repo
此时/tmp/local-repo/repodata/目录出现。把这个目录整个打包分发到内网机器。
bash复制tar czf local-repo.tar.gz /tmp/local-repo
scp local-repo.tar.gz user@内网机器IP:/tmp/
在内网机器上解压并配置repo文件:
bash复制tar zxf /tmp/local-repo.tar.gz -C /
cat > /etc/yum.repos.d/local.repo <<'EOF'
[local-repo]
name=Local RPM Repository
baseurl=file:///tmp/local-repo
enabled=1
gpgcheck=0
EOF
yum clean all
yum makecache
yum install -y nginx
这里有个细节:baseurl=file:///tmp/local-repo,后面的路径必须指向包含repodata目录的那一层。如果你把RPM包散落在多个子目录里,也可以用baseurl=file:///path/to/repodir/*/这种通配符形式匹配多个子目录,但我不推荐这么做,一来元数据生成容易出错,二来排查问题麻烦。规规矩矩一个目录一个repo,简单清晰。
3.3 yum下载软件中断恢复
热词里有一条很接地气的搜索:“linux系统yum下载软件中退出了怎么回去接着下”。这问题我遇到过好几次。大软件包拉到一半网络断了,或者你手滑关了终端,重新开始又得从头下,心态直接爆炸。
其实严谨地说,yum本身不支持断点续传。它下载RPM一般是先下到一个缓存目录(/var/cache/yum/),如果下载中断,已经下好的部分会被抛弃,重新执行yum install会重新拉取整个文件。所以那些教你“加-C参数使用缓存继续下载”的做法,针对的其实是另外一个场景——已经完整下载过、但安装过程中失败的情况。
yum -C install的含义是“使用本地有缓存的数据进行操作”,它只读缓存里的元数据和包文件,不访问网络。如果你曾经成功下载过某个版本的包,下次安装相同版本时可以用-C,它会直接从缓存里找包安装,速度飞快,但前提是缓存里有完整的RPM包。
如果是下载中断,常规处理思路是换一个更稳的下载通道。我比较推荐的做法:如果网速不稳,先把RPM包拿到本地再分发。在能上网的机器上执行:
bash复制yumdownloader --resolve 软件名
把下载好的rpm文件和所有依赖rpm保存下来,之后rpm -Uvh *.rpm或者传到一个目录做成本地源,都比在弱网环境里反复尝试yum install靠谱得多。
3.4 vim编辑器的核心实操操作
vim的学习曲线确实陡,但它是有方法论的。我认为最关键的是抓住两个时间点:一个是从普通模式进入插入模式的时机,另一个是执行保存、退出、查找等命令的时机。
先讲最基础也是最常用的移动操作。在普通模式下,你可以用hjkl四个键控制光标左、下、上、右移动,这是vim的标志性设计。很多人不理解为什么不直接用方向键。方向键当然也能用(在普通模式下),但你的右手需要在主键盘区和方向键之间来回移动,效率自然就低了。vim派玩家练的就是手不出主键盘区,一切操作都在键盘核心区域完成。
行内操作方面:
0跳到行首,$跳到行尾^跳到行首第一个非空白字符w按单词往后跳,b按单词往前跳
跨行操作:
gg跳到文件第一行G跳到文件最后一行:n跳到第n行
编辑操作方面:
x删除光标所在字符dd删除当前行yy复制当前行p在当前行下方粘贴u撤销Ctrl + r重做
查找替换是vim的重头戏,一定要掌握。比如在全文范围把“foo”替换成“bar”:
vim复制:%s/foo/bar/g
这里面各部分的含义,我拆开解释一下:
%表示所有行。如果要限定在1到10行内,写成1,10s/foo/bar/gs是替换命令foo是要被替换的文本bar是目标文本g表示一行内所有匹配都替换。如果最后一行的g不加,默认只替换每行第一个匹配到的结果
另外,用/关键词可以在普通模式下搜索内容,按n跳转到下一个匹配结果,按N跳转到上一个,这个操作在几百行配置里排查问题时特别高效。
3.5 vim分屏与插件minibufexplorer用法
当你开始用vim做实际项目开发时,单窗口编辑一个文件往往不够用。比如你改前端代码时,要同时看HTML、CSS、JS三个文件;你调接口时,要同时看代码和日志。这时候vim的窗口分割功能就派上用场了。
:split或:sp是水平分割窗口,:vsplit或:vsp是垂直分割窗口。分割后,用Ctrl + w加方向键在窗格间切换焦点。如果一时记不住快捷键,也可以直接用鼠标点(前提是终端支持鼠标交互,vim里设置set mouse=a后就可以用鼠标点击切换窗口和调整窗格大小)。
分屏解决的是“同时看多个文件”的需求,但如果你同时开了一堆文件,需要快速切换,就要用到buffer(缓冲区)概念。vim中每个打开的文件是一个buffer,你可以通过buffer列表快速跳转。而minibufexplorer(MBE)插件就是把buffer列表以可视化的方式展示在窗口顶部。你在:w保存文件后,如果启用了minibufexplorer,它会自动刷新文件列表,标出当前正在编辑的文件。
minibufexplorer的安装,如果你用的是Vundle或vim-plug插件管理器,在配置里加一行再执行安装即可。以vim-plug为例:
vim复制Plug 'fholgado/minibufexplorer'
然后执行:PlugInstall。装完后在:vimrc里加上:
vim复制let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplorerMoreThanOne = 0
开启这些配置后,你可以用Ctrl + Tab在buffer间循环切换,方向键也能控制,体验感大幅提升。个人体会是,minibufexplorer最大的价值在于“看到”而不是“按到”——你一眼能看到当前打开了哪些文件,哪个是当前文件,少了记忆负担,这对需要同时改多个配置文件的人来说非常友好。
3.6 在Windows下使用vim的实战路径
热词里有“怎么在windows下安装vim”。其实在Windows上用vim完全不土,也不矛盾。很多人在公司用的是Windows台式机,但维护的服务器是Linux,这时候在本地装一个vim,既能日常练习手感,也能在写脚本时保持与服务器环境一致的编辑习惯。
Windows下装vim,最主流的方式是选择gvim。到vim官网下载Windows版本安装包,一步步点Next就行。装完后你要注意一个细节:安装过程中有一个步骤是问你是否把vim关联到系统PATH环境变量,如果你想让vim命令在PowerShell或CMD里直接可用,这一步一定要勾选。装完重新打开终端才能让PATH生效。
另外还有一种很轻量的选择,就是通过Windows Terminal加上WSL(Windows Subsystem for Linux)。你可以在WSL里完整使用Linux的vim、yum等工具链,体验几乎和真实服务器一模一样。这方案我实际用下来感觉最舒服,因为它保留了Linux环境下的文件权限、路径风格和Shell行为,换到服务器上操作完全零成本。
要是你电脑上装了Git for Windows,它其实也自带了一个vim(通常在Git安装目录下的usr/bin里)。很多人不知道这个彩蛋,其实你完全可以在Git Bash里直接输入vim使用,免费的,不用额外装。
4. 常见问题与排查技巧实录
4.1 yum命令执行时报Killed的排查思路
热词里有“yum命令导致killed”,这个现象我遇到过,背景是那台机器内存比较小(2G的虚拟机),在执行yum update或装大软件时,系统突然把yum进程杀了,终端显示Killed。
这是典型的OOM(Out Of Memory)问题。yum在解析依赖和进行事务处理时,需要加载大量RPM包元数据到内存,加上执行rpm脚本时的临时开销,内存吃紧时Linux内核的OOM Killer就会启动,挑一个“内存大户”杀掉,yum经常就是那个“大户”。
排查和解决方案按优先级排列如下:
- 先用
free -h看内存是否真的不足。如果available只剩几十MB,基本可以确诊。 - 关闭一些不必要的大进程。比如你是VMware虚拟机,可以先把宿主机里其他虚拟机暂停一下;如果是云服务器,检查有没有跑着异常的进程。
- 清理yum缓存:
yum clean all,然后把/var/cache/yum下的临时文件删一删,腾出磁盘同时也减少后续加载元数据的内存压力。 - 增加swap空间。这是最治本的临时方案,给系统加一个swap文件,能在物理内存捉急时给yum一个缓冲。
bash复制dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
这段命令会创建一个2G的swap文件。如果你只是应急,reboot之后需要重新swapon;想永久生效,得在/etc/fstab里加一行,但那就扯远了。有一点必须提醒:swap文件创建时最好放在系统盘上有足够空间的分区,别放在/tmp这种可能被清理掉的目录。
- 如果你的机器长期内存吃紧,建议从业务层面优化,比如换更大的配置,或者把yum的并发下载关掉。yum有一个参数
max_parallel_downloads(dnf默认支持),把它调小或设置为1,能减少并发下载带来的内存压力。
4.2 Red Hat系列配置yum仓库的常见坑
Red Hat和CentOS的yum体系本是同源,Red Hat 8/9之后官方默认用的是dnf,底层仓库metadata格式也升级成了libsolv驱动的方式。但网上很多教程还停留在Red Hat 6时代的玩法,导致有人想“把redhat6 yum升级到centos7”,这操作我劝你别碰,风险极大。
Red Hat系统默认自带的subscription-manager管理的是官方订阅仓库,如果你没有有效的Red Hat订阅,执行yum install时通常会报“This system is not registered with an entitlement server”,然后拒绝安装。网上流传的方案是把repo指向CentOS源,但对Red Hat版本、架构都有严格要求,不是简单照抄就能成功。
如果你确实在Red Hat机器上配置了CentOS的yum源,最终能用了,也要注意:Red Hat和CentOS的RPM包虽然绝大多数兼容,但核心包(比如glibc、systemd、kernel)绝对不能混装,否则会破坏系统关键配置。我的建议是,Red Hat系统如果有条件就上正式订阅,或者直接用CentOS Stream/Rocky Linux/AlmaLinux这些与RHEL完全兼容的发行版,没必要非得在Red Hat上强行配第三方源,省事也更安全。
4.3 vim编辑文件时常见的模式操作问题
vim初学者最常问的两个问题,一个是“怎么退出”,一个是“为什么输入不了中文”。前者我们说过了,Esc到普通模式,:q!强制退出。后者更常见,你在vim里第一次按i进入插入模式,发现打出来的还是英文字母,中文输入法打不出字。
这其实不全是vim的问题。在终端环境里,输入法框架和终端模拟器、SSH会话之间需要协作。通常的解法有几种:
- 把你系统输入法切换到“临时英文”状态再进vim,需要中文时再用系统快捷键切换。这个方法最无脑,适合应急。
- 在vimrc里启用
set termencoding=utf-8和set encoding=utf-8,缓解一部分编码导致的显示异常。 - 如果用的是纯命令行终端(如xterm、GNOME Terminal),检查你的输入法是否为fcitx或ibus,并确认终端模拟器支持对应输入法的“光标跟随”模式。
我个人的做法是,在本地Windows上用WSL里跑vim,主机用微软拼音输入法,只要光标进入vim窗口,直接切中文输入,体验正常;但是在SSH到远程服务器时,中文输入偶尔会出幺蛾子,所以我写代码注释时习惯先用英文,最后统一替换成中文,避免打断思路。
4.4 yum与vim常见问题速查表
最后整理一份我自己使用过程中的问题速查表,适合贴在手边,遇到问题先对号入座:
| 问题现象 | 原因分析 | 解决方法 |
|---|---|---|
| yum install报“Could not resolve host” | 网络不通,或DNS配置有误 | ping通外网再试,检查/etc/resolv.conf |
| yum报“Cannot find a valid baseurl” | repo文件里的baseurl失效 | 检查源地址能否用浏览器访问,更换镜像源 |
| yum报“Package does not exist” | 软件包在源里找不到或源已过时 | yum search模糊搜索,或换EPEL源 |
| yum makecache速度极慢 | 源线路不佳 | 换国内镜像源,如阿里云、清华源 |
| yum install报“Protected multilib versions” | 32位与64位包版本冲突 | yum clean all,然后精确指定架构安装 |
| vim打开文件显示乱码 | 编码不一致 | vimrc里设置set fileencodings=utf-8,gbk |
| vim内容有修改但不让退出 | 文件只读或无写权限 | 用sudo重新打开,或w !sudo tee % |
| vim输入文字时方向键变成ABCD | 编辑器处于普通模式 | 按Esc,再按i进入插入模式 |
| vim按了Ctrl+S卡住 | 终端启用了XON/XOFF流控 | 按Ctrl+Q恢复 |
| vim删除行时只删了半行 | 光标不在行首 | dd在普通模式下默认删除整行,先按Esc |
这里特别说一下vim的Ctrl+S卡住问题。很多从Windows转过来的人第一次遇到,以为vim死机了,其实是你误触了终端的流控快捷键,终端暂停输出了。按Ctrl+Q就能恢复。如果想彻底禁用这个行为,可以在终端的配置里关掉XON/XOFF,或者在~/.bashrc里添加stty -ixon,一劳永逸。
4.5 我的yum/ambari实战补充
热词列表里出现了“ambari apache yum”,这说明不少人在搭大数据集群时都会遇到这个场景。Ambari是Apache旗下的一个集群管理工具,用来部署和管理Hadoop生态组件。它本身通过yum仓库来安装,安装过程中需要先配置Ambari的repo仓库。
实践中常见的问题就是Ambari的repo地址访问不通,导致yum安装失败。解决思路和其他源配置完全一致:找一个可达的镜像,或者把需要的RPM包全部下载到本地,做成本地yum源,再在准备部署Ambari的节点上统一配置。Ambari Server端安装时需要执行ambari-server setup,这一步会检查并安装一系列依赖包,比如postgresql、python等,如果yum源不可用,这一步就会卡住。提前把本地yum源配好,能省下一大半排障时间。
另外,Ambari默认的yum仓库URL在/etc/yum.repos.d/ambari.repo文件里,有时候安装高版本组件需要额外启用HDP仓库(Hortonworks Data Platform),做法还是老一套:添加repo文件、yum repolist确认、yum install安装。这套方法论一旦掌握了,不管你是配阿里云源、本地源还是Ambari源,底层逻辑都是通的:找到正确的仓库地址,确保元数据可读,然后让yum自动处理依赖。
写在最后的一点心得
把yum和vim称为“地阶法宝”,其实就是想说:这些老家伙虽然不像Kubernetes、容器化那么亮眼,也没有GitHub Copilot那种AI加持的噱头,但它们是你每天登录服务器真正靠得住的东西。我个人的体会是,花一个周末认真把yum源配置和vim基础命令过一遍,往后的每一次装环境、改配置,效率都是成倍的提升。特别是vim,我建议你逼自己用一个月,强迫自己不用鼠标、不靠方向键,把常用的操作练成肌肉记忆,过了那道坎你就再也看不上别的编辑器了。最后再分享一个小技巧:每次新装一台服务器,我会先配好yum源,然后装一遍vim-enhanced和bash-completion,这半小时的投资,换来的是后续每一次操作的顺畅体验。
