Linux升级软件:CentOS yum与rpm双用法
服务器跑着跑着就提示“xxx 已过期”,想给 CentOS 升个级,却被 yum 和 rpm 两条命令绕晕?别急着复制粘贴,先把思路捋顺:yum 负责“自动跑腿”,rpm 负责“手工点单”,俩家伙搭配干活,才能把系统补丁、软件新版稳稳当当装进机器。下面直接上操作,顺带把常见坑一次填平。

一、先分清:yum 与 rpm 各自管啥
rpm 是底层包管理器,手里攥着 .rpm 文件就能装、能卸、能查,但它不解决依赖;yum 是高层前端,先读仓库元数据,把依赖关系算清楚,再调用 rpm 干活。一句话:rpm 是“单点工具”,yum 是“整条流水线”。升级场景里,想省事用 yum,想精准用 rpm。
二、yum 升级三板斧
1. 刷新缓存
yum clean all && yum makecache
老旧缓存常把新版本“藏”起来,清掉再拉最新元数据,避免装到过期包。

2. 查看可升级列表
yum list updates
输出里每行都带版本号,瞄一眼就能确认是不是自己关心的软件。
3. 批量升级
yum update -y
-y 自动答 yes,脚本里跑也不卡壳。只想升指定包,把名称补后面:yum update nginx -y

踩坑提示:若系统启用了多个仓库,版本号打架时 yum 会挑“最新”但不一定是“最稳”,用 yum update pkg-name --enablerepo=repo-name 锁定来源更保险。
三、rpm 升级三步走
1. 下载 rpm 包
去官方镜像站或项目归档里抓对应架构的 .rpm,别下错 i686/x86_64/aarch64。
2. 本地升级
rpm -Uvh pkg.rpm
-U 代表 upgrade,若包不存在就全新安装;加 v 看进度,h 打进度条。
3. 检查回滚
rpm -q --changelog pkg-name
改不动或业务异常,用 rpm -Uvh --oldpackage old.rpm 秒回旧版。
依赖报错是 rpm 最头痛环节,缺啥手动补啥,循环依赖就交给 yum 去解。
四、双用法混合实战:内核升级示例
线上机器需要新版内核,但仓库里还没同步,决定“rpm 兜底,yum 收尾”。
步骤:
官网拉取 kernel-5.x.x.rpm 及配套 kernel-modules。
rpm -Uvh kernel*.rpm 本地装完,不重启。
yum update kmod-* dracut 把关联驱动、引导工具同步到最新。
grub2-set-default 0 设新内核为默认,重启验证。
如此既吃到新内核,又保证 initramfs、驱动链完整,回滚也只需 grub 切回旧条目。
五、常见疑问快答
Q:yum update 报冲突怎么办?
A:加 --skip-broken 先跳过,再 yum list extras 找孤立包,手动卸掉重装。
Q:rpm 升级后脚本没生效?
A:%post 脚本执行失败常因环境变量缺失,加 --force 强制重装并观察 /var/log/messages 报错。
Q:能不让 yum 升特定包吗?
A:编辑 /etc/yum.conf,加一行 exclude=nginx*,或 yum versionlock add nginx。
六、脚本模板:一键安全升级
#!/bin/bash
set -e
LOG=/var/log/auto_update.log
echo "start $(date)" >> $LOG
yum clean all >> $LOG 2>&1
yum update -y >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "update ok" | tee -a $LOG
else
echo "update fail, check $LOG" | mail -s "update error" admin@foo.bar
fi
丢到 crontab 每周日执行,日志和邮件双保险,生产环境也能睡安稳。
七、收尾检查
升级完别急着关终端,跑一圈:
rpm -Va | grep -E '^..5' // 校验文件被改动
yum history list last // 看最后一次事务 ID,出问题时 yum history undo ID 秒回退
needs-restarting -r // 若返回 yes,说明内核或 glibc 级更新,需安排重启窗口
把上面流程吃透,yum 与 rpm 就不再是两条陌生命令,而是左手右手一起护住服务器稳定的搭档。记住:先验证、再升级、留回滚,线上操作永远多一手准备。
