200字
rpm
2025-10-10
2025-10-10

"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-develglibc-devel),适合开发环境依赖检查。

  • 示例7:卸载软件并确认依赖 执行 sudo rpm -e httpd,卸载Apache服务前,rpm会检查依赖并提示是否有其他软件依赖它(如httpd-tools),避免误删导致依赖软件失效。

  • 示例8:安装本地包并自动解决依赖(推荐方式) 执行 sudo dnf localinstall ./mysql.rpm(或yum),通过dnf/yum调用rpm安装本地包,并自动下载缺失的依赖,比直接使用rpm -i更可靠。

注意

  1. rpm命令不自动解决依赖关系,直接安装可能因缺少依赖失败,推荐使用dnfyum(RPM的前端工具),它们会自动处理依赖。

  2. 升级内核时需谨慎,使用rpm -U可能导致系统无法启动,建议通过系统包管理器(如dnf update kernel)操作。

  3. 验证功能(-V)常用于系统安全审计,可检测关键文件(如/etc/passwd/bin/bash)是否被恶意修改。

评论