Shell

檢查哪些 RPM 依賴於這個包

  • August 7, 2020

我想獲取依賴於請求包的包列表。例如,我想獲取所有依賴於telnet. 我想出了這個腳本:

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

有更好的方法嗎?

謝謝。

您需要的命令是:

rpm -q --whatrequires <packagename>

所以:

rpm -q --whatrequires telnet

從手冊頁

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

不幸的是,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它的參數是 功能名稱,而不是 包名稱。如果(通常情況下)一個 RPM 包只提供一個同名功能,那麼將該包的名稱作為--whatrequires參數就可以了;但如果不是(如上perl-libwww-perl例),我們需要另一種解決方案。


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

用;給出--test(“dry-run”) 選項 -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可能尚未在您的系統上
  • yum(這yum-utils需要)可能尚未在您的系統上
  • 不重複輸出(通過附加很容易修復| sort -u
  • 不過濾掉輸入包名稱(也很容易解決)


因此,儘管解決方案 #1 很雜亂,但總體而言,它看起來更可靠且更易於使用。

引用自:https://unix.stackexchange.com/questions/166343