rpm 命令 #
rpm
(RPM Package Manager)是 Red Hat、Fedora、CentOS 等 Linux 发行版的底层包管理工具,用于安装、验证、查询、更新和移除软件包。它是 YUM 和 DNF 等高级包管理工具的基础,但不像它们那样能自动处理依赖关系。
语法 #
rpm [选项] [包...]
常用选项 #
一般选项 #
选项 | 描述 |
---|---|
-v |
显示详细信息 |
-h, --hash |
显示进度条(哈希标记) |
--quiet |
安静模式,最小输出 |
--test |
不实际执行,只测试并报告 |
--root 目录 |
使用指定目录作为根目录 |
--dbpath 目录 |
使用指定目录作为 RPM 数据库路径 |
--nosignature |
不验证包签名 |
--nodigest |
不验证包摘要 |
安装、升级和刷新选项 #
选项 | 描述 |
---|---|
-i, --install |
安装包 |
-U, --upgrade |
升级包(如果不存在则安装) |
-F, --freshen |
升级包(仅当已安装旧版本时) |
--reinstall |
重新安装包 |
--nodeps |
不检查依赖关系 |
--force |
强制安装,忽略文件冲突和 RPM 版本冲突 |
--oldpackage |
允许降级包 |
--replacefiles |
替换来自其他包的文件 |
--replacepkgs |
替换已安装的包 |
--excludedocs |
不安装文档文件 |
--includedocs |
安装文档文件 |
--noscripts |
不执行安装脚本 |
--notriggers |
不执行触发器脚本 |
--ignoresize |
忽略文件系统空间检查 |
卸载选项 #
选项 | 描述 |
---|---|
-e, --erase |
移除包 |
--allmatches |
移除所有匹配的包(可能有多个版本) |
--noscripts |
不执行卸载脚本 |
--notriggers |
不执行触发器脚本 |
--nodeps |
不检查依赖关系 |
查询选项 #
选项 | 描述 |
---|---|
-q, --query |
查询模式 |
-a, --all |
查询所有已安装的包 |
-f, --file 文件 |
查询拥有指定文件的包 |
-p, --package |
查询包文件而不是已安装的包 |
-i, --info |
显示包信息 |
-l, --list |
列出包中的文件 |
-d, --docfiles |
列出文档文件 |
-c, --configfiles |
列出配置文件 |
--scripts |
列出安装脚本 |
--provides |
列出包提供的功能 |
--requires |
列出包的依赖 |
--changelog |
显示包的变更日志 |
--dump |
显示文件信息(大小、修改时间等) |
--queryformat 格式 |
使用自定义格式显示查询结果 |
验证选项 #
选项 | 描述 |
---|---|
-V, --verify |
验证包 |
--nofiles |
不验证文件属性 |
--nodigest |
不验证包摘要 |
--nosignature |
不验证包签名 |
--nodeps |
不验证依赖关系 |
--noscripts |
不执行验证脚本 |
签名选项 #
选项 | 描述 |
---|---|
--import |
导入公钥 |
--checksig |
检查包签名 |
--resign |
重新签名包 |
--addsign |
添加签名到包 |
常见用法 #
1. 安装包 #
rpm -ivh package.rpm
-i
表示安装,-v
表示详细输出,-h
表示显示进度条。
2. 升级包 #
rpm -Uvh package.rpm
如果包未安装,则会安装它。
3. 刷新包 #
rpm -Fvh package.rpm
只有当已安装旧版本时才会升级。
4. 移除包 #
rpm -e package_name
注意:使用包名而不是文件名。
5. 查询已安装的所有包 #
rpm -qa
6. 查询特定包是否已安装 #
rpm -q package_name
7. 查询包信息 #
rpm -qi package_name
8. 查询包文件 #
rpm -ql package_name
9. 查询包配置文件 #
rpm -qc package_name
10. 查询包文档文件 #
rpm -qd package_name
11. 查询包依赖 #
rpm -qR package_name
12. 查询包提供的功能 #
rpm -q --provides package_name
13. 查询拥有特定文件的包 #
rpm -qf /path/to/file
14. 查询未安装包的信息 #
rpm -qip package.rpm
15. 查询未安装包的文件列表 #
rpm -qlp package.rpm
16. 验证包 #
rpm -V package_name
17. 验证所有已安装的包 #
rpm -Va
18. 导入 RPM GPG 密钥 #
rpm --import /path/to/key.asc
或者:
rpm --import https://example.com/key.asc
19. 检查包签名 #
rpm --checksig package.rpm
高级用法 #
1. 不检查依赖关系安装包 #
rpm -ivh --nodeps package.rpm
这将强制安装包,即使它有未满足的依赖关系(不推荐)。
2. 强制安装包 #
rpm -ivh --force package.rpm
这将覆盖冲突的文件。
3. 降级包 #
rpm -Uvh --oldpackage package.rpm
这将安装旧版本的包,替换较新的版本。
4. 重新安装包 #
rpm -ivh --replacepkgs package.rpm
5. 不执行安装脚本 #
rpm -ivh --noscripts package.rpm
6. 使用自定义查询格式 #
rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} %{INSTALLTIME:date}\n"
这将显示包名、版本、发布版本和安装日期。
7. 提取 RPM 包内容而不安装 #
rpm2cpio package.rpm | cpio -idmv
这将提取包内容到当前目录。
8. 在不同根目录下安装 #
rpm -ivh --root=/mnt/sysimage package.rpm
这对于修复另一个系统很有用。
9. 查询包的变更日志 #
rpm -q --changelog package_name
10. 查询包的安装脚本 #
rpm -q --scripts package_name
11. 验证文件的完整性 #
rpm -Vf /path/to/file
12. 重建 RPM 数据库 #
rpm --rebuilddb
这将重建损坏的 RPM 数据库。
13. 验证包组 #
rpm -Vg "System Environment/Base"
14. 查询包的安装日期 #
rpm -q --qf "%{INSTALLTIME:date}\n" package_name
15. 查询包的大小 #
rpm -q --qf "%{SIZE}\n" package_name
验证输出解释 #
当使用rpm -V
验证包时,输出格式为:
SM5DLUGT c filename
每个字母代表一种检查,如果检查失败,则显示相应的字母;如果检查通过,则显示.
:
S
:文件大小不匹配M
:文件权限或类型不匹配5
:MD5 校验和不匹配D
:设备不匹配L
:符号链接不匹配U
:用户所有权不匹配G
:组所有权不匹配T
:修改时间不匹配c
:这是一个配置文件
包命名约定 #
RPM 包通常遵循以下命名约定:
name-version-release.architecture.rpm
例如:
httpd-2.4.6-97.el7.centos.x86_64.rpm
httpd
:包名2.4.6
:版本号97.el7.centos
:发布版本x86_64
:架构.rpm
:文件扩展名
配置文件 #
rpm 的主要配置文件和目录:
/var/lib/rpm/
:RPM 数据库目录/etc/rpm/
:RPM 配置目录/usr/lib/rpm/
:RPM 宏和脚本目录/etc/rpm/macros
:系统级 RPM 宏~/.rpmmacros
:用户级 RPM 宏
与 YUM/DNF 的关系 #
rpm
是底层包管理工具,而yum
和dnf
是构建在rpm
之上的高级工具:
rpm
不自动解决依赖关系,而 YUM/DNF 会rpm
只处理本地 RPM 文件,而 YUM/DNF 可以从仓库下载rpm
提供更底层的控制,而 YUM/DNF 提供更方便的用户界面- 通常建议使用 YUM/DNF,除非需要
rpm
的特定功能
提示 #
- 使用
yum
或dnf
而不是rpm
来安装包,以自动处理依赖关系 - 使用
rpm -qa | grep pattern
可以搜索已安装的包 - 使用
rpm -qf $(which command)
可以找出提供特定命令的包 - 在修复损坏的系统时,
rpm --rebuilddb
是一个重要的命令 - 使用
rpm -qp --scripts package.rpm
可以在安装前检查包的脚本 - 在安装新的 RPM 文件前,先用
rpm -qpR
检查其依赖关系 - 使用
rpm -qa --last
可以查看最近安装的包 - 使用
rpm -V
定期验证关键系统包的完整性 - 使用
rpm2cpio
和cpio
可以从 RPM 包中提取单个文件而不安装整个包 - 在生产环境中,避免使用
--nodeps
和--force
选项,除非你完全了解后果