적절한 패키지의 종속성과 설치된 버전을 재귀적으로 나열하는 방법은 무엇입니까?

적절한 패키지의 종속성과 설치된 버전을 재귀적으로 나열하는 방법은 무엇입니까?

특정 패키지의 재귀 종속성을 나열하고 싶습니다.현재 설치되어 있음각 종속성의 버전입니다. 또한 각 행에 항목이 있어서 정렬하고 구별할 수 있기를 원합니다.

tcpdump기본적으로 출력이 다음과 같기를 원한다고 가정해 보겠습니다 .

libtext-wrapi18n-perl: 0.06-7
perl-base: 5.14.2-21+deb7u2

...등. 각 줄의 정확한 형식은 중요하지 않으며 중요한 것은 구별하고 정렬하는 능력입니다.

질문APT에 설치된 패키지의 종속성 나열(재귀)유사하지만 패키지 버전을 제공하지 않습니다. 사용법은 debfoster -d유망해 보이지만 해당 출력은 추가 처리에 적합하지 않습니다.

답변1

이미 제공된 두 답변 모두 장단점이 있습니다.

구문 분석하기 쉬운 패키지 목록이 시작부터 제공되므로 debfoster다음은 요청 결과를 제공합니다.

apt-cache policy $(debfoster -q -d tcpdump|tail -n +2)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

tail첫 번째 줄을 건너뛰고 awk단일 작업으로 결과를 처리하는 데 사용됩니다 . (명령 대체를 사용하면 개행 처리를 피할 수 있습니다.) 시작한다는 것은 debfoster이미 설치된 패키지에 대해서만 이 작업을 수행할 수 있음을 의미하므로 dpkg다음을 통해 추가 정보를 제공할 수 있습니다.

dpkg -l $(debfoster -q -d tcpdump|tail -n +2)

처음부터 시작하면 apt-rdepends더 어려운 패키지 목록이 제공되고 중복도 있지만 아직 설치되지 않은 패키지를 처리할 수 있다는 장점이 있습니다.

apt-cache policy $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

이는 다음 명령과 함께 사용할 수도 있습니다 dpkg -l.

dpkg -l $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)

그러나 이를 위해서는 dpkg관련된 모든 패키지에 대한 지식이 필요하며, 처리 중인 패키지가 설치되지 않은 경우에는 그렇지 않을 수도 있습니다.

debfosterRecommends기본적으로 포함된 이 기능은 다음을 사용하여 비활성화할 수 있습니다 --option UseRecommends=no.

debfoster -q --option UseRecommends=no -d tcpdump

apt-rdependsRecommends기본적으로 포함되지 않습니다. 이 기능은 다음을 사용하여 활성화할 수 있습니다 -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends.

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends -p tcpdump

debfoster이 경우 발견된 모든 종속성을 제공하지는 않습니다 . (예를 들어 debfosterfind는 via , and tcpdump에 의존 하지만 via , and 에는 의존하지 않습니다.)aptlibssl1.0.0debconfapt-utilsapt-rdepends

답변2

다음 명령 세트가 트릭을 수행하는 것 같습니다.

debfoster -q -d tcpdump |
 sed -n '1!p' |
 tr -s ' ' |
 xargs |
 tr '\n' ' ' |
 xargs -I _ -d ' ' -n 1 sh -c "echo  _: \"\$(apt-cache policy _ | grep '  Installed: ' | sed -e 's/  Installed: //')\""

이는 다음을 사용합니다:

  • debfoster인쇄(재귀) 종속성
  • sed첫 번째 줄 삭제
  • tr초과 공간 축소
  • xargs선행 및 후행 공백 자르기
  • tr후행 줄 바꿈 제거
  • xargs도착하다:
    • echo패키지 이름
    • apt-cache policy설치된 버전을 찾고 버전 자체를 추출하는 데 grep사용 됩니다 .sed

그것은 다음을 생산합니다 :

apt-utils: 1.0.1ubuntu2.6
debconf: 1.5.51ubuntu2
debconf-i18n: 1.5.51ubuntu2
dpkg: 1.17.5ubuntu5.3
gcc-4.8-base: 4.8.2-19ubuntu1
[...etc...]

누구든지 이것을 단순화하는 방법을 찾을 수 있다면 알려주시기 바랍니다.

답변3

포스터는 (댓글에) 다음과 같이 썼습니다.

tcpdump가 의존하는 모든 패키지와 해당 패키지의 모든 종속성, 모든 종속성 등을 원합니다.

apt-rdepends이 작업을 수행. 참고: "rdependents"의 "r"은 "재귀적"을 의미합니다.

apt-rdepends -p tcpdump
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tcpdump
  Depends: libc6 (>= 2.7) [Installed]
  Depends: libpcap0.8 (>= 1.0.0) [Installed]
  Depends: libssl0.9.8 (>= 0.9.8m-1) [NotInstalled]
libc6
  Depends: libc-bin (= 2.11.3-4) [Installed]
  Depends: libgcc1 [Installed]
libc-bin
libgcc1
  Depends: gcc-4.4-base (= 4.4.5-8) [NotInstalled]
  Depends: libc6 (>= 2.2.5) [Installed]
gcc-4.4-base
libpcap0.8
  Depends: libc6 (>= 2.7) [Installed]
libssl0.9.8
  Depends: debconf (>= 0.5) [Installed]
  Depends: debconf-2.0 [NotInstalled]
  Depends: libc6 (>= 2.7) [Installed]
  Depends: zlib1g (>= 1:1.1.4) [Installed]
debconf
  Depends: debconf-english [NotInstalled]
  Depends: debconf-i18n [Installed]
  PreDepends: perl-base (>= 5.6.1-4) [Installed]
debconf-english
  Depends: debconf [Installed]
debconf-i18n
  Depends: debconf [Installed]
  Depends: liblocale-gettext-perl [Installed]
  Depends: libtext-charwidth-perl [Installed]
  Depends: libtext-iconv-perl [Installed]
  Depends: libtext-wrapi18n-perl [Installed]
liblocale-gettext-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  PreDepends: perl-base (>= 5.10.0-25) [Installed]
  PreDepends: perlapi-5.10.0 [NotInstalled]
perl-base
  PreDepends: dpkg (>= 1.14.20) [Installed]
  PreDepends: libc6 (>= 2.4) [Installed]
dpkg
  PreDepends: coreutils (>= 5.93-1) [Installed]
  PreDepends: libbz2-1.0 [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
  PreDepends: xz-utils [Installed]
  PreDepends: zlib1g (>= 1:1.1.4) [Installed]
coreutils
  PreDepends: libacl1 (>= 2.2.11-1) [Installed]
  PreDepends: libattr1 (>= 2.4.41-1) [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
libacl1
  Depends: libattr1 (>= 2.4.41-1) [Installed]
  Depends: libc6 (>= 2.2.5) [Installed]
libattr1
  Depends: libc6 (>= 2.2.5) [Installed]
libselinux1
  Depends: libc6 (>= 2.3.4) [Installed]
libbz2-1.0
  Depends: libc6 (>= 2.3) [Installed]
xz-utils
  Depends: libc6 (>= 2.6) [Installed]
  Depends: liblzma2 (>= 5.0.0) [NotInstalled]
liblzma2
  Depends: libc6 (>= 2.2.5) [Installed]
zlib1g
  Depends: libc6 (>= 2.2.5) [Installed]
perlapi-5.10.0
libtext-charwidth-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-iconv-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-wrapi18n-perl
  Depends: libtext-charwidth-perl [Installed]
debconf-2.0

관련 정보