我正在尝试获取已安装的内核包的最新版本。 主要的困难是,在我的情况下,版本可能会安装在一个错误的顺序,所以我不能简单地使用rpm的--last参数。
我想使用coreutils的sort命令(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(最早的)按最新sorting。 调用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
这是一个已知的错误? 它已经被修补了吗? 有一个简单的解决方法或其他方式来获取最新的安装版本?
您可以通过指定自定义查询格式来执行此操作。
# rpm -q --qf="%{BUILDTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" kernel
这将显示软件包最初(通过Red Hat)创build的时间作为UNIX时间戳,后面是软件包名称。
要完成它,所有你需要的是…
# rpm -q --qf="%{BUILDTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" kernel | \ sort | tail -n 1 | cut -f 2 -d ' '