TL; DR
3. deneme gerçekten işe yarıyor! İlk 2 denemeden ayrılıyorum, böylece gelecekte bu soru-cevapla karşılaşabilecek diğerleri umarım RPM sürüm bilgilerini ayrıştırmanın ve birinci, ikinci gelen soyunu belirlemenin ne kadar önemsiz bir sorun olduğu konusunda fikir sahibi olacaklar, vb.
Deneme # 1 (OP dedi ki işe yaramadı)
Bu komut, çıktıyı sıralar ve size sürüm sırasıyla verir:
$ 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
NEDEN ÇALIŞMIYOR: Saf bir kişi, sort
bu görevi gerçekleştirmek için komutun bazı varyantlarını kullanabileceğinizi düşünür , ancak belirli bir RPM için gerçek sürüm bilgilerinin biçimlendirilmesinde yeterli değişkenlik ve tutarsızlık vardır. t göreve kadar.
Deneme # 2 (OP dedi ki işe yaramadı)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
NEDEN ÇALIŞMIYOR: Bu yaklaşımın OP'nin aradığı sonuçları vermesini umuyordum, ancak @Joel'in yorumlarda işaret ettiği gibi bu konu, --last
anahtarın yalnızca sonuçları sıralamasına döndürüyor olması. RPM'lerin kurulduğu tarih.
Deneme # 3
Bu kesinlikle işi yapacak. RPM Geliştirme Araçları adlı bir araç seti buldum. Bu pakette, bir RPM'nin bir sürümünün diğerinden daha yeni veya daha eski olup olmadığını belirleme olanağı sağlayacak 2 araç vardır.
RPM zaten yüklü değilse, aşağıdakileri yapabilirsiniz:
yum install rpmdevtools
Yararlı ilk araca denir rpmdev-vercmp
. Bu araç, 2 RPM adını karşılaştırabilir ve hangisinin daha yeni olduğunu söyleyebilir. Örneğin:
$ 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
Bunu bulduktan sonra bir kabuk senaryosu bir araya getirmek için hazırlandım ama sonra tembel olduğumu fark ettim, bu yüzden birkaç dakika daha dürttüm ve denilen süitte başka bir araç buldum rpmdev-sort
.
Bu araç ücretlidir. Aşağıdaki gibi kullanabilirsiniz:
$ 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
RPM Geliştirme Araçları'nda başkaları için bir göz atmaya değer olabilecek birçok araç var, bu yüzden gelecekteki referans için burada listeliyorum.
$ 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
# 3'e bir alternatif
Yorumlarda bahsedilen OP'nin bir alternatifi kullanmaktır sort -V
. Bu bir başkent -V
. Bu anahtarı da hiç duymamıştım. Gönderen sort
adam sayfası:
-V, --version-sort
natural sort of (version) numbers within text
Anlaşıldığı gibi, sort
sürüm numaralarını sıralamak için bir olanak sağlar, böylece sıralamayı şu şekilde de yapabilirsiniz:
$ 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