RHEL7与RHEL9统一RPM包查询方法及版本对比问题
RHEL7与RHEL9统一RPM包查询方法及版本对比问题
这个问题其实是不同RHEL版本自带的rpm工具行为差异导致的,我来给你拆解下原因和统一的解决方案:
问题根源
RHEL7搭载的是较旧的rpm版本(通常是4.11.x系列),它不支持直接用带.rpm后缀的完整包文件名查询已安装包;而RHEL9的rpm版本(4.16+)做了优化,会自动忽略.rpm后缀并匹配已安装包的名称,所以才会出现两边行为不一致的情况。
统一查询方法
不管是RHEL7还是RHEL9,最可靠的方式是使用包的基础名称(去掉.rpm后缀)来查询,比如:
rpm -q Package_linux_v12_2_5_1
这个命令会直接匹配rpm数据库里记录的已安装包名称,两边都能正常返回结果。
如果需要从本地rpm包文件动态获取包名来查询,可以先提取包名再执行查询,完全跨版本通用:
# 从rpm包文件中提取包名 PACKAGE_NAME=$(rpm -qp --queryformat '%{NAME}\n' Package_linux_v12_2_5_1.rpm) # 查询已安装的包版本 rpm -q "$PACKAGE_NAME"
版本对比实现
要对比已安装版本和待安装版本,可以通过rpm --queryformat提取版本号,再用专门的工具或逻辑判断:
- 提取已安装版本和待安装版本:
# 获取已安装包的版本(如果未安装则返回空) INSTALLED_VERSION=$(rpm -q --queryformat '%{VERSION}-%{RELEASE}\n' "$PACKAGE_NAME" 2>/dev/null) # 获取待安装包的版本 NEW_VERSION=$(rpm -qp --queryformat '%{VERSION}-%{RELEASE}\n' Package_linux_v12_2_5_1.rpm)
- 使用
rpmdev-vercmp工具对比版本(需要先安装rpmdevtools包):
rpmdev-vercmp "$INSTALLED_VERSION" "$NEW_VERSION"
- 返回值
0:版本相同 - 返回值
1:待安装版本更高 - 返回值
-1:已安装版本更高
针对你编辑的问题解答
如果RHEL7上的包是通过旧版本rpm安装后升级的,上述方法依然有效。因为不管是初始安装还是后续升级,rpm数据库中记录的包名称都是一致的,用包名查询会直接返回当前系统中已安装的最新版本,和安装/升级的方式无关。
备注:内容来源于stack exchange,提问作者N. J
相关产品推荐
相关产品推荐

