yum 是什么
yum 是 RHEL 7 与 CentOS 7 时代的默认包管理器,用仓库元数据解析依赖并完成安装、升级、卸载。RHEL 8 之后它的位置被 dnf 取代,新系统上 yum 只是指向 dnf 的软链接,因此子命令风格一脉相承,老教程里的命令基本可以直接用。运维中还会大量遇到 CentOS 7 机器,理解它的仓库配置、缓存机制与历史回滚,仍然有现实价值。
基本信息
| 适用平台 | RHEL 7、CentOS 7、Oracle Linux 7 及更早版本;RHEL 8+ 上 yum 是 dnf 的别名 |
|---|---|
| 命令语法 | yum [选项] 子命令 [包名...] |
| 常用子命令 | install、update、remove、info、list、search、provides、repolist、clean、makecache、groupinstall、history |
| 仓库配置 | 仓库定义在 /etc/yum.repos.d/*.repo;主配置 /etc/yum.conf;缓存在 /var/cache/yum;日志在 /var/log/yum.log |
| 权限要求 | 安装、升级、卸载需要 root 或 sudo;查询类子命令普通用户可用 |
典型使用场景
- 安装依赖:yum install -y nginx,一次解析完整依赖链
- 由文件反查包:yum provides */ifconfig 定位命令来自哪个包
- 清理过期缓存:报元数据错误时 yum clean all 后 makecache 重建
- 整组安装开发环境:groupinstall 'Development Tools' 一次装齐编译工具链
- 变更前预览:yum check-update 先看有哪些可用更新,再决定是否执行
- 回滚变更:yum history 查看事务编号,用 undo 撤销上一次操作
常用示例
常用示例
yum install -y nginx
yum info nginx
yum list available | head
yum search nginx
yum remove telnet
yum provides */ifconfig # 由文件反查包
yum check-update # 只看有哪些可升级
yum repolist -v # 查看启用的仓库
yum clean all && yum makecache # 修元数据错误
yum groupinstall -y 'Development Tools'
yum history; yum history undo last子命令与 dnf 对照
| 用途 | yum 写法 | dnf 写法 |
|---|---|---|
| 安装 | yum install 包名 | dnf install 包名 |
| 升级全部 | yum update | dnf update |
| 由文件反查 | yum provides 路径 | dnf provides 路径 |
| 组安装 | yum groupinstall '组名' | dnf group install '组名' |
| 回滚 | yum history undo 编号 | dnf history undo 编号 |
| 模块流 | 不支持 | dnf module |
CentOS 7 已于 2024 年 6 月停止维护,官方镜像仓库被移走,直接 yum install 会报 404 或 Cannot find a valid baseurl。继续使用的老机器需要把仓库地址改成归档源(vault.centos.org),或指向企业内部镜像,同时要清楚这些机器已不再获得安全补丁。
缓存与元数据:yum 把仓库元数据缓存在 /var/cache/yum 下,默认有效期内不会重新拉取。报元数据校验失败、仓库地址变更或同步了内网镜像后,标准动作是 yum clean all 再 yum makecache,强制重建本地缓存。
生产机上执行 yum update 前先 yum check-update 看清单,并确认是否包含 kernel、glibc、systemd 这类需要重启或影响运行时的组件。老系统上跨版本升级风险更高,建议锁定关键包版本(exclude 或 versionlock 插件)并安排在维护窗口执行。
版本锁定与排除:可以在 /etc/yum.conf 或仓库文件里写 exclude=包名* 排除指定包,也可以安装 yum-plugin-versionlock 插件后用 yum versionlock add 包名 冻结版本。老系统上这两招常用于避免内核或运行时被意外升级,是维持「只打安全补丁」策略的常用手段。换成内网镜像源时仍要保留 gpgcheck,否则包的完整性与来源无法校验。
查询与追溯:yum list installed 列出已安装的包,rpm -qa 更直接;每次 yum 事务都会写入 /var/log/yum.log 并记录在 history 里,审计或复盘时先执行 yum history list 找到编号,再用 yum history info 编号 看这次事务具体动了哪些包,确认影响面后再决定是否回滚。
yum history undo 能回滚的前提是仓库里仍能取到旧版本包,若已被撤下就会失败。另外跨大版本升级(例如从 7 升到 8)不能靠 yum 完成,必须使用发行版提供的迁移工具或重装,把老机器留在一个不再获得安全更新的版本上属于长期风险。
变更前先看清单再动手,安装与升级分开执行,便于定位是哪一步带来了变化;临时测试仓库只在需要时显式启用,用完立刻关掉,避免默认的仓库集合被悄悄放大。新版本系统上包管理已统一到新一代工具,子命令对应但模块流、按模块启用等机制不同,照搬旧教程容易碰壁。