TL; DR
La 3ème tentative fonctionne réellement! Je laisse les 2 premières tentatives afin que d'autres qui pourraient rencontrer ce Q & A à l'avenir puissent, espérons-le, avoir un aperçu de la façon dont un problème n'est pas trivial d'analyser les informations de version de RPM et de déterminer la lignée qui vient en premier, en second, etc.
Tentative n ° 1 (OP a dit que cela ne fonctionnait pas)
Cette commande triera la sortie et vous la donnera dans l'ordre des versions:
$ rpm -q kernel --queryformat "%{VERSION} %{RELEASE}\n"|sort -n
2.6.18 238.12.1.el5
2.6.18 238.19.1.el5
2.6.18 274.12.1.el5
2.6.18 308.8.2.el5
POURQUOI CELA N'A PAS FONCTIONNÉ: Une personne naïve penserait que vous pouvez utiliser une variante de la sort
commande pour effectuer cette tâche, mais il y a suffisamment de variabilité et d'incohérence dans le formatage des informations de version réelles pour un RPM donné, ce n'est tout simplement pas '' t à la hauteur de la tâche.
Tentative n ° 2 (OP a dit que cela ne fonctionnait pas)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
POURQUOI IL N'A PAS FONCTIONNÉ: J'espérais fortement que cette approche produirait les résultats que le PO recherchait, mais le problème avec celui-ci, comme @Joel l'a souligné dans les commentaires, est que le --last
commutateur renvoie simplement les résultats triés par la date d'installation des RPM.
Tentative # 3
Celui-ci fera certainement le travail. J'ai trouvé une suite d'outils appelés RPM Development Tools. Cette suite comprend 2 outils qui vous permettront de déterminer si une version d'un RPM est plus récente ou plus ancienne qu'une autre.
Si le RPM n'est pas déjà installé, vous pouvez le faire comme suit:
yum install rpmdevtools
Le premier outil utile est appelé rpmdev-vercmp
. Cet outil peut comparer 2 noms de RPM et vous dire lequel est le plus récent. Par exemple:
$ rpmdev-vercmp kernel-2.6.35.14-100.fc14.x86_64 kernel-2.6.35.14-103.fc14.x86_64
0:kernel-2.6.35.14-103.fc14.x86_64 is newer
Après avoir trouvé cela, j'étais prêt à assembler un script shell, mais j'ai réalisé que je suis paresseux, alors j'ai fouillé quelques minutes de plus et j'ai trouvé un autre outil dans la suite appelé rpmdev-sort
.
Cet outil est de la saleté. Vous pouvez l'utiliser comme suit:
$ rpm -q kernel | rpmdev-sort
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64
Il y a beaucoup d'outils dans les outils de développement RPM qui pourraient valoir le coup d'œil pour d'autres, donc je les répertorie ici pour référence future.
$ rpm -q --queryformat '[%{NAME} %{FILEMODES:perms} %{FILENAMES}\n]' rpmdevtools \
| grep -E "^.* -..x..x..x " \
| awk '{print $3}' \
| sed 's#/usr/bin/##' \
| paste - - - \
| column -t
annotate-output checkbashisms licensecheck
manpage-alert rpmargs rpmdev-bumpspec
rpmdev-checksig rpmdev-cksum rpmdev-diff
rpmdev-extract rpmdev-md5 rpmdev-newinit
rpmdev-newspec rpmdev-packager rpmdev-rmdevelrpms
rpmdev-setuptree rpmdev-sha1 rpmdev-sha224
rpmdev-sha256 rpmdev-sha384 rpmdev-sha512
rpmdev-sort rpmdev-sum rpmdev-vercmp
rpmdev-wipetree rpmelfsym rpmfile
rpminfo rpmls rpmpeek
rpmsodiff rpmsoname spectool
Une alternative au # 3
Une alternative que le PO mentionnée dans les commentaires est d'utiliser sort -V
. Voilà une capitale -V
. Je n'avais jamais entendu parler de cet interrupteur non plus. Depuis la sort
page de manuel:
-V, --version-sort
natural sort of (version) numbers within text
En fait, il sort
fournit une fonction pour trier les numéros de version afin que vous puissiez également effectuer le tri comme suit:
$ rpm -q kernel | sort -V
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64