例如,我正在寻找一个mod_files.sh
可能随php-devel
包一起提供的文件。我猜想这yum
会mod_files.sh
随php-devel x86_64 5.1.6-23.2.el5_3
包一起安装文件,但该文件似乎没有安装在我的文件系统上。
如何找出安装特定文件的软件包?我正在寻找我不一定已经在本地下载可能包含我正在寻找的文件的包的地方。
我正在使用 CentOS 5。
这是一个老问题,但目前的答案不正确:)
使用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
可以进行其他查询,例如列出包内容、依赖项、反向依赖项等。
要了解拥有(或提供)已安装文件的软件包:
rpm -qf myfilename
最流行的答案是不完整的:
由于此搜索通常仅针对已安装软件包中的文件执行,因此通过禁用所有外部存储库(无法禁用隐式“已安装”存储库) , yum whatprovides变得非常快。
yum --disablerepo=* whatprovides <file>
当您连接到 Internet(存储库)时,很容易找到该软件包,但是当您只能访问 Redhat 或 Centos DVD 中的 RPM 软件包时(当我必须恢复服务器并且我需要一个应用程序时,这种情况经常发生在我身上)我推荐使用以下完全独立于 Internet 和存储库的命令。(假设您在 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
您访问http://www.rpmfind.net并搜索该文件。
您将获得许多不同发行版和版本的结果,但很有可能 Fedora 和/或 CentOS 也会弹出,您将知道要使用 yum 安装的软件包名称
仅使用 rpm 实用程序,这应该适用于任何具有 rpm 的操作系统:
rpm -q --whatprovides [file name]
您可以在这里执行此操作,但使用您的包裹。在我的情况下,它是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 打包者可以选择最适合他的。