TL; DR
Der 3. Versuch funktioniert tatsächlich! Ich lasse die ersten beiden Versuche, damit andere, die in Zukunft auf diese Fragen und Antworten stoßen, hoffentlich einen Einblick in das nicht triviale Problem erhalten, RPM-Versionsinformationen zu analysieren und die Herkunft zu bestimmen, die zuerst, zweitens, usw.
Versuch Nr. 1 (OP sagte, hat nicht funktioniert)
Dieser Befehl sortiert die Ausgabe und gibt sie in der Versionsreihenfolge aus:
$ 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
WARUM ES NICHT FUNKTIONIERTE: Eine naive Person würde denken, dass Sie eine Variante des sort
Befehls verwenden können, um diese Aufgabe auszuführen, aber die Formatierung der tatsächlichen Versionsinformationen für eine bestimmte Drehzahl ist so variabel und inkonsistent, dass es einfach nicht so ist. t bis zur Aufgabe.
Versuch Nr. 2 (OP sagte, hat nicht funktioniert)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
WARUM ES NICHT FUNKTIONIERTE: Ich hatte große Hoffnungen, dass dieser Ansatz die Ergebnisse liefern würde, nach denen das OP gesucht hatte, aber das Problem bei diesem Ansatz, wie @Joel in den Kommentaren hervorhob, ist, dass der --last
Schalter lediglich die Ergebnisse sortiert nach zurückgibt das Datum, an dem die RPMs installiert wurden.
Versuch Nr. 3
Dieser wird definitiv den Job machen. Ich habe eine Reihe von Tools namens RPM Development Tools gefunden. Diese Suite enthält zwei Tools, mit denen Sie feststellen können, ob eine Version eines RPM neuer oder älter als eine andere ist.
Wenn das RPM noch nicht installiert ist, können Sie dies wie folgt tun:
yum install rpmdevtools
Das erste nützliche Tool heißt rpmdev-vercmp
. Dieses Tool kann 2 Namen von RPMs vergleichen und Ihnen sagen, welcher neuer ist. Zum Beispiel:
$ 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
Nachdem ich das gefunden hatte, war ich bereit, ein Shell-Skript zusammenzustellen, aber dann wurde mir klar, Mann, ich bin faul, also stocherte ich noch ein paar Minuten und fand ein anderes Tool in der Suite namens rpmdev-sort
.
Dieses Tool ist Pay-Dirt. Sie können es wie folgt verwenden:
$ 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
Es gibt viele Tools in RPM-Entwicklungstools, die für andere einen Blick wert sein könnten, daher liste ich sie hier als zukünftige Referenz auf.
$ 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
Eine Alternative zu # 3
Eine Alternative, die das OP in den Kommentaren erwähnt, ist die Verwendung sort -V
. Das ist eine Hauptstadt -V
. Ich hatte auch noch nie von diesem Schalter gehört. Von der sort
Manpage:
-V, --version-sort
natural sort of (version) numbers within text
Wie sich herausstellt, sort
bietet es eine Möglichkeit, Versionsnummern zu sortieren, sodass Sie die Sortierung auch folgendermaßen durchführen können:
$ 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