deb 패키지에 대한 종속성 목록을 확인하는 방법


93

deb 패키지에 대한 종속성 목록을 확인하는 방법 Ubuntu 11.10을 실행 중이며에서 모든 deb 패키지를 백업했습니다 var/cache/apt/archives. PC를 포맷하고 선택한 응용 프로그램 만 다시 설치하고 싶습니다. 또한 설치된 패키지 및 종속성 목록을 얻는 방법은 무엇입니까?



설치된 패키지의 전체 목록을 보려면dpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

답변:


72

dpkg방법 외에도 리포지토리에서 패키지의 종속성을 확인할 수 있습니다.

apt-cache depends package-name

편집 @Tino의 추천으로 업데이트되었습니다. @Tigran의 의견은 더 이상 적용되지 않습니다.


3
참고 : 패키지가 이미 설치되어있는 경우에만 작동합니다.
Tigran Saluev

@TigranSaluev dpkg -I package설치된 패키지에서만 작동합니다. apt-cache당신이 한 후에 알려진 모든 패키지에 대해 작동합니다 apt-get update.
Tino

1
apt-cache depends packageshowpkg경우 종속성이 권장 사항인지 충돌인지 등을 알 수 없으므로 더 나은 방법 이므로 약간 수수께끼입니다. 않는 스크립트 depends와 함께 showpkg참조 unix.stackexchange.com/a/362866/23450
티노

100

패키지에 대한 모든 정보가 표시됩니다.

dpkg -I package.deb

우분투 14.04에서는 더 이상 작동하지 않습니다.dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson

@ CraigS.Anderson 14.04를 실행하면 제 경우에는 완벽하게 작동합니다. 허용되는 답변 IMHO 여야합니다.
magic_al

/var/cache/apt/archives/패키지 이름 앞에 두고 탭 완성을 사용하여 버전이 포함 된 전체 패키지 이름을 찾으십시오 (예 :) dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
의존성 정보가 표시되지 않음
Nick

로 패키지를 다시 설치하지 않고도 패키지를 얻을 수 있다고 덧붙일 수 있습니다 sudo apt-get install --reinstall --download-only [package name].
Karl Richter

2

apt-cache depends [Package-Name]잘 작동합니다. .deb소스 목록 외부 에서 패키지 를 소싱하는 경우 apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]오래된 정보가 표시되거나 실제 설치된 패키지와 동기화되지 않을 수 있으므로이 dpkg -I [Package-Name]경우 가장 잘 작동합니다.


2

14.04 이상 :

dpkg-I더 이상 이 없으며 dpkg-deb종속성을 포함한 패키지 정보를 표시하는 데 사용해야 합니다.

dpkg-deb -I package.deb

1
안녕하세요 Fabby, dpkg에는 현재 -I 옵션이 없습니다. 우분투 12.04 및 16.04에서 테스트되었습니다. 대신 dpkg-deb를 사용해야합니다.
Rup Narayan

댓글이 취소되었습니다. 답이 명확 해지고
투표 됨

0

다음은 부주의 한 것으로, dpkg -I종속 항목을 목록으로 가져 오기 위해 출력 할 수있는 사후 처리를 포함하지 않을 수 있습니다 .

컴퓨터를 위해 응축

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

인간을 위해 확장 :

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

이것은 'foo.deb'에 의존하고 아직 설치되지 않은 패키지를 반영합니다. dpkg -I foo.deb | i의 경우 $ (awk -F ',' '/에 따라 다름 : / {gsub (/ : /, ","); for (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ( "% s \ n", $ (i));}} '); dpkg -s $ i &> / dev / null || 에코 $ i; 완료 | tr '\ n' ''
Gregory Burd

@GregoryBurd, 내 답변 / psot를 자유롭게 편집하십시오. 이런 이유로 커뮤니티 위키로 게시했습니다 ^ u ^
ThorSummoner

elasticsearch에서이 명령을 실행하면이 명령이 발생 libc6\nadduser\n Installed-Size\n합니다. 즉, Depends 줄보다 더 일치하는 것 같습니다.
Jason R. Coombs

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.