rpmを「grep」する方法は?

rpmを「grep」する方法は?

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

関連情報