
요청한 패키지에 의존하는 패키지 목록을 얻고 싶습니다. 예를 들어, 모든 종속성을 가져오고 싶습니다 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
명령이 성공하고(실제로 시스템을 변경하지 않고!) 종속성이 없는 경우 ;given --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-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은 지저분하지만 전반적으로 더 안정적이고 사용하기 쉬운 것 같습니다.
답변3
해결 방법 #3:rpmdep --depending
패키지 종속성을 표시하는 대신(rpm -qR) rpmdep은 향상된 rpm -q --whatrequires
명령으로 작동합니다. [rpmdep 매뉴얼 페이지에서 발췌]
또한 솔루션 #2에는 많은 패키지를 설치해야 한다는 점을 지적하고 싶습니다. openSUSE Leap 15.4에서 zypper는 repoquery 명령을 활성화하기 위해 설치해야 하는 총 23개 패키지(3.7MB)에 대한 종속성을 해결합니다.
rpmdep은 rpmorphan 패키지의 유틸리티 중 하나입니다. rpm -q --provides
/ 와 비슷하지만 --requires
, 주요 차이점은 함수가 아닌 패키지에 적용된다는 것입니다. 이것이 바로 OP가 요청한 것입니다.
예:
$ rpmdep --depending firewalld
no depending : firewalld is an orphan
$ rpmdep --depending iptables
iptables is needed by firewalld