按yum安装软件包(配置了多个存储库)后,如何从哪个存储库中查找到它?

如果我运行yum info package-name(或yum list package-name),则只能看到软件包已“安装”。

评论

好问题!我安装了yum-utils并尝试了一种叫做repoquery的utils,但是没有运气。

另请参阅serverfault.com/questions/90409/…:)

@warren您的链接没有用,因为您的链接是一个有关“存储在什么回购中的rpm的问题”,但是此问题询问“什么存储库是从中安装的rpm”。不同的问题。

如果您习惯于使用rpm -qa | grep NAME,则可以执行已安装的yum list | grep NAME来查找rpm的存储库。

@TrevorBoydSmith-7年前,它很接近。今天,它仍然相似。从来没有说过是一样的。只是和它有关。

#1 楼

安装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.


评论


repoquery似乎工作不正确,我得到的软件包版本与yum info package_name的版本不同,它似乎没有以与yum相同的顺序查询存储库。

–迈克·米勒(Mike Miller)
2010-11-30在16:38

在几台服务器上也一样。 yum info package_name显然比repoquery返回的结果更多。这就是为什么堆栈交换不应锁定投票的原因。

–reflexiv
2012年12月18日下午5:51

我发现熊加亚莫夫的答案不正确。 repoquery -i $ pkg提供从中可以使用$ pkg的存储库,而不是从中安装$ pkg的存储库。我执行了该命令和rpm -qi $ pkg并获得了不同的版本号。 rpm导致的版本号早于repoquery的版本号。

–user158844
13年2月13日在18:48



您的本地副本可能已过期,或者它与其他附加命令一起安装以供yum使用(例如--use-mirror)。我认为不可能总是得到正确的答案。

–熊佳亚诺夫
13-10-5在4:12

user158844是正确的。这将告诉您提供给定程序包的存储库,而不是特定程序包的存储库。如果您从某个仓库中安装了一个软件包,然后删除了该仓库,然后安装了另一个仓库,该仓库提供了一个具有相同名称的软件包,则运行“ repoquery -i”,这样会返回给您列出新安装的仓库的软件包,而不是那些您实际上是从安装软件包的。询问者想知道安装的软件实际来自哪个软件包。当前存储库中没有哪个具有相同名称的软件包。

–托德·沃尔顿(Todd Walton)
19年6月12日在16:31

#2 楼

yum的什么版本?

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

$ 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


如果有更新的软件包,将单独显示,新版本显示可从其购买的回购软件。

评论


我在CentOs 5.3上使用yum 3.2.19,并且“ From repo”行不存在。

–lg
09年9月3日在16:29

是的...我在3.2.21上对其进行了测试,该信息在任何地方都没有。当我在具有3.2.23的盒子上进行操作时,它起作用了。

– Alex
09年9月3日17:00

现在,这是最好的解决方案,但不适用于RHEL / Centos 5.3。我接受此解决方案,但是如果可以用于RHEL / Centos 5.3,我准备选择其他答案。

–lg
09年9月4日在7:38

这在CentOS 5.5中也不可行。

–迈克·米勒(Mike Miller)
2010-11-30在16:38

即使在centos 5.8中也无法使用“ From rep”

–sepehr
13年4月7日在16:53

#3 楼

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

yumdb info 'python*'


我实际上需要从给定的仓库中列出软件包):

yumdb search from_repo 'my-*-repo'


评论


它也适用于Fedora 14

–lg
11-10-28在7:22

在RHEL 6.2上工作

–pixelbeat
2011年11月8日17:43

#4 楼

如果所有其他方法均失败,则可以手动检查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存储在此处。

评论


+1。但最好做些类似的事情:对于/ var / lib / yum / yumdb / b / * bind-utils * / *中的i;回显$ i:`cat $ i` | grep -oP'from_repo:\ \ K. *';完成,在上面的示例中返回:更新-更具可读性!

– Greg Dubicki
16 Jan 27 '21:10



@GregDubicki命令的重点是显示正在发生的事情以及如何存储内容的更多上下文。它显然没有这样做:这里不需要grep任何东西,您甚至可以放弃循环。您只需要一个非常简单的cat / var / lib / yum / yumdb / b / * bind-utils * / from_repo。

–迈克尔·汉普顿
16 Jan 27 '21:14



这就是我所需要的。我想知道是从仓库还是从本地软件包文件中安装了已安装的软件包,这告诉了我该信息。谢谢!

–华威
20年1月8日在22:02

