如何知道哪个yum版本库已经安装了一个包?

在我通过yum安装了一个软件包(configuration了多个软件仓)之后,我怎么能从哪个软件仓库中find它?

如果我运行yum info package-name (或者yum list package-name ),我只能看到这个包是“安装”的。

安装yum-utils后,repoquery会提供你所需要的信息(这里是'epel'是存储库)。

 └─[$]> repoquery -i cherokee Name : cherokee Version : 0.99.49 Release : 1.el5 Architecture: i386 Size : 8495964 Packager : Fedora Project Group : Applications/Internet URL : http://www.cherokee-project.com/ Repository : epel Summary : Flexible and Fast Webserver Description : Cherokee is a very fast, flexible and easy to configure Web Server. It supports the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, TLS and SSL encrypted connections, Virtual hosts, Authentication, on the fly encoding, Apache compatible log files, and much more. 

什么版本的百胜餐饮?

在当前版本中,如果安装的软件包与最新的软件包版本相同,则显示安装的软件包。

 $ yum info irssi Installed Packages Name : irssi Arch : i586 Version : 0.8.14 Release : 1.fc11 Size : 2.3 M Repo : installed From repo : updates Summary : Modular text mode IRC client with Perl scripting URL : http://irssi.org/ License : GPLv2+ Description: Irssi is a modular IRC client with Perl scripting. Only text-mode : frontend is currently supported. The GTK/GNOME frontend is no : longer being maintained. $ yum --version 3.2.23 

如果有更新的软件包可用,则会单独显示,新版本显示可用的软件仓库。

即将到来的方式,但(至less在Fedora 15),可以使用yumdb进行类似的查询:

 yumdb info 'python*' 

而我真正需要从给定的回购列出软件包:

 yumdb search from_repo 'my-*-repo' 

如果一切都失败了,你可以手动检查yumdb。 它位于/var/lib/yum/yumdb并包含每个已安装软件包的详细信息。 你会特别感兴趣的from_repo 。 例如,对于bind-utils软件包:

 # for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i`; done /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_data: 39f7840f93d3d76825a9e8da79cfe0366f7fad68f018a273477aee62cccfa3f4 /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_type: sha256 /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/command_line: install bind-utils /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo: updates /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_revision: 1397654451 /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_timestamp: 1397654759 /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/installed_by: 0 /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/reason: user /var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/releasever: 6 

为了得到你想要的信息:

 # cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo updates 

以后的版本将提供更多的数据; 例如在EL 7中,下载包的确切镜像和URL就存储在这里。

 rpm -qi packagename 

会告诉你的供应商和包装商

如果最近安装了软件包,可以查看/ var / cache / yum。

在那个目录中,每个回购目录都有一个目录,在那个目录里有一个目录。 所以,你会做这样的事情:

 find /var/cache/yum -name [package-name]* 

但是,必须在/etc/yum.conf文件中启用caching:

 cachedir=/var/cache/yum keepcache=1 

请注意, yum clean [packages|all]将清除caching目录。

如果caching目录是空的,还有一种替代方法。 yum info [package]读取的yum info [package]来自/var/cache/yum/[repo]/primary.xml.gz

您可以input以下内容查看文件:

 gunzip -d -c /var/cache/yum/[repo]/primary.xml.gz | grep '<name>[package]' 

但是,在yum info [package]不显示“From repo:”的机器上,如“theotherreceive”所示,这是因为它不在文件primary.xml中,所以无法检索该信息。 因此,如果软件包位于两个或多个primary.xml文件中,则必须确定系统上的repo优先级。

要知道从repo epel安装了什么:(应该在Centos 5.5下工作),如果你没有名为epel的repo,它会把所有安装的东西吐出来。

repoquery –repoid = epel -a | xargs yum list安装

根据和Swoogan答复
在RedHat和CentOS上可以做

 sudo grep -ir PACKAGE_NAME /var/cache/yum/ 

结果应该看起来像

 Binary file /var/cache/yum/REPOSITORY_NAME/primary.xml.gz.sqlite matches 

其中repository_name是可以find你的软件包的仓库,它可能是从列表中的第一个安装的(请参阅yum repolist)

这些信息是在哪里捕捉的? 该软件包没有这些信息,yum在find软件包之后并不在乎。 你也许可以把它们拼凑在一起,弄清楚什么是包装,然后决定哪个包装有优先权。

不是一个很好的解决scheme,但我发现,可用的yum列表将显示每个包的最新版本可用的位置,例如:

yum列表可用| grep gstreamer

 PackageKit-gstreamer-plugin.x86_64 0.3.16-1.fc10 updates 

bluez-gstreamer.i386 4.30-2.fc10更新
gstreamer.i386 0.10.21-2.fc10 fedora
gstreamer-devel.i386 0.10.21-2.fc10 fedora
gstreamer-devel.x86_64 0.10.21-2.fc10 fedora
gstreamer-plugins-bad-devel.i386 0.10.9-1.fc10 rpmfusion-free
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

所以你可以在你的软件包上做一个yum list,然后使用安装的yum list比较你的安装版本,并且如果版本匹配的话就很好的了解它来自哪个repo。

您可以将详细标志添加到“yum info”:

 yum info -v <package_name> 

安装库将位于“From repo”输出下。

所以我知道这是一个有点古老的问题 – 但它出现在谷歌search我正在寻找。

还有一种方法可以获得唯一的回购清单:

 # repoquery -ai | grep 'Repository : ' | sort | uniq 

这将列出已安装软件包的存储库。

最简单的方法是:

 rpm -qa --qf '%{NAME} %{VENDOR}\n' 

更多的技巧和窍门可以在这里find: http : //wiki.centos.org/TipsAndTricks/YumAndRPM