TL; DR
Upaya ke-3 benar-benar berhasil! Saya meninggalkan 2 upaya pertama sehingga orang lain yang mungkin menemukan T&J ini di masa depan mudah-mudahan akan mendapatkan beberapa wawasan tentang bagaimana non-sepele masalah itu untuk mengurai informasi versi RPM dan menentukan garis keturunan yang datang pertama, kedua, dll.
Percobaan # 1 (OP mengatakan tidak bekerja)
Perintah ini akan mengurutkan output dan memberi Anda urutan versi:
$ 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
MENGAPA TIDAK BEKERJA: Seseorang yang naif akan berpikir bahwa Anda dapat menggunakan beberapa varian dari sort
perintah untuk melakukan tugas ini, tetapi ada cukup variabilitas dan ketidakkonsistenan dalam memformat informasi versi aktual untuk RPM tertentu yang hanya tidak dilakukan oleh RPM. t hingga tugas.
Percobaan # 2 (OP mengatakan tidak bekerja)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
MENGAPA TIDAK BEKERJA: Saya memiliki harapan besar bahwa pendekatan ini akan menghasilkan hasil yang dicari OP, tetapi masalah dengan yang ini seperti yang ditunjukkan oleh @ Joel dalam komentar, adalah bahwa --last
peralihan hanya mengembalikan hasil yang diurutkan berdasarkan tanggal RPM dipasang.
Percobaan # 3
Yang ini pasti akan melakukan pekerjaannya. Saya menemukan serangkaian alat yang disebut RPM Development Tools. Ada 2 alat di suite ini yang akan memberi Anda kemampuan untuk menentukan apakah satu versi RPM lebih baru atau lebih tua dari yang lain.
Jika RPM belum diinstal, Anda dapat melakukannya sebagai berikut:
yum install rpmdevtools
Alat pertama yang berguna disebut rpmdev-vercmp
. Alat ini dapat membandingkan 2 nama RPM dan memberi tahu Anda mana yang lebih baru. Sebagai contoh:
$ 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
Setelah menemukan ini, saya siap untuk membuat skrip shell tetapi kemudian menyadari, saya malas, jadi saya menusuk beberapa menit lagi dan menemukan alat lain di suite yang disebut rpmdev-sort
.
Alat ini berbayar. Anda dapat menggunakannya sebagai berikut:
$ 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
Ada banyak alat di Alat Pengembangan RPM yang mungkin layak untuk dicari orang lain jadi saya daftar mereka di sini untuk referensi di masa mendatang.
$ 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
Alternatif untuk # 3
Alternatif yang disebutkan OP dalam komentar adalah menggunakan sort -V
. Itu modal -V
. Aku juga belum pernah mendengar saklar ini. Dari sort
halaman manual:
-V, --version-sort
natural sort of (version) numbers within text
Ternyata sort
memang menyediakan fasilitas untuk mengurutkan nomor versi sehingga Anda juga bisa melakukan pengurutan seperti:
$ 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