好答案!我用它通过以下方法建立了所有给定服务器上正在使用的所有存储库的唯一列表:#for $($ / find / var / lib / yum / yumdb -name“ from_repo” -print)中的文件;做(cat“ $ {file}”;回声);完成|排序-u

–史蒂夫·邦德斯
20年1月29日在19:44

#5 楼

rpm -qi packagename


会告诉您供应商和包装商

#6 楼

要查看从repo epel安装的内容:(应在Centos 5.5下工作)请注意,如果没有名为epel的repo,它将吐出已安装的所有内容。
 repoquery --repoid=epel -a | xargs yum list installed
 


评论


只要存储库中没有更新的软件包,这似乎就可以工作。因此,您需要在使用前运行yum update。

– codewaggle
2012年5月29日在9:22

#7 楼

如果软件包是最近安装的,则可以在/ var / cache / yum中查找。

在该目录中,每个存储库都有一个目录,在该目录中。因此,您将执行以下操作:

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


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

cachedir=/var/cache/yum
keepcache=1


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

如果缓存目录为空,则有另一种方法。 yum info [package]读取的信息来自/var/cache/yum/[repo]/primary.xml.gz

您可以通过输入以下内容来浏览文件:

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


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

评论


这个解决方案也许是一个选择(我投票赞成),但我正在寻找一个明确的答案。

–lg
09年9月4日在7:34

#8 楼

根据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是可以找到您的软件包的存储库,它可能是从列表中的第一个安装的(请参阅yum repolist)

#9 楼

最简单,最直接的方法而无需安装任何额外的工具,获取或输出无关的信息很简单:

从以下位置安装。

使用grep在原始问题的注释中提到了此方法,但这不是必需的。您可以直接将软件包名称传递给yum进行过滤。

评论


警告!如果您尝试在脚本中执行此操作(甚至将其|减小到grep或grep),则这些行将被奇怪地包裹起来,因为它假定了默认的屏幕宽度。您需要做一些魔术才能获得每行一个包的“预期”格式(通过Bugzilla通过Allen Kistler)-安装的yum列表| tr“ \ n”“#” | sed -e's /#/ / g'| tr“#”“ \ n”

–bto
20-2-28在13:25



#10 楼

该信息可以在任何地方捕获吗?程序包没有该信息,并且yum在找到程序包后也不会在意。您可以通过弄清楚哪些存储库包含该软件包,然后确定哪个存储库具有优先级来将其拼凑起来。

评论


此解决方案可能是一个选项(我投票赞成),但仅适用于最近安装的软件包,因为我可以更改存储库及其优先级。

–lg
09年9月4日在7:31

#11 楼

这不是一个很好的解决方案,但是我发现可用的yum list会告诉您每个软件包的最新版本在哪里,例如:

yum list available |
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 rpm无融合

因此,您可以在包装上制作一个yum列表,然后比较安装的版本使用已安装的yum list,并很好地了解版本匹配时来自哪个回购。

评论


这仅是在尚未安装软件包的情况下才是正确的。

–lg
09年9月4日在7:20

虽然它不能完全回答OP的问题,但对我来说非常有用,因为它仅在yum且没有其他utils的情况下可以在Centoss 5.5中运行,并且您可以:1.卸载软件包,然后查询以查看存储库,然后重新安装或2.在未安装软件包的其他计算机上查询。

–莱尔德
2014年12月4日下午4:09

#12 楼

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

yum info -v <package_name>


安装库将在“从仓库”输出中。

评论


这似乎是唯一不需要安装yum-utils的解决方案。

–马克·爱丁顿
17年1月3日,21:25

这只会为我列出“已安装”。

–frogstarr78
19年3月19日在19:14

#13 楼

因此,我知道这是一个有点古老的问题-但它出现在Google搜索中以寻找我想要的东西。

还有一种方法可以获取所用存储库的唯一列表:

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


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

#14 楼

以上命令都不适合我。这就是我要做的。

yum provides "*compat-libstdc*"


这里是一个很好的参考。

https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsheet_1214_jcs_print-1.pdf

#15 楼

最简单的方法是:

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


此处提供更多提示和技巧:http://wiki.centos.org/TipsAndTricks/YumAndRPM

评论


通过这种方式(添加带有grep -i软件包名称的管道),我发现了供应商,但是没有找到存储库。

–lg
2011-2-7在7:43

供应商(几乎)与存储库无关。

–马特奥
2012年7月20日在7:28