CentOS/AlmaLinux/OracleLinux/RockLinux 软件包管理
一、核心基础认知
- 系统共性:四者均为RHEL(Red Hat Enterprise Linux)衍生发行版,兼容性极高,软件包管理机制基本一致,核心依赖 RPM(Red Hat Package Manager) 包管理系统,默认使用 YUM(Yellowdog Updater Modified)
- 软件包格式:默认使用.rpm格式包,包含软件二进制文件、配置文件、依赖信息等,文件名通常遵循“名称-版本-发布版本.架构.rpm”规则(例:nginx-1.24.0-1.el9.x86_64.rpm)。
- 仓库(Repository):软件包通过官方或第三方仓库提供,系统默认配置官方基础仓库、更新仓库,可手动添加epel仓库(Extra Packages for Enterprise Linux,提供额外开源软件包)等第三方仓库。
二、核心管理工具(YUM/DNF)
2.1 YUM与DNF的区别与兼容
- YUM:CentOS 7及更早版本默认工具,基于Python 2开发,存在依赖解析效率低、内存占用大等问题;CentOS 8+/Alma/Oracle Linux 8+ 仍保留yum命令(实际为dnf的软链接),兼容原有yum语法。

- DNF:CentOS 8+/Alma/Oracle Linux 8+ 默认核心工具,基于Python 3开发,优化了依赖解析逻辑,速度更快、内存占用更低,支持更多新特性(如模块化管理)。
- 总之,yum和dnf命令可混用(除部分新特性外),日常使用可以理解为
yum=dnf。
2.2 常用命令(通用,yum/dnf替换使用即可)
| 操作场景 | 核心命令 | 说明 |
|---|---|---|
| 更新仓库缓存 | yum clean all && yum makecache | 清理过期缓存,重新生成仓库包索引,建议添加新仓库后执行 |
| 安装软件包 | yum install 软件名 [-y] 或 dnf install 软件名 [-y] | -y参数自动确认安装,无需手动输入y;可指定版本(例:yum install nginx-1.24.0) |
| 卸载软件包 | yum remove 软件名 [-y] 或 dnf remove 软件名 [-y] | 默认会卸载该软件及依赖它的其他软件,谨慎操作;如需保留依赖,可加--noautoremove |
| 更新软件包 | yum update 软件名 [-y](单个包)yum update [-y](所有包,含系统)dnf同理 | 更新系统所有包时建议先备份重要数据,避免兼容性问题 |
| 查询已安装包 | yum list installed [软件名] rpm -qa [软件名]dnf同理 | rpm -qa 可搭配grep过滤 例:rpm -qa |
| 查询可安装包 | yum list available [软件名] dnf list available [软件名] | 查看仓库中可安装的软件包及版本 |
| 查询包信息 | yum info 软件名 dnf info 软件名 rpm -qi 软件名 | 查看软件包版本、描述、安装路径、依赖等详细信息 |
| 查询文件所属包 | yum provides 绝对路径dnf provides 绝对路径rpm -qf 绝对路径 | 例:yum provides /usr/sbin/nginx(查询nginx启动文件所属包) |
| 查看包依赖关系 | yum deplist 软件名dnf deplist 软件名rpm -qR 软件名(已安装包) | deplist可查看所有依赖(包括未安装的),rpm -qR仅查看已安装包的依赖 |
| 安装本地rpm包 | yum localinstall 本地包路径.rpm [-y]dnf localinstall 本地包路径.rpm [-y]rpm -ivh 本地包路径.rpm | yum/dnf会自动解决本地包的依赖(需仓库支持),rpm不会自动解决依赖,需手动安装依赖包 |
2.3 仓库管理(关键配置)
提示
yum repolist all查看所有已配置仓库列表,包括启用/禁用状态。
仓库配置文件路径:/etc/yum.repos.d/,所有.repo后缀文件均为仓库配置文件,系统默认包含基础仓库(如BaseOS、AppStream)
常用仓库添加:
- EPEL仓库(最常用第三方仓库):
yum install epel-release -y安装后会在/etc/yum.repos.d/生成epel.repo和epel-modular.repo配置文件。
- EPEL仓库(最常用第三方仓库):
创建个人自定义仓库:
- 安装createrepo工具
yum install createrepo -y - 将需要提供的rpm包放入一个目录(如/opt/myrepo),执行
createrepo /opt/myrepo,即可在该目录生成索引文件(repodata),repodata里面包含了所有rpm包的依赖关系元数据。 - 在/etc/yum.repos.d/目录下新建.repo文件。repo文件内容示例:
shell[自定义仓库名] name=自定义仓库名 baseurl=文件系统路径/opt/myrepo/ enabled=1 # 1表示启用,0表示禁用 gpgcheck=0 # 0表示不校验GPG签名,1表示校验,就是一个安全检查。- 最后执行
yum clean all && yum makecache更新缓存,用yum repolist all查看是否添加成功。
- 安装createrepo工具
- 若后续新增 RPM 包,只需增量更新(不用重新生成)
createrepo --update .快一些对于本身rpm包多的仓库
快速整理RPM包到文件夹myrepo
- 执行
yum clean packages清理之前记录缓存中的RPM包 - 打开rpm包安装记录,在/etc/yum.conf文件里添加
keepcache=1 - 正常安装rpm包,如
yum install nginx,安装完成后,rpm包记录在/var/cache/dnf/来自不同下载仓库名/packages/*.rpm包 - 执行
find /var/cache/dnf/ -name "*.rpm" -exec cp -n {} /opt/myrepo/ \;,将刚才记录安装rpm包复制到/opt/myrepo/目录下。
更换国内YUM/DNF镜像源
- 编辑/etc/yum.repos.d/目录下的.repo文件,将baseurl替换为新的镜像源URL(如阿里云提供镜像源)。
- 执行
yum clean all && yum makecache更新缓存。
- 也可直接下载阿里云提供的.repo文件,替换系统默认仓库配置文件。
三、RPM命令进阶(底层操作)
什么是RPM?
- 其实前面的YUM/DNF安装查询,都是在操作RPM包。
- 由于RPM包之间存在很多依赖关系,当你用
rpm命令安装单一个RPM包时,极大可能你需要首先安装其他的RPM包,但其他的RPM包也可能依赖另一个的RPM包,这样就会形成一个依赖链,他本身不会自己解决依赖问题,需要手动提前安装所有依赖包。YUM/DNF工具就是用来解决这个依赖问题的。
| 命令用途 | 具体命令 |
|---|---|
| 强制安装本地rpm包(忽略依赖和冲突,慎用) | rpm -ivh 本地包.rpm --force --nodeps |
| 强制卸载某个包 (忽略依赖+强制卸载) | rpm -e 包 --nodeps --force |
| 升级本地rpm包(未安装则自动安装,已安装则升级版本) | rpm -Uvh 本地包.rpm |
| 查询已安装包的文件列表 | rpm -ql 软件名(例:rpm -ql nginx,查看nginx所有安装文件路径) |
| 验证已安装包的完整性(检查文件是否被修改、缺失) | rpm -V 软件名(无输出则正常,有输出则表示文件异常) |
| 提取rpm包中的文件(不安装包) | rpm2cpio 本地包.rpm | cpio -idv(会在当前目录生成包内文件结构) |
四、常见问题与排查
| 问题类型 | 现象 | 解决方法 |
|---|---|---|
| 依赖冲突问题 | 安装/更新软件时提示“依赖关系错误”“文件冲突” | 1. 优先使用yum/dnf自动解决,避免手动rpm安装; 2. 若冲突源于第三方仓库,临时禁用该仓库(--disablerepo); 3. 必要时使用yum remove 冲突包(谨慎,避免卸载核心包),或rpm -e 冲突包 --nodeps(强制卸载,慎用)。 |
| 本地rpm包安装依赖缺失 | rpm -ivh安装本地包时提示“缺少依赖XXX” | 1. 改用yum localinstall 本地包.rpm(自动从仓库拉取依赖); 2. 手动查询依赖包并安装(yum search 依赖名,找到后安装)。 |
| 软件包安装后无法启动 | 软件安装成功,但systemctl start 软件名提示“启动失败” | 1. 查看日志(journalctl -u 软件名)定位错误; 2. 检查软件配置文件(通常在/etc/软件名/目录)是否正确; 3. 确认软件包是否完整(rpm -V 软件名)。 |