对已安装软件包的版本进行排序

对已安装软件包的版本进行排序

我正在尝试获取已安装内核包的最新版本。主要的困难在于,在我的情况下,版本可能以错误的顺序安装,因此我不能简单地使用--last中的参数rpm

我想使用包含参数的coreutilssort命令(coreutils-8.4-31.el6_5.1)” --version-sort,但它没有按预期返回:

$ rpm -q 'kernel' |sort --version-sort
kernel-2.6.32-431.5.1.el6.x86_64
kernel-2.6.32-431.11.2.el6.x86_64
kernel-2.6.32-431.17.1.el6.x86_64
kernel-2.6.32-431.el6.x86_64

rpm -q 'kernel' --last
kernel-2.6.32-431.17.1.el6.x86_64             mar. 13 mai 2014 09:48:44 CEST
kernel-2.6.32-431.11.2.el6.x86_64             jeu. 24 avril 2014 11:15:25 CEST
kernel-2.6.32-431.5.1.el6.x86_64              mer. 12 mars 2014 15:52:23 CET
kernel-2.6.32-431.el6.x86_64                  ven. 29 nov. 2013 17:48:19 CET

如您所见,修订版本 431.e16(最旧)被排序为最新。调用以rpm -qi确认:

Release     : 431.17.1.el6                  Build Date: jeu. 08 mai 2014 02:48:49 CEST
Release     : 431.el6                       Build Date: ven. 22 nov. 2013 05:28:33 CET

这是 的已知错误吗sort? 已经修补了吗? 有没有简单的解决方法或其他方法可以获取最新安装的版本?

答案1

您可以通过指定自定义查询格式来执行此操作。

# rpm -q --qf="%{BUILDTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" kernel

这将显示该包最初创建的时间(由 Red Hat 创建)作为 UNIX 时间戳,后跟包名称。

为了完成它,您只需要...

# rpm -q --qf="%{BUILDTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" kernel | \
  sort | tail -n 1 | cut -f 2 -d ' '

相关内容