最可靠方式是启用 yum-plugin-versionlock 插件,它通过锁定 nevra 精确控制包版本;需先安装插件,再用 yum versionlock add 锁定指定包,支持查看、模拟验证及临时解锁。

在 CentOS/RHEL 7 等使用 yum 的系统中,防止 yum update 升级特定软件包,最可靠的方式是启用并配置 yum-plugin-versionlock 插件。它能精确锁定已安装包的完整 NEVRA(Name-Epoch-Version-Release-Arch),比简单 exclude 更严谨、更可控。
安装并启用 versionlock 插件
该插件默认不安装,需手动部署:
- 运行
sudo yum install yum-plugin-versionlock - 插件启用后自动生效,无需额外配置;规则默认写入
/etc/yum/pluginconf.d/versionlock.list
锁定当前已安装的软件包版本
这是生产环境最常用的操作,命令会自动读取当前安装的完整版本信息:
- 锁定 nginx:
sudo yum versionlock add nginx - 锁定全部内核:
sudo yum versionlock add kernel* - 锁定 docker-ce 及其 CLI:
sudo yum versionlock add docker-ce docker-ce-cli
验证和日常维护
锁定后必须检查是否真正生效,避免配置遗漏:
- 查看所有锁:
yum versionlock list - 模拟升级确认拦截:
yum update --assumeno | grep -i "exclud\|nginx"(应显示被排除) - 检查实际版本是否不变:
rpm -q nginx升级前后对比 - 临时解锁单个包:
sudo yum versionlock delete nginx - 清空全部锁(慎用):
sudo yum versionlock clear
补充:临时或全局排除(适用简单场景)
若只需快速跳过某类包(如内核),可改用 --exclude 或 /etc/yum.conf 中的 exclude 参数:
- 单次排除:
yum update --exclude=kernel* - 永久排除(影响所有 yum 操作):在
/etc/yum.conf的[main]段添加exclude=kernel* centos-release*
注意:exclude 是粗粒度过滤,不校验版本,也不阻止依赖引发的间接升级;versionlock 才是面向生产环境的推荐方案。











