检查哪些 RPM 依赖于该包

检查哪些 RPM 依赖于该包

我想获取依赖于请求的包的包列表。例如,我想获取所有依赖于telnet.我想出了这个脚本:

for i in `rpm -qa | sort`;
   do rpm -qR $i | grep telnet > /dev/null;
   if [ $? -eq 0 ]; then
       echo $i;
   fi;
done

还有更好的方法吗?

谢谢。

答案1

您需要的命令是:

rpm -q --whatrequires <packagename>

所以:

rpm -q --whatrequires telnet

从手册页

  --whatrequires CAPABILITY
         Query all packages that require CAPABILITY for proper functioning.

答案2

不幸的是,rpm -q --whatrequires有时还不够:

$ rpm -q --whatrequires perl-libwww-perl
no package requires perl-libwww-perl

$ rpm -e perl-libwww-perl
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

那是因为--whatrequires将 a 作为其参数 功能名称,而不是一个 包裹名字。如果(通常是这样)一个 RPM 包只提供一个同名功能,那么将该包的名称作为--whatrequires参数就可以了;但如果没有(如上面的perl-libwww-perl例子),我们需要另一个解决方案。


解决方案#1:rpm --test -e

使用;给出--test(“试运行”)选项-e如果命令成功(实际上没有更改您的系统!),则没有依赖项:

$ rpm --test -e emacs-common && echo 'No dependencies!'
No dependencies!

;如果失败,您会得到我们上面已经看到的错误输出:

$ rpm --test -e perl-libwww-perl && echo 'No dependencies!'
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

解决方案#2:repoquery --installed --whatrequires

repoquery(1)命令作为yum-utilsRPM 的一部分提供,足以将包名称解析为功能名称,反之亦然:

$ repoquery --installed --whatrequires perl-libwww-perl
perl-libwww-perl-0:5.833-5.el6.noarch
perl-XML-Parser-0:2.36-7.el6.x86_64
perl-libwww-perl-0:5.833-5.el6.noarch

缺点:

  • yum-utils您的系统上可能还没有
  • yumyum-utils需要)可能尚未在您的系统上
  • 不重复输出(通过附加即可轻松修复| sort -u
  • 不过滤输入包名称(也很容易解决)


因此,尽管解决方案 1 很混乱,但总体而言它看起来更可靠且更易于使用。

答案3

解决方案#3:rpmdep --depending

显示依赖于给定参数的软件包,而不是显示软件包依赖性 (rpm -qR):然后 rpmdep 充当改进的rpm -q --whatrequires命令。 [摘自 rpmdep 手册页]

我还想指出,解决方案 #2 需要安装很多软件包。在 openSUSE Leap 15.4 上,zypper 解决了总共 23 个软件包 (3.7 MB) 的依赖关系,需要安装这些软件包,只是为了启用 repoquery 命令。

rpmdep 是 rpmorphan 软件包中的实用程序之一。它类似于rpm -q --provides/ --requires,主要区别在于它适用于包,而不是功能。这正是OP所要求的。

例子:

$ rpmdep --depending firewalld
no depending : firewalld is an orphan

$ rpmdep --depending iptables
iptables is needed by firewalld

相关内容