如何找到哪个 rpm 软件包提供我正在寻找的文件?

问题描述 投票:0回答:8

举个例子,我正在寻找一个

mod_files.sh
文件,该文件可能会随
php-devel
包一起提供。我猜测
yum
会使用
mod_files.sh
包安装
php-devel x86_64 5.1.6-23.2.el5_3
文件,但该文件似乎未安装在我的文件系统上。

如何找出哪个软件包安装了特定文件?我正在寻找我不一定已经在本地下载的软件包,其中可能包含我正在查找的文件。

我使用的是 CentOS 5。

centos rpm yum
8个回答
283
投票

这是一个老问题,但当前的答案是不正确的:)

使用 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
可以进行其他查询,例如列出包内容、依赖项、反向依赖项等。


213
投票

要了解拥有(或提供)已安装文件的软件包:

rpm -qf myfilename

32
投票

最受欢迎的答案不完整:

由于此搜索通常仅针对已安装软件包中的文件执行,因此通过禁用所有外部存储库(无法禁用隐式“已安装”存储库),可以使 yum whatprovides 变得非常快。

yum --disablerepo=* whatprovides <file>

5
投票

您访问 http://www.rpmfind.net 并搜索该文件。

您将获得许多不同发行版和版本的结果,但很可能 Fedora 和/或 CentOS 也会弹出,您将知道要使用 yum 安装的软件包名称


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

4
投票

仅使用 rpm 实用程序,这应该适用于任何具有 rpm 的操作系统:

rpm -q --whatprovides [file name]

参考。 https://www.thegeekdiary.com/how-to-find-which-rpm-package-provides-a-specific-file-or-library-in-rhel-centos/


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 打包者可以选择最适合他的名称。


0
投票

根据我们是否知道文件路径,我们可以选择下面提到的 2 个选项之一。

  • 如果我们知道文件的路径,则按照 RPM 命令的手册页进行操作

    QUERY OPTIONS
    The general form of an rpm query command is
    
    rpm {-q|--query} [select-options] [query-options]
    
    PACKAGE SELECTION OPTIONS:
    PACKAGE_NAME
           Query installed package named PACKAGE_NAME.
    
    -f, --file FILE
           Query package owning FILE.
    

识别相应的 RPM 包非常简单。 例如:

[root@e2e-64-147 ~]# rpm -qf /usr/bin/lesspipe.sh
less-458-9.el7.x86_64
  • 如果只知道文件名而不知道路径,那么我们可以使用带有 provides 选项的 yum 命令来识别相应的 RPM 包。 例如:

    [root@e2e-64-147 ~]# yum -q provides '*lesspipe.sh*'
    less-458-9.el7.x86_64 : A text file browser similar to more, but better
    Repo        : base
    Matched from:
    Filename    : /usr/bin/lesspipe.sh
    
© www.soinside.com 2019 - 2024. All rights reserved.