it-swarm.cn

列出Yum

我正在尝试在RHEL5上安装第3方RPM软件包,具体取决于sqlite 3.4版。根据Yum我已经安装了3.3.6。

有没有办法列出依赖于sqlite 3.3.6的已安装软件包?

53
Rich

您想要的rpm选项是:

rpm -q --whatrequires sqlite

已编辑:已添加-已根据其他答案/评论中的讨论进行安装

已编辑:已删除-已安装,因为它是rpm的无效选项

50
Wes Hardaker

回答

_repoquery -q --installed --whatrequires sqlite
_

说明

_rpm -q --whatrequires sqlite_仅报告对程序包名称的依赖性。

相反,repoquery的作用如下(来自联机帮助页):

_   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.
_

让我们拿包libdb

_# rpm -q --whatrequires libdb
no package requires libdb
_

没有软件包取决于libdb,因此我们应该能够顺利删除它。然而...

_# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected
_

如您所见,其他一些软件包并不直接取决于该软件包,而是取决于它提供的文件libdb-5.3.so()(64bit)

最后,这是取决于libdb的软件包的真实列表:

_# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
_
43
Elouan Keryell-Even

对于dnf(yum的新版本),您可以尝试使用repoquery wrapper命令:

dnf repoquery --whatrequires sqlite

如果不可用,则可以使用以下命令进行安装:

dnf -y install dnf-plugins-core
12
teoincontatto

您也可以尝试此命令。

repoquery --whatrequires sqlite

我从 ServerFault 以及 Fedora论坛。 中获得了此命令

7
FilBot3

我认为您真正想知道的是“什么需要sqlite-3.3.6的软件包,但对sqlite-3.4.z不会满意”……而找出这一点的唯一好方法是:尝试一下。喜欢:

echo | yum upgrade sqlite
3
James Antill

正如 Wes Hardaker所说 一样,一个好的内置方法是使用rpm -q --whatrequires <package>。关键是,rpm可以在功能上进行操作,以解决依赖关系,而不仅仅是在软件包上操作,例如dpkg在Debian/Ubuntu系列Linux发行版中使用。正如其他人指出的那样,仅做rpm -q --whatrequires sqlite并不能说明全部内容,因此为什么有些人建议使用repoqueryrepoquery,但是,默认情况下未在RHEL/CentOS 7最低版中安装(也许也有台式机吗?),因此它可能并不适用于所有人。

用户可以执行rpm -q --provides <pkgname>来查看软件包提供的所有功能,然后使用rpm -q --whatrequires <capability>来查看哪些已安装的软件包需要该功能。可以使用BASH单线(在此处将其分成两行以表示长度)来简洁地查询此信息:

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

这仅使用rpm本身内置的选项,因此它不需要安装任何其他软件包(例如CentOS 7中的yum-utils,该软件包包含repoquery )。

1
villapx