TL; DR
3回目の試行は実際に機能します。私は最初の2つの試みを残します。将来このQ&Aに遭遇する可能性のある他の人が、RPMバージョン情報を解析して最初に来た系統を特定することがいかに重要でない問題であるかの洞察を得られることを期待しています。等
試行#1(OPは機能しなかったと述べた)
このコマンドは、出力を並べ替え、バージョン順に表示します。
$ 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
機能しない理由:世間知らずの人は、sort
コマンドの一部のバリアントを使用してこのタスクを実行できると考えていますが、特定のRPMの実際のバージョン情報のフォーマットには十分なばらつきがあり、一貫性がありません。タスクまで。
試行#2(OPは機能しなかったと述べた)
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
うまくいかなかった理由:このアプローチでOPが探している結果が得られることを期待していましたが、@ Joelがコメントで指摘したように、この方法の問題は、--last
スイッチが単にソートされた結果を返すことですRPMがインストールされた日付。
試行#3
これは間違いなく仕事をします。RPM開発ツールと呼ばれる一連のツールを見つけました。このスイートには2つのツールがあり、RPMのあるバージョンが別のバージョンよりも新しいか古いかを判別することができます。
RPMがまだインストールされていない場合は、次のようにしてインストールできます。
yum install rpmdevtools
便利な最初のツールはと呼ばれrpmdev-vercmp
ます。このツールは、RPMの2つの名前を比較して、どちらが新しいかを通知します。例えば:
$ 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
これを見つけた後、私はすべてシェルスクリプトを組み立てる準備が整いましたが、気がついたので私は怠惰rpmdev-sort
でした。そのため、さらに数分つついて、スイートと呼ばれる別のツールを見つけました。
このツールは汚れています。次のように使用できます。
$ 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開発ツールには他のツールを検討する価値のあるツールがたくさんあるので、今後の参考のためにここにリストします。
$ 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の代替
コメントで言及されているOPの代替手段はを使用することsort -V
です。それは首都-V
です。このスイッチについても聞いたことがありません。sort
manページから:
-V, --version-sort
natural sort of (version) numbers within text
sort
結局のところ、バージョン番号を並べ替える機能を提供しているため、次のように並べ替えを実行することもできます。
$ 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