rpmが提供するファイルを見つけるのは簡単です。
dnf provides *bin/vim
または
yum whatprovides *bin/vim
rpmやyumがインストールされている場合は..しかし、rpmの正確なファイル内容を知りたいとしましょう。例えば
grep -ril bin/vim v*
vim-9.0.1572-1.2.ppc64.rpm
とても簡単
しかし、bin / shを含む正確なパッケージを知りたいのですが、どうすればいいですか? bin/sh 依存関係もあるパッケージを返すには、このコマンドを使用します。 bin / shをファイルとして提供する正確なパッケージを知りたいです。
grep -ril bin/sh v*
v4l-conf-3.107-2.10.ppc64.rpm
vacation-1.2.7.1-13.3.ppc64.rpm
vim-9.0.1572-1.2.ppc64.rpm
virt-what-1.25-1.2.ppc64.rpm
vpnc-0.5.3r550-3.12.ppc64.rpm
vsftpd-3.0.5-10.1.ppc64.rpm
答え1
rpm -qf
どのパッケージがファイルを所有しているかを教えてくれます。
例えば
% rpm -qf /bin/sh
bash-4.2.46-35.el7_9.x86_64
% rpm -qf /bin/vim
vim-enhanced-7.4.629-8.el7_9.x86_64
パッケージがインストールされていない場合は、rpm -qlp
次のコマンドを使用して内容を表示できます。
% rpm -qlp binutils-2.27-44.base.el7.x86_64.rpm | head
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/dwp
/usr/bin/elfedit
/usr/bin/gprof
/usr/bin/ld
/usr/bin/ld.bfd
/usr/bin/ld.gold
これにより、ディレクトリ内のすべてのrpmの内容の「インデックス」ファイルを生成してからインデックスをgrepすることが簡単になります。
思い出される例は次のとおりです。
% for a in *.rpm
do
rpm -qlp "$a" | sed "s/^/$a:/"
done > index
% grep :/usr/bin/sh index
bash-4.2.46-34.el7.x86_64.rpm:/usr/bin/sh
/binは/usr/binへのシンボリックリンクなので、/usr/bin/shを検索する必要があります。
答え2
質問の最初のコマンドとそのバリエーションは、*bin/<file>
目的の内容を正確に提供します。
yum provides *bin/vim
yum provides /bin/vim
yum provides /usr/bin/vim
vim-enhanced-2:8.2.2637-20.el9_1.x86_64 : A version of the VIM editor which includes recent enhancements
Repo : @System
Matched from:
Filename : /usr/bin/vim
vim-enhanced-2:8.2.2637-20.el9_1.x86_64 : A version of the VIM editor which includes recent enhancements
Repo : appstream
Matched from:
Filename : /usr/bin/vim
yum
と交換できますdnf
。パッケージをインストールするかどうかにかかわらず、パッケージが返されます。
実際にインストールされたパッケージに含まれるファイルの場合:
rpm -qf /bin/sh
bash-5.1.8-6.el9_1.x86_64
rpm -qf /usr/bin/vim
vim-enhanced-8.2.2637-20.el9_1.x86_64