私はRHELを持っていて、サーバーの1つに同じRPMパッケージの2つの異なるバージョンをインストールしました。
[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64
既存のパッケージ名だけがそのまま受け取れるかどうか疑問に思います。基本的に私は次のことを達成したいと思います:
[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package
どうすればいいですか?
答え1
同じパッケージの2つのバージョンをどのようにインストールするのかわかりませんが、これで作業が完了します。
rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
sort -V | \
awk 'NR==1 { print $2 }'
最初の行はRPMデータベースにmy-package-nameを照会し、RPMに特定の形式(VERSIONの後にデフォルトの「rpm -qa」フィールド)で結果を提供するように要求します。バージョン番号を並べ替えるためにパイプされ、最初の行だけが印刷されるようにパイプされ、追加のsort -V
VERSIONawk
フィールドが削除され、デフォルトのrpm -qa
出力が生成されます。
-V
これにより、ソートフラグを使用してRHELシステムで実行していると仮定することが安全になります。
答え2
私はいつもバージョン文字列の解釈に依存するプログラムに対して編集的であるので、Jeffのソリューションの代わりに次のことを行うこともできます。
[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64
(kernel
パッケージ名を変更してください)
rpm -qa
デフォルトでは、同じコマンドを実行し、各行の前にインストール--queryformat
のUnixタイムスタンプ(ラベルにあります)を付けて完全なパッケージ名を印刷します%{INSTALLTIME}
。次に、sort -n
出力を最も古いものから最新のものまでソートし、出力の最初の行だけをインポートしてから、完全なパッケージ名になる最後の列を印刷するために使用されます。
しかし、Jeffの仕事はかなり良いです。これは個人的な好みの問題かもしれません。
答え3
yumを使用してパッケージ名をダウングレードできます。時々、新しいパッケージにエラーがあります。以前のパッケージにダウングレードしました。