在 Yum 中列出依赖于另一个已安装包的包

Ric*_*ich 68 yum rhel package-management

我正在尝试在 RHEL5 上安装一个 3rd-party RPM 包,它依赖于 sqlite 3.4 版。根据 Yum 我已经安装了 3.3.6。

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

Wes*_*ker 66

您想要的 rpm 选项是:

rpm -q --whatrequires sqlite
Run Code Online (Sandbox Code Playgroud)

编辑:在其他答案/评论中添加 --installed 每个讨论

编辑:删除 --installed 因为它是 rpm 的无效选项

  • `--installed` 是 `repoquery` 的一个选项,但对 `rpm` 无效。 (6认同)
  • 此外,`repoquery` 可用于生成需要特定包的所有包的树状结构,例如:`repoquery --pkgnarrow=installed --tree-whatrequires sqlite` (3认同)
  • 我不同意这个答案是可靠的——当然不是在 CentOS 7.x 上。要进行测试,请安装 ImageMagick。OpenEXR-libs 也将被安装,因为 ImageMagick 依赖于它。现在运行 rpm -q --whatrequires OpenEXR-libs,返回“没有包需要 OpenEXR-libs”,这是错误的。现在运行“repoquery -q --installed --whatrequires OpenEXR-libs”,它会正确返回“ImageMagick-0:6.7.8.9-15.el7_2.x86_64”。@只是一个随机的人在下面的答案应该是正确的答案。 (3认同)

Elo*_*ven 57

回答

repoquery -q --installed --whatrequires sqlite
Run Code Online (Sandbox Code Playgroud)

说明

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.
Run Code Online (Sandbox Code Playgroud)

例子

让我们打包libdb

# rpm -q --whatrequires libdb
no package requires libdb
Run Code Online (Sandbox Code Playgroud)

没有包依赖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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,其他一些包并不直接依赖于包,而是依赖于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
Run Code Online (Sandbox Code Playgroud)

  • 这个答案比接受的答案好 (2认同)

小智 14

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

dnf repoquery --whatrequires sqlite
Run Code Online (Sandbox Code Playgroud)

如果它不可用,您可以使用以下命令安装它:

dnf -y install dnf-plugins-core
Run Code Online (Sandbox Code Playgroud)

  • 最后需要 `--installed --recursive` ,这样它只返回实际安装的内容,而不是从存储库中提取 (2认同)

Fil*_*ot3 7

你也可以试试这个命令。

repoquery --whatrequires sqlite
Run Code Online (Sandbox Code Playgroud)

我从ServerFaultFedora 论坛得到了这个命令