RPM(Red Hat Package Manager)是 Red Hat、CentOS、Fedora、Rocky Linux、openSUSE 等发行版使用的底层软件包格式。它的软件包文件通常以 .rpm 为后缀。虽然现代系统更常通过 yum 或 dnf 这类高层工具来管理软件包(因为它们能自动处理依赖关系),但掌握底层的 rpm 命令依然是必要的:当你需要安装一个单独的离线 .rpm 文件、确认某个文件属于哪个软件包,或是排查依赖问题时,rpm 是最直接、最快的工具。
1. 安装软件包
常用的安装命令是 rpm -ivh,这三个选项分别代表:install(安装)、verbose(显示详细进度)、hash(用 # 号显示进度条)。基本用法:
rpm -ivh package-name.rpm
如果系统中已经安装了该包的旧版本,或者你想升级一个包,应使用 -U(upgrade)选项。它会先卸载旧版本再安装新版;如果旧版本不存在,则直接安装:
rpm -Uvh package-name.rpm
还有一个更谨慎的升级选项 -F(freshen),它只在包已经安装的情况下才升级,不会安装全新包:
rpm -Fvh package-name.rpm
实用技巧与注意事项:
- 安装或升级时如果遇到依赖缺失,
rpm会直接报错,告诉你缺少哪些.so库或软件包。此时你有两个选择:手动逐一下载所需的 RPM 并一起安装(将所有包名写在同一个命令行里),或者改用dnf install *.rpm让系统自动解决依赖——后者在多数情况下更省力。 - 如果你确实需要强制安装(无视依赖或文件冲突),可以使用
--nodeps或--force,但这通常是不推荐的,只在修复坏掉的系统时作为最后手段。
2. 查询软件包
rpm 的查询功能非常丰富,所有查询都基于选项 -q。它既可以查询已安装的包,也可以查询未安装的 .rpm 文件(加上 -p)。
查询是否已安装某包:
rpm -q package-name
它会直接输出包的全名和版本(如 openssl-1.1.1k-7.el8.x86_64),如果未安装则提示“未安装软件包”。
列出所有已安装的包:
rpm -qa
这个命令在检查系统装了哪些软件、对比两台机器的差异时经常用到。通常会结合 grep 过滤,比如 rpm -qa | grep httpd。
查看软件包的详细信息(版本、描述、架构、安装时间等):
rpm -qi package-name
列出软件包安装的所有文件:
rpm -ql package-name
这对了解某个包到底提供了哪些二进制文件、配置文件、文档很有用。例如 rpm -ql openssh-server 会列出 /usr/sbin/sshd、/etc/ssh/sshd_config 等路径。
反向查找:某个文件属于哪个包:
rpm -qf /etc/ssh/sshd_config
这是极其常用的排错命令。当你发现系统里某个文件被你误删了,或者怀疑某个二进制被篡改,就可以先用这个命令找出它属于哪个包,然后决定是否重新安装该包来恢复原始文件。
查询未安装的 .rpm 文件的信息:
rpm -qip package.rpm # 查看信息
rpm -qlp package.rpm # 查看文件列表
快速验证包的完整性:
rpm -V package-name
-V 会校验安装的文件是否被修改过。它对比文件的尺寸、MD5 校验和、权限等与数据库中记录的是否一致。如果输出为空,表示一切完好;如果出现“S.5....T. /etc/ntp.conf”这样的行,就说明该文件的大小、校验和、修改时间发生了变化,这对安全审计尤其重要。
3. 卸载软件包
卸载使用 -e(erase)选项:
rpm -e package-name
注意,卸载只需包名,而不需要完整的版本号或 .rpm 后缀,通常可以使用 rpm -q package-name 确认精确名称。
处理依赖问题: 如果其他已安装的包依赖你要卸载的包,rpm -e 会中断并列出依赖它的包。此时如果确认要强制卸载,可以加 --nodeps,但可能导致依赖它的软件无法正常工作。更稳妥的做法是先移除依赖方,或者保持该包。
卸载后残留的配置文件: 默认情况下,rpm -e 不会删除标记为“配置文件”的文件(如 /etc 下的配置),除非你明确使用了 --nosave。如果你希望彻底清除包括配置文件在内的所有痕迹,可以考虑重装前备份然后手动删除,或使用 yum remove / dnf remove,后者通常能更干净地处理配置文件的去留。
小结
rpm 是 RPM 系发行版的底层构建块。坚持掌握它的基础安装、查询和卸载命令,能在没有网络、无法使用高级包管理器的维护模式或救援环境中发挥不可替代的作用。日常工作中,你可以更多地让 dnf 或 yum 来处理复杂的依赖关系,但 rpm -qf、rpm -ql 和 rpm -V 这些快速查询与验证命令,值得进入每个系统管理员的肌肉记忆。