探しているファイルを提供するrpmパッケージを見つけるにはどうすればよいですか?


207

例として、mod_files.shおそらくphp-develパッケージに付属するファイルを探しています。パッケージと一緒yummod_files.shファイルをインストールすると思いましたphp-devel x86_64 5.1.6-23.2.el5_3が、ファイルシステムにファイルがインストールされていないようです。

特定のファイルがインストールされているパッケージを確認するにはどうすればよいですか?私が探しているファイルが含まれている可能性があるパッケージを必ずしもローカルにダウンロードしていない場所を探しています。

CentOS 5を使用しています。


7
superuser.com ___?
Grzegorz Oledzki

@Grzegorz良い点、私は移動するために投票を入れました。
rjh

これがより良い答えです:unix.stackexchange.com/a/4706/39281
Sam Watkins、

1
回答する@SamWatkinsは、探しているファイルを提供するパッケージがすでにシステムにインストールされている場合にのみ機能します。パッケージがインストールされていない場合(OPが言うように)は使用できません。使用rpmする必要がありますyum
rjh

回答:


266

これは古い質問ですが、現在の回答は正しくありません:)

yum whatprovidesを使用し、必要なファイルへの絶対パスを指定します(ワイルドカードにすることもできます)。例えば:

yum whatprovides '*bin/grep'

戻り値

grep-2.5.1-55.el5.x86_64 : The GNU versions of grep pattern matching utilities.
Repo        : base
Matched from:
Filename    : /bin/grep

パッケージrepoqueryで利用可能なツールの出力と速度を優先することができyum-utilsます。

sudo yum install yum-utils
repoquery --whatprovides '*bin/grep'
grep-0:2.5.1-55.el5.x86_64
grep-0:2.5.1-55.el5.x86_64

repoquery パッケージの内容、依存関係、逆依存関係などを一覧表示するなど、他のクエリを実行できます。


199

すでにインストールされているファイルを所有している(または提供している)パッケージを知るには:

rpm -qf myfilename

4
このコマンドは、yum whatprovidesよりも効率的であるように見えます。遅いリポジトリから更新を取得する必要はありません。
2014年

このバージョンは、openSUSEなどのまだrpmを使用している非redhatベースのディストリビューションでも動作します
simotek

5
rpm -qf <filename>インストールされているアプリケーションを提供するパッケージを決定するのに最適であるように見えます(現在のyumリポジトリキャッシュにあるものとは異なる場合があるため)、yum whatprovides <filename>まだインストールされていないパッケージを提供するパッケージを決定するのに最適です。応用。それぞれに独自の目的があります。
StockB 2017年

さらに、yum whatprovides ...アプリケーションがルートパッケージの場合(つまり、に存在する場合)にのみルートが必要/sbinです。ただし、rpm -qf ...からrpmsを読み取るには、rootも必要/sbinです。したがって、根の要件は両方の方法で機能的に同等であることを提案します。
StockB 2017年

1
このコマンドを使用する場合は、ファイル名だけでなく、完全なファイルパス+ファイル名を使用する必要があることに注意してください。
アシッシュ、

31

最も一般的な答えは不完全です:

この検索は通常、インストールされたパッケージのファイルに対してのみ実行されるため、すべての外部リポジトリを無効にすることで、yum whatprovides大幅に高速化されます(暗黙の「インストール済み」リポジトリは無効にできません)。

yum --disablerepo=* whatprovides <file>

4
ただし、この場合、OPは、システムにインストールされていない不足しているファイルを具体的に探しています。パッケージをインストールした後も、それはあると考えたため、使用できません--disablerepo=*
Randall

4

あなたはに行くhttp://www.rpmfind.netし、ファイルを検索します。

多くの異なるディストリビューションとバージョンの結果が得られますが、おそらくFedoraやCentOSもポップアップし、yumでインストールするパッケージ名がわかります。


このウェブサイトはオフラインです!
ピーター

1
Webサイトはファイルを検索していないようです。検索語を含むパッケージ名のみ。
jww 2015

1
@jwwファイルの検索は、少なくとも私にとってはうまくいきます。ドキュメントが言うように、単一のパス名または絶対パス名を持つ任意のファイルで実行可能ファイルを検索できます。
nos

4

インターネット(リポジトリ)に接続しているときにパッケージを見つけるのは簡単ですが、RedhatまたはCentos DVD内のRPMパッケージにしかアクセスできない場合(これは、サーバーを回復する必要があり、アプリケーションが必要なときに頻繁に発生します)をお勧めしますインターネットとリポジトリから完全に独立した以下のコマンドを使用します。(おそらくDVDにアンインストールされたパッケージがたくさんあります)。〜/ cent_os_dvdにPackageフォルダーをマウントし、「semanage」を提供するパッケージを探しているとしましょう。次のコマンドを実行できます。

for file in `find ~/cent_os_dvd/ -iname '*.rpm'`;  do rpm -qlp $file |grep '.*bin/semanage';  if [ $? -eq 0 ]; then echo "is in";echo $file  ; fi;  done


0

ここでもパッケージを使用してこれを行うことができます。私の場合、それはlsb_release

実行: yum whatprovides lsb_release

応答:

redhat-lsb-core-4.1-24.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-24.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release`

インストールして実行: yum install redhat-lsb-core

パッケージ名には番号とシステムタイプを含めないでください。そうすることで、yumパッケージャは自分に最適なものを選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.