Сортировать версию установленных пакетов

Я пытаюсь получить последнюю версию установленного пакета ядра. Основная трудность заключается в том, что в моем случае версии могут быть установлены в неправильном порядке, поэтому я не могу просто использовать --last аргумент от rpm,

Я хотел использовать 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 (самая старая) отсортирована как самая последняя. Вызов 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 ' '
Другие вопросы по тегам