特定のバージョンを提供するRPMパッケージを確認するには?

特定のバージョンを提供するRPMパッケージを確認するには?

RPM SPECファイルはタグのパッケージバージョンを理解しているため、Requires:SPECProvides:ファイル内で名前が混乱している場合でも、適切な依存関係を簡単に構築できます(たとえば、競合を防ぎ、パッケージの複数のバージョンを許可するため)。

たとえば、fooパッケージは更新されたバージョンを提供します。

Name: foox
Provides: foo = 2

そして

Name: bar5
Requires: foo >= 2

素晴らしい作品。 fooxもインストールされていない場合、yumはbar5をインストールしません。

私の質問 -foo = 2どのパッケージが提供されているかをコマンドラインでどのように照会できますか?

rpmのマニュアルページに見られるように

--どのような機能が提供されますか?

Query all packages that provide the CAPABILITY capability. 

--供給

List capabilities this package provides.

十分でしょう。バージョンを見る
ことができます。バージョンのみ入手できます。ただし、名前とバージョンでは実際のパッケージ名はわかりません。rpm -q --provides <package name>
rpm -q --qf %{VERSION} <package name>
rpm -q --whatprovides

私も試してみましたが、rpm -q --provides foofooxがインストールされ、foo = 2が提供されていますが、元のfoo = 1だけを取得します。

私が望むのは次の魔法です。

$ rpm -q --whatprovides "foo = 2"
$ foox

ベストアンサー1

かなり近いです。

rpm -q --whatprovides "foo = 2"

ただし、バージョンは許可されません。これを行うには、ステップ1に戻って出力形式を指定します。

rpm -q --whatprovides foo

このように:

rpm -q --queryformat "%{VERSION}:%{NAME}\n" --whatprovides foo

grep(「2」を選択)で結果をフィルタリングし、sedで結果をフィルタリングして追加のバージョンとコロンを削除します。

grep -E '/^2:/' | sed -e 's/^[^:]*://'

これはパッケージ名のみを提供します。実際には、バージョン、リリース、スキーマインストールする依存関係を変更します。

参考までに:5.2.5。特定の機能を提供するパッケージの確認(Fedora RPMガイド)

OPのコメントに関しては、awkはより簡単です。

awk -F: '{ if ($1 == "2") print $2}'

同意します(ただし、設定スクリプトの慣例によって移植性がわずかに低下するため、awkの後にgrep / sedを使用してください)。しかし、与えられた値以上のバージョンのパッケージをチェックするには、awkははるかに簡単です。

awk -F: '{ if ($1 >= 2) print $2}'

今朝出発してからそんな気がしました。しかし、このタイプの比較は、おそらく正確な一致よりも仕様ファイルでより一般的になります。また、引用符の"2"ため、awkはそれを数値ではなく文字列として扱うことがあります。これはバージョンと一致しませんが、2.0引用符と数字を解放すると一致します。

@デイブ・トンプソン-085比較を次に含める必要があることを示します。行動不要です。つまり、すべての行に対して、前部{}後部が1つの動作です(パターンが提供されていないため)。 mawkから引用マニュアルページ:

AWKプログラムは一連の模様 {行動}ペアとユーザー機能の定義。

それから

   A pattern can be:
          BEGIN
          END
          expression
          expression , expression

表現はおそらく正規表現しかし、そうかもしれません。比較する。彼が提案した改善は次のとおりです。

awk -F: '$1>=2{print $2}'

おすすめ記事