Linux命令-rpm(RedHat 包管理器 —— RPM 体系的基石命令)

📅 2026/7/13 13:01:31 👤 编程新知 🏷️ 技术资讯
Linux命令-rpm(RedHat 包管理器 —— RPM 体系的基石命令) Linux命令-rpmRedHat 包管理器 —— RPM 体系的基石命令 简介安装位置与数据库 语法⚙️ 选项安装/升级选项卸载选项查询选项验证选项 示例示例 1安装 RPM 包基本操作示例 2升级软件包示例 3查询操作日常最频繁使用的功能示例 4查询文件来源和依赖关系示例 5卸载软件包示例 6验证已安装包示例 7实际运维场景⚠️ 注意rpm vs yum vs dnf 对比包名 vs 包文件名GPG 签名验证数据库修复 总结 相关命令快速参考rpmRed Hat Package Manager是 RedHat 系 Linux 发行版RHEL、CentOS、Fedora、Rocky Linux 等最底层的软件包管理工具。它直接操作.rpm格式的二进制包文件和已安装的包数据库提供安装、升级、卸载、查询、验证五大核心功能。作为底层工具rpm不会自动解决依赖关系——这一任务由上层工具yum旧版和dnf新版完成。 简介RPM 诞生于 1997 年经历了几十年的发展如今 RPM v4 已经成为 RedHat 生态的软件分发标准。rpm命令是操作 RPM 包和数据库的通用接口支持安装新的软件包.rpm文件升级已有软件包卸载软件包查询包信息和文件归属验证包的完整性和文件变更rpm直接操作/var/lib/rpm/下的 Berkeley DB或 SQLiteRHEL 9数据库。安装位置与数据库# rpm 命令本身whichrpm# 输出/usr/bin/rpm# RPM 数据库位置ls/var/lib/rpm/# 输出# Basenames Conflictname Dirnames Group# Installtid Name Obsoletename Packages# Providename Requirename Sha1header Sigmd5 Triggername 语法rpm [选项] [包文件/包名...]操作模式分为五大类模式选项特征说明安装/升级-i,-U,-F安装或升级 RPM 包卸载-e删除已安装的包查询-q查询包信息和数据库验证-V验证已安装包的文件完整性签名-K验证 GPG 签名⚙️ 选项安装/升级选项选项说明-i, --install安装新包-U, --upgrade推荐升级或安装如果未装则安装已装则升级-F, --freshen仅升级已安装的包未安装则跳过-v, --verbose显示详细信息-h, --hash显示进度条#号--force强制操作覆盖已有文件/包--nodeps危险忽略依赖关系检查--test模拟运行不实际安装--replacepkgs重新安装已安装的包--replacefiles覆盖属于其他包的文件--oldpackage允许降级安装比当前更旧的版本--prefix 目录安装到指定的重定位目录卸载选项选项说明-e, --erase卸载包--nodeps危险忽略依赖强制卸载--test模拟运行--allmatches删除所有匹配版本查询选项选项说明-q, --query查询模式-qa, --all列出所有已安装的包-qi显示包的详细信息-ql列出包安装的所有文件-qc列出包的配置文件-qd列出包的文档文件-qf 文件查询某个文件属于哪个包-qR查询包的依赖Requires-q --provides查询包提供的能力--whatrequires 能力查询哪个包依赖了指定能力-qp 包文件查询未安装的 .rpm 文件验证选项选项说明-V, --verify验证已安装的包-Va验证所有已安装的包-K, --checksig验证 RPM 包的 GPG 签名--import 密钥文件导入 GPG 公钥 示例示例 1安装 RPM 包基本操作# 标准安装显示进度和详细信息sudorpm-ivhnginx-1.20.1-10.el7.x86_64.rpm# 输出# Preparing... ################################# [100%]# Updating / installing...# 1:nginx-1:1.20.1-10.el7 ################################# [100%]# 模拟安装测试依赖不实际安装sudorpm-ivh--testpackage.rpm# 输出# Preparing... ################################# [100%]# 如果依赖不满足会报错# 从网络直接安装结合 curlcurl-Ohttps://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmsudorpm-ivhepel-release-latest-7.noarch.rpm示例 2升级软件包# -U 升级推荐无论是否已安装都能工作# 情况1之前没装过 nginx → 执行安装# 情况2之前已装 nginx 1.18 → 升级到 1.20# 情况3之前已装 nginx 1.20 → 重新安装sudorpm-Uvhnginx-1.20.1-10.el7.x86_64.rpm# 输出# Preparing... ################################# [100%]# Updating / installing...# 1:nginx-1:1.20.1-10.el7 ################################# [100%]# Cleaning up / removing...# 2:nginx-1:1.18.0-2.el7 ################################# [100%]# -F 仅升级如果未安装则跳过sudorpm-Fvhhttpd-2.4.6-97.el7.x86_64.rpm# 输出如果未安装# (no output) # 静默跳过# 输出如果已安装旧版本# Updating: httpd-2.4.6-97.el7# 降级安装比当前版本更旧sudorpm-Uvh--oldpackageold-package.rpm# 输出# Preparing... [100%]# Updating: old-package-1.0.0示例 3查询操作日常最频繁使用的功能# 查询所有已安装的包rpm-qa|wc-l# 输出1423rpm-qa|head-10# 输出# setup-2.8.71-11.el7.noarch# filesystem-3.2-25.el7.x86_64# basesystem-10.0-7.el7.noarch# ...# 按名称查询已安装的包rpm-qbash# 输出bash-4.2.46-35.el7_9.x86_64rpm-qpython32/dev/null# 输出python3-3.6.8-18.el7.x86_64# 查询包的详细信息rpm-qibash# 输出# Name : bash# Version : 4.2.46# Release : 35.el7_9# Architecture: x86_64# Install Date: Mon 14 Jun 2026 10:22:33 AM CST# Group : System Environment/Shells# Size : 3656833# License : GPLv3# Signature : RSA/SHA256, Wed 15 Apr 2026 08:00:00 AM CST# Source RPM : bash-4.2.46-35.el7_9.src.rpm# Build Date : Tue 14 Apr 2026 06:30:00 PM CST# Build Host : x86-01.bsys.centos.org# Relocations : (not relocatable)# Packager : CentOS BuildSystem http://bugs.centos.org# Vendor : CentOS# URL : http://www.gnu.org/software/bash# Summary : The GNU Bourne Again shell# Description :# The GNU Bourne Again shell (Bash) is a shell or command language# interpreter that is compatible with the Bourne shell (sh).# 列出包安装的所有文件rpm-qlbash|head-10# 输出# /bin/bash# /bin/sh# /etc/skel/.bash_logout# /etc/skel/.bash_profile# /etc/skel/.bashrc# /usr/bin/bash# /usr/bin/bashbug-64# /usr/share/doc/bash-4.2.46# /usr/share/doc/bash-4.2.46/COPYING# /usr/share/info/bash.info.gz# 只查看配置文件rpm-qcbash# 输出# /etc/skel/.bash_logout# /etc/skel/.bash_profile# /etc/skel/.bashrc# 查看文档文件rpm-qdbash|head-5# 输出# /usr/share/doc/bash-4.2.46/COPYING# /usr/share/info/bash.info.gz# /usr/share/man/man1/..1.gz# /usr/share/man/man1/bash.1.gz# /usr/share/man/man1/bashbug.1.gz示例 4查询文件来源和依赖关系# 查询某个文件属于哪个包反向查询rpm-qf/usr/bin/vim# 输出vim-enhanced-7.4.629-8.el7_9.x86_64rpm-qf/etc/ssh/sshd_config# 输出openssh-server-7.4p1-22.el7_9.x86_64rpm-qf/lib64/libc.so.6# 输出glibc-2.17-326.el7_9.x86_64# 查询包的依赖关系Requiresrpm-qRbash# 输出# /bin/sh# config(bash) 4.2.46-35.el7_9# libc.so.6()(64bit)# libc.so.6(GLIBC_2.11)(64bit)# libdl.so.2()(64bit)# libtinfo.so.5()(64bit)# rpmlib(FileDigests) 4.6.0-1# rpmlib(PayloadIsXz) 5.2-1# 查询包提供的能力rpm-q--providesbash# 输出# /bin/bash# /bin/sh# bash 4.2.46-35.el7_9# bash(x86-64) 4.2.46-35.el7_9# config(bash) 4.2.46-35.el7_9# 查询谁依赖了指定能力rpm-q--whatrequireslibcrypto.so.10()(64bit)# 输出# openssh-clients-7.4p1-22.el7_9.x86_64# openssh-server-7.4p1-22.el7_9.x86_64# wget-1.14-18.el7_6.1.x86_64# ... (多个包)示例 5卸载软件包# 安全卸载sudorpm-enano# 输出无错误 成功# 带依赖检查的卸载sudorpm-ehttpd# 输出有依赖时不成功# error: Failed dependencies:# httpd 2.2.0 is needed by (installed) gnome-user-share-0.31-4.el7.x86_64# 模拟查看依赖关系后卸载sudorpm-e--testhttpd# 输出同样的 Failed dependencies 信息# 查看依赖树决定是否同时卸载rpm-q--whatrequireshttpd# 输出# mod_ssl-2.4.6-97.el7.centos.x86_64# php-7.2.24-1.el7.x86_64# 逐步卸载sudorpm-emod_ssl phpsudorpm-ehttpd# 输出 (成功)示例 6验证已安装包# 验证单个包检查文件是否被修改rpm-Vbash# 无输出 所有文件完好# 输出示例有改动时# S.5....T. c /etc/bashrc# 标志含义# S 文件大小变化# . 模式未变# 5 MD5 校验和不匹配# . 设备号未变# . 用户未变# . 组未变# T 修改时间变化# c 这是配置文件# 验证所有已安装包耗时较长sudorpm-Va2/dev/null|head-10# 输出示例# ..?...... /usr/bin/passwd# S.5....T. c /etc/ssh/sshd_config# ..?...... /usr/sbin/useradd# 验证 RPM 包文件本身的签名安装前rpm-Kpackage.rpm# 输出# package.rpm: rsa sha1 (md5) pgp md5 OK示例 7实际运维场景# 场景1查找最近安装的包rpm-qa--last|head-10# 输出# kernel-3.10.0-1160.119.1.el7.x86_64 Sun 14 Jun 2026 03:12:45 AM CST# kernel-devel-3.10.0-1160.119.1.el7 Sun 14 Jun 2026 03:12:20 AM CST# docker-ce-20.10.24-3.el7.x86_64 Sat 13 Jun 2026 10:15:30 AM CST# ...# 场景2查询包的总安装大小rpm-qa--queryformat%{SIZE} %{NAME}\n|sort-rn|head-10# 输出# 311296000 kernel# 125829120 glibc-common# 83047232 kernel-devel# ...# 场景3统计每个供应商的包数量rpm-qa--queryformat%{VENDOR}\n|sort|uniq-c|sort-rn# 输出# 789 CentOS# 45 Fedora Project# 12 (none)# 3 EPEL# ...# 场景4导出已安装包列表用于系统迁移rpm-qa--queryformat%{NAME}\ninstalled-packages.txtwc-linstalled-packages.txt# 输出1423 installed-packages.txt⚠️ 注意rpm vs yum vs dnf 对比# rpm底层# 优点完全控制、离线安装、速度快# 缺点不自动处理依赖、需手动下载包sudorpm-ivhpackage.rpm# 输出依赖不满足时# error: Failed dependencies:# libfoo.so.1()(64bit) is needed by package-1.0.x86_64# 需要手动逐个下载安装依赖包# yumCentOS 7 及更早版本# 优点自动解决依赖、从仓库下载# 缺点速度较慢、需要网络sudoyuminstallpackage# 输出# Resolving Dependencies# -- Running transaction check# --- Package package.x86_64 0:1.0-1.el7 will be installed# -- Processing Dependency: libfoo.so.1()(64bit)# --- Package libfoo.x86_64 0:2.5-1.el7 will be installed# -- Finished Dependency Resolution# Dependencies Resolved# # Package Arch Version Repository Size# # Installing:# package x86_64 1.0-1.el7 epel 500k# Installing for dependencies:# libfoo x86_64 2.5-1.el7 base 200k# dnfCentOS 8/Fedora/RHEL 8# 优点yum 的现代替代更快更准确# 缺点与 yum 命令兼容但内部完全不同sudodnfinstallpackage# 输出格式与 yum 类似但底层性能更好包名 vs 包文件名# 包文件名包含完整版本信息用于安装未安装的包# 格式名称-版本-发行版.架构.rpm# 例nginx-1.20.1-10.el7.x86_64.rpm# 包名不含版本后缀用于查询/卸载已安装的包# 格式名称# 例nginx# 安装时用文件名sudorpm-ivhnginx-1.20.1-10.el7.x86_64.rpm# 正确# 查询/卸载时用包名rpm-qnginx# 正确sudorpm-enginx# 正确GPG 签名验证# 导入发行版官方 GPG 公钥sudorpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7# 或从网络导入CentOS 7sudorpm--importhttps://www.centos.org/keys/RPM-GPG-KEY-CentOS-7# EPEL 仓库公钥sudorpm--importhttps://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7# 查看已导入的所有密钥rpm-qagpg-pubkey*# 输出# gpg-pubkey-f4a80eb5-53a7ff4b# gpg-pubkey-352c64e5-52ae6884# 安装前验证 RPM 包签名rpm-K--nosignaturepackage.rpm# 输出package.rpm: sha1 md5 OK数据库修复# RPM 数据库损坏时常见于非正常关机sudorpm--rebuilddb# 输出可能需要几分钟# (无输出后台重建数据库)# 恢复备份sudocp/var/lib/rpm.bak/* /var/lib/rpm/sudorpm--rebuilddb# 检查数据库一致性sudorpm-qa/dev/null# 如果无错误输出 数据库正常 总结rpm是 RedHat 生态包管理的基石掌握它意味着能深度理解系统软件结构五大核心功能安装-i、升级-U/-F、卸载-e、查询-q、验证-V查询是日常最高频操作-qf找文件归属、-ql列文件列表、-qi查看信息、-qR看依赖依赖管理短板rpm不自动解决依赖 → 日常安装用yum/dnf仅在离线或特殊场景用rpm数据库位置/var/lib/rpm/--rebuilddb可修复损坏的数据库 相关命令命令说明yumCentOS 7 及更早的上层包管理器自动依赖dnf推荐CentOS 8/Fedora/RHEL 8 新一代包管理器rpmbuild构建 RPM 包rpm2cpio将 RPM 包转换为 cpio 归档rpmsignRPM 包签名工具rpmquery简化版 rpm 查询rpmverify简化版 rpm 验证rpmdbRPM 数据库管理