如何find哪个rpm包提供我正在寻找的文件?
作为一个例子,我正在寻找一个mod_files.sh
文件,这个文件可能是用php-devel
包来的。 我猜yum
会安装mod_files.sh
文件和php-devel x86_64 5.1.6-23.2.el5_3
软件包,但该文件看起来并没有安装在我的文件系统上。
如何找出哪个软件包安装了特定的文件? 我正在寻找我不一定已经在本地下载的包,其中可能包括我正在寻找的文件。
我正在使用CentOS 5。
这是一个老问题,但目前的答案是不正确的:)
使用yum whatprovides ,用你想要的文件的绝对path(可能是通配符)。 例如:
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
您可能更喜欢yum-utils
包中提供的repoquery
工具的输出和速度。
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
注意:这个命令不需要以root身份运行(相反, sudo yum whatprovides myfilename
)
最stream行的答案是不完整的:
由于这个search通常只对来自安装包的文件执行, 因此通过禁用所有外部回购(隐式的“已安装”回购不能被禁用),使得提供的东西快速增长。
yum --disablerepo=* whatprovides <file>
当你连接到互联网(存储库)时,find软件包很容易,但是当你只能访问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
你去http://www.rpmfind.netsearch文件。;
你会得到很多不同的发行版和版本的结果,但很可能Fedora和/或CentOS也会popup,你会知道要用yum安装的包名