TL; DR
A terceira tentativa realmente funciona! Estou deixando as duas primeiras tentativas para que outros que possam se deparar com este Q & A no futuro, esperançosamente, tenham 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 nº 1 (OP disse que não funcionou)
Esse comando classificará a saída e fornecerá a você na 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 TRABALHOU: Uma pessoa ingênua pensaria que você pode usar uma variante do comando sort
para executar essa tarefa, mas há variabilidade e inconsistência suficientes na formatação de as informações da versão atual de um determinado RPM que simplesmente não está à altura da tarefa.
Tentativa nº 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 TRABALHO: Eu tinha grandes esperanças de que essa abordagem renderia os resultados que o OP estava procurando, mas a questão com este como @Joel apontado nos comentários, é que a opção --last
está meramente retornando os resultados classificados pela data em que os RPMs foram instalados.
Tentativa nº 3
Este definitivamente fará o trabalho. Eu encontrei um conjunto de ferramentas chamado RPM Development Tools. Existem 2 ferramentas neste conjunto que lhe darão a capacidade de determinar se uma versão de um RPM é mais nova ou mais antiga que outra.
Se o RPM ainda não estiver instalado, você pode fazer o seguinte:
yum install rpmdevtools
A primeira ferramenta útil é chamada rpmdev-vercmp
. Esta ferramenta pode comparar 2 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 encontrar isso, eu estava pronto para montar um shell script, mas depois percebi, cara, eu sou preguiçoso, então eu coloquei mais alguns minutos e encontrei outra ferramenta na suíte chamada rpmdev-sort
.
Esta ferramenta é sujeira de pagamento. 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 de 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 para o # 3
Uma alternativa que o OP mencionado nos comentários é usar sort -V
. Esse é um capital -V
. Eu nunca tinha ouvido falar desse interruptor também. Na página sort
man:
-V, --version-sort
natural sort of (version) numbers within text
Acontece que sort
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