TL; DR
Il terzo tentativo funziona davvero! Lascio i primi 2 tentativi in modo che altri che potrebbero imbattersi in queste domande e risposte in futuro possano sperare di avere una visione di quanto sia un problema non banale analizzare le informazioni sulla versione di RPM e determinare il lignaggio che è venuto prima, secondo, eccetera.
Tentativo n. 1 (OP ha dichiarato di non funzionare)
Questo comando ordina l'output e li fornisce nell'ordine di versione:
$ 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
PERCHÉ NON FUNZIONA: una persona ingenua potrebbe pensare che è possibile utilizzare alcune varianti del sort
comando per eseguire questa attività, ma c'è abbastanza variabilità e incoerenza nella formattazione delle informazioni sulla versione effettiva per un determinato RPM che non è semplicemente t fino al compito.
Tentativo n. 2 (OP ha dichiarato di non funzionare)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
PERCHÉ NON FUNZIONA: Avevo grandi speranze che questo approccio avrebbe prodotto i risultati che l'OP stava cercando, ma il problema con questo, come sottolineato da @Joel nei commenti, è che l' --last
interruttore sta semplicemente restituendo i risultati ordinati per la data di installazione degli RPM.
Tentativo n. 3
Questo sicuramente farà il lavoro. Ho trovato una suite di strumenti chiamati RPM Development Tools. Ci sono 2 strumenti in questa suite che ti daranno la possibilità di determinare se una versione di un RPM è più recente o più vecchia di un'altra.
Se l'RPM non è già installato, puoi farlo come segue:
yum install rpmdevtools
Viene chiamato il primo strumento utile rpmdev-vercmp
. Questo strumento può confrontare 2 nomi di RPM e dirti quale è più recente. Per esempio:
$ 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
Dopo averlo trovato, ero pronto a mettere insieme uno script di shell, ma poi ho capito, amico, sono pigro, quindi ho frugato ancora qualche minuto e ho trovato un altro strumento nella suite chiamato rpmdev-sort
.
Questo strumento è sporco. Puoi usarlo come segue:
$ 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
Ci sono molti strumenti in Strumenti di sviluppo RPM che potrebbero valere la pena di cercarli, quindi li elenco qui per riferimento futuro.
$ 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
Un'alternativa al n. 3
Un'alternativa che il PO menzionato nei commenti è di usare sort -V
. Questa è una capitale -V
. Nemmeno io avevo mai sentito parlare di questo interruttore. Dalla sort
pagina man:
-V, --version-sort
natural sort of (version) numbers within text
A quanto pare sort
fornisce una funzione per ordinare i numeri di versione in modo da poter eseguire anche l'ordinamento in questo modo:
$ 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