最可靠查已安装rpm包的方法是rpm -qa,它直接查询rpm数据库,不依赖网络、环境稳定、无遗漏;而yum list installed可能漏掉手动安装或系统初始包。

直接用 rpm -qa 最可靠,它查的是 RPM 数据库本身,不依赖网络、不挑环境、不漏包。
为什么不用 yum list installed?
它只显示由 yum 安装(且未被手动破坏元数据)的包,而绕过 yum 直接用 rpm -ivh 装的、或系统初始安装时带进来的包,可能不会出现在结果里。比如你用 rpm -ivh nginx-1.20.1-1.el7.x86_64.rpm 手动装的,yum list installed 可能不认——但 rpm -qa 一定认。
另外:yum 在最小化安装或仓库配置异常时可能报错退出,而 rpm 命令始终可用。
rpm -qa 输出太多,怎么快速找包?
别硬翻,加管道过滤:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
-
rpm -qa | grep nginx—— 查含nginx的包名(注意大小写) -
rpm -qa | grep '^httpd$'—— 精确匹配包名(^开头、$结尾) -
rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | head -10—— 自定义输出格式,更清晰 -
rpm -qa | sort | less—— 排序后分页查看,适合人工审计
查某个包是否装了,别用 rpm -qa | grep 冗余查
直接用 rpm -q 更准更快:
-
rpm -q httpd—— 如果已安装,输出httpd-2.4.6-99.el7.centos.x86_64;没装则返回非零状态码并打印package httpd is not installed -
rpm -q nginx && echo "存在" || echo "不存在"—— 脚本里判断推荐写法 -
rpm -q python3-pip比rpm -qa | grep python3-pip少走弯路,也不怕匹配到python3-pip-tools这类干扰项
想看包装在哪、有哪些文件?用 rpm -ql
rpm -ql 必须接完整包名(不是模糊名),否则报错:
-
rpm -q httpd先确认包名(输出可能是httpd-2.4.6-99.el7.centos.x86_64) - 再执行
rpm -ql httpd—— 注意这里用的是短名httpd,RPM 会自动解析为已安装实例 - 如果输出为空,说明该包确实没装,或你输错了名(比如输成
apache) - 不要用
rpm -ql 'httpd*',通配符在rpm -ql中无效,得先rpm -qa | grep httpd找出全名再查
真正容易被忽略的是:rpm -qa 查的是数据库快照,不是实时文件系统状态;如果有人手动删了 /usr/bin/nginx 却没卸载包,rpm -qa 仍会显示它已安装——这时得配合 rpm -V 校验完整性。










