如何获取旧包的名称?

如何获取旧包的名称?

我有一台 RHEL,在其中一台服务器上我安装了两个不同版本的相同 RPM 软件包。

[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64

我想知道是否可以只接收旧的包名称?基本上我想完成这样的事情:

[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package

我该怎么做?

答案1

我不太确定您如何设法安装同一软件包的两个版本,但这应该可以完成这项工作:

rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
  sort -V | \
  awk 'NR==1 { print $2 }'

第一行在 RPM 数据库中查询 my-package-name,要求 RPM 以特定格式提供结果——VERSION 后跟默认的“rpm -qa”字段。它通过管道传送到sort -Vto(尝试)对版本号进行排序,然后通过管道传送到awk仅打印第一行,剥离附加的 VERSION 字段,从而产生rpm -qa默认输出。

这使得您可以安全地假设您正在具有-V排序标志的 RHEL 系统上运行它。

答案2

我总是对依赖于解释版本字符串的程序感到偏执,因此作为杰夫解决方案的替代方案,您也可以这样做:

[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64

(替换kernel您的包名称)

rpm -qa本质上,通过执行相同的命令并在--queryformat每行前面加上安装时的 Unix 时间戳(位于标签中)来打印完整的包名称%{INSTALLTIME}。然后,它用于sort -n对输出从最旧到最新进行排序,并仅获取输出的第一行并打印最后一列,这将是完整的包名称。

不过,杰夫的作品还不错。这可能更多是个人喜好的问题。

答案3

您可以使用 yum 降级软件包名称。有时新的软件包会出现错误。我确实降级到旧包。

相关内容