查找 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
注意我必须搜索 /usr/bin/sh 因为 /bin 是 /usr/bin 的符号链接
答案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