Shell
檢查哪些 RPM 依賴於這個包
我想獲取依賴於請求包的包列表。例如,我想獲取所有依賴於
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-utils
RPM 的一部分提供,足以將包名稱解析為功能名稱,反之亦然:$ 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 很雜亂,但總體而言,它看起來更可靠且更易於使用。