TL; DR
A terceira tentativa realmente funciona! Estou deixando as duas primeiras tentativas para que outras pessoas que se deparem com essas perguntas e respostas no futuro esperem ter uma ideia de como é um problema não trivial analisar as informações da versão do RPM e determinar a linhagem que veio primeiro, segundo, etc.
Tentativa 1 (OP disse que não funcionou)
Este comando classificará a saída e fornecerá a você em ordem de versão:
$ 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 QUE NÃO FUNCIONOU: Uma pessoa ingênua pensaria que você pode usar alguma variante do sort
comando para executar esta tarefa, mas há variabilidade e inconsistência suficientes na formatação das informações reais da versão para um determinado RPM que simplesmente não são '' até a tarefa.
Tentativa 2 (OP disse que não funcionou)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
POR QUE NÃO FUNCIONOU: Eu tinha grandes esperanças de que essa abordagem produzisse os resultados que o OP estava procurando, mas o problema com esse como o @Joel apontou nos comentários, é que a --last
opção está apenas retornando os resultados classificados por a data em que os RPMs foram instalados.
Tentativa nº 3
Este definitivamente fará o trabalho. Encontrei um conjunto de ferramentas chamado RPM Development Tools. Existem duas ferramentas neste conjunto que permitem determinar se uma versão de um RPM é mais recente ou mais antiga que outra.
Se o RPM ainda não estiver instalado, faça o seguinte:
yum install rpmdevtools
A primeira ferramenta útil é chamada rpmdev-vercmp
. Essa ferramenta pode comparar dois nomes de RPMs e dizer qual é o mais novo. Por exemplo:
$ 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
Depois de descobrir isso, estava pronto para montar um script de shell, mas depois percebi, cara, sou preguiçoso, então cutuquei mais alguns minutos e encontrei outra ferramenta na suíte chamada rpmdev-sort
.
Esta ferramenta é uma sujeira. Você pode usá-lo da seguinte maneira:
$ 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
Existem muitas ferramentas nas Ferramentas de Desenvolvimento RPM que podem valer a pena procurar outras pessoas, por isso estou listando-as aqui para referência 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
Uma alternativa ao # 3
Uma alternativa que o OP mencionado nos comentários é usar sort -V
. Isso é uma capital -V
. Eu nunca tinha ouvido falar dessa mudança também. Na sort
página do manual:
-V, --version-sort
natural sort of (version) numbers within text
Acontece que sort
ele fornece um recurso para classificar os números de versão para que você também possa executar a classificação da seguinte forma:
$ 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