TL; DR
¡El tercer intento realmente funciona! Dejo los primeros 2 intentos para que otros que puedan encontrarse con estas preguntas y respuestas en el futuro tengan alguna idea de cuán no trivial es el problema de analizar la información de la versión RPM y determinar el linaje de los cuales vino primero, segundo, etc.
Intento n. ° 1 (OP dijo que no funcionó)
Este comando ordenará la salida y le dará orden de versión:
$ 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
POR QUÉ NO FUNCIONÓ: una persona ingenua pensaría que puede usar alguna variante del sort
comando para realizar esta tarea, pero hay suficiente variabilidad e inconsistencia en el formato de la información de la versión real para un RPM dado que simplemente no es t a la altura de la tarea.
Intento n. ° 2 (OP dijo que no funcionó)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
POR QUÉ NO FUNCIONÓ: tenía grandes esperanzas de que este enfoque arrojaría los resultados que el OP estaba buscando, pero el problema con este, como señaló @Joel en los comentarios, es que el --last
cambio solo está devolviendo los resultados ordenados por la fecha en que se instalaron los RPM.
Intento n. ° 3
Este definitivamente hará el trabajo. Encontré un conjunto de herramientas llamadas Herramientas de desarrollo RPM. Hay 2 herramientas en esta suite que le permitirán determinar si una versión de un RPM es más nueva o más antigua que otra.
Si el RPM no está instalado, puede hacerlo de la siguiente manera:
yum install rpmdevtools
La primera herramienta que es útil se llama rpmdev-vercmp
. Esta herramienta puede comparar 2 nombres de RPM y decirle cuál es más nuevo. Por ejemplo:
$ 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
Después de encontrar esto, estaba listo para armar un script de shell, pero luego me di cuenta, hombre, soy flojo, así que busqué unos minutos más y encontré otra herramienta en la suite llamada rpmdev-sort
.
Esta herramienta es de pago. Puede usarlo de la siguiente manera:
$ 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
Hay muchas herramientas en las Herramientas de desarrollo de RPM que podrían valer la pena para otras, así que las enumero aquí para referencia futura.
$ 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
Una alternativa al # 3
Una alternativa que el OP mencionado en los comentarios es usar sort -V
. Eso es una capital -V
. Nunca había oído hablar de este cambio tampoco. Desde la sort
página del manual:
-V, --version-sort
natural sort of (version) numbers within text
Como resultado sort
, proporciona una función para ordenar los números de versión para que también pueda realizar la clasificación de la siguiente manera:
$ 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