"Red-Hat Package Manager" 的缩写,是一个用于管理RPM格式软件包的命令行工具,主要应用于Red Hat系Linux发行版(如RHEL、CentOS、Fedora、openSUSE等),支持软件包的安装、卸载、查询、验证、升级等全生命周期管理。
RPM包是预编译的二进制软件包,包含可执行文件、配置文件、依赖信息及安装/卸载脚本,rpm命令通过解析这些信息实现对软件的高效管理。
rpm [选项] <操作> <软件包名/软件包文件>常用选项与操作组合
1. 安装软件包(-i 或 --install)
-i <package.rpm>:安装指定的RPM包,例如sudo rpm -i nginx-1.24.0-1.el9.x86_64.rpm安装Nginx软件包。-v:"verbose",显示安装过程的详细信息,例如sudo rpm -iv mysql.rpm输出安装步骤日志。-h:"hash",以#号显示安装进度,例如sudo rpm -ivh php.rpm直观展示安装进度条。--force:强制安装,覆盖已安装的同名软件或忽略版本冲突,例如sudo rpm -ivh --force httpd.rpm强制更新Apache。--nodeps:忽略依赖检查(不推荐,可能导致软件无法运行),例如sudo rpm -ivh --nodeps tool.rpm跳过缺失的依赖库安装。
2. 卸载软件包(-e 或 --erase)
-e <package-name>:卸载指定软件(需使用软件名而非包文件名),例如sudo rpm -e firefox卸载Firefox浏览器。-v:显示卸载过程的详细信息,例如sudo rpm -ev postfix输出卸载日志。--nodeps:忽略依赖关系强制卸载(可能导致依赖该软件的程序失效),例如sudo rpm -e --nodeps libssl强制卸载SSL库(谨慎使用)。
3. 升级软件包(-U 或 -F)
-U <package.rpm>:"upgrade",升级软件包(若未安装则自动安装),例如sudo rpm -Uvh kernel.rpm升级内核(若未安装则全新安装)。-F <package.rpm>:"freshen",仅升级已安装的软件包(未安装则不操作),例如sudo rpm -Fvh *.rpm批量升级当前目录下已安装的软件包。
4. 查询软件包信息(-q 或 --query)
-q <package-name>:查询指定软件是否已安装,例如rpm -q python3检查Python3是否安装。-qa:"query all",列出系统中所有已安装的RPM包,例如rpm -qa | grep java筛选已安装的Java相关包。-qi <package-name>:查询已安装软件的详细信息(版本、开发者、描述等),例如rpm -qi gcc查看GCC编译器的详细说明。-ql <package-name>:列出已安装软件的所有文件路径,例如rpm -ql sshd查看SSH服务的配置文件、二进制文件位置。-qf <file-path>:查询指定文件由哪个RPM包安装,例如rpm -qf /bin/ls查看ls命令所属的软件包(通常是coreutils)。-qp <package.rpm>:查询未安装的RPM包信息,例如rpm -qp --info nginx.rpm查看未安装的Nginx包的版本和描述。-qc <package-name>:仅列出已安装软件的配置文件,例如rpm -qc mysql-server快速定位MySQL的配置文件路径。
5. 验证软件包(-V 或 --verify)
-V <package-name>:验证已安装软件的文件是否被修改(对比原始包的校验信息),例如rpm -V openssh检查SSH相关文件是否被篡改。验证结果中,每个字符代表一类异常(如
S=文件大小变化,M=权限变化,5=MD5校验和变化,L=符号链接变化),无输出表示文件正常。
6. 导入签名密钥(--import)
--import <key-file>:导入RPM包的GPG签名公钥,用于验证包的合法性,例如sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-9导入CentOS 9的签名密钥。
参考示例
示例1:安装RPM包并显示进度 执行
sudo rpm -ivh redis-7.0.12-1.el9.x86_64.rpm,安装Redis并显示详细过程和进度条(-v显示日志,-h显示#进度),适合手动安装单个软件。示例2:升级已安装的软件 执行
sudo rpm -Uvh nodejs-20.5.0-1.el9.x86_64.rpm,若系统中已有旧版本Node.js则升级,未安装则直接安装,适合版本更新场景。示例3:查询软件安装的所有文件 执行
rpm -ql nginx,列出Nginx安装的所有文件,包括二进制文件(/usr/sbin/nginx)、配置文件(/etc/nginx/nginx.conf)、日志目录(/var/log/nginx/)等,便于配置或排查问题。示例4:验证系统关键文件是否被篡改 执行
rpm -V passwd,检查passwd命令相关文件的完整性。若输出S.5....T. /usr/bin/passwd,表示文件大小(S)、MD5校验和(5)、修改时间(T)被修改,可能存在安全风险。示例5:查找命令所属的软件包 执行
rpm -qf /usr/bin/ping,输出iputils-20210722-2.el9.x86_64,确定ping命令来自iputils包,便于安装或修复该命令。示例6:批量查询已安装的开发库 执行
rpm -qa | grep -i "devel",筛选出所有包含"devel"的已安装包(通常为开发库,如openssl-devel、glibc-devel),适合开发环境依赖检查。示例7:卸载软件并确认依赖 执行
sudo rpm -e httpd,卸载Apache服务前,rpm会检查依赖并提示是否有其他软件依赖它(如httpd-tools),避免误删导致依赖软件失效。示例8:安装本地包并自动解决依赖(推荐方式) 执行
sudo dnf localinstall ./mysql.rpm(或yum),通过dnf/yum调用rpm安装本地包,并自动下载缺失的依赖,比直接使用rpm -i更可靠。
注意:
rpm命令不自动解决依赖关系,直接安装可能因缺少依赖失败,推荐使用dnf或yum(RPM的前端工具),它们会自动处理依赖。升级内核时需谨慎,使用
rpm -U可能导致系统无法启动,建议通过系统包管理器(如dnf update kernel)操作。验证功能(
-V)常用于系统安全审计,可检测关键文件(如/etc/passwd、/bin/bash)是否被恶意修改。