如何识别已安装的低版本RPM?对比/tmp/list_of_rpms目录下的RPM包
简便实现RPM版本对比的方法
要找出/tmp/list_of_rpms目录中版本高于系统已安装的RPM包,不用复杂正则处理,有两种直接可行的方法:
方法一:用rpmdev-vercmp工具批量对比
先安装rpmdevtools包(内置的rpmdev-vercmp专门处理RPM版本号对比,能规避手动写正则踩的格式坑),然后执行以下脚本:
for rpm_file in /tmp/list_of_rpms/*.rpm; do # 提取包名 pkg=$(rpm -qp --queryformat '%{NAME}' "$rpm_file") # 获取已安装版本(未安装则返回空) installed_ver=$(rpm -q --queryformat '%{VERSION}-%{RELEASE}' "$pkg" 2>/dev/null) if [ -n "$installed_ver" ]; then pkg_ver=$(rpm -qp --queryformat '%{VERSION}-%{RELEASE}' "$rpm_file") # 对比版本:已安装版本低于包内版本时输出提示 if rpmdev-vercmp "$installed_ver" "$pkg_ver" -lt 0; then echo "需更新:$pkg | 已安装:$installed_ver | 可用:$pkg_ver" fi else echo "$pkg:未安装" fi done
方法二:用dnf直接检查更新(适用于RHEL/CentOS 8+)
如果系统使用dnf包管理器,直接用check-update命令就能批量检测本地包与已安装版本的差异:
dnf check-update --assumeno /tmp/list_of_rpms/*.rpm | grep -v 'No match for argument'
该命令会自动筛选出已安装版本低于本地包的条目,--assumeno仅做模拟检查,不会触发实际安装操作。
内容的提问来源于stack exchange,提问作者jessica
相关产品推荐
相关产品推荐

