apt-cache와 dpkg -l의 구별


9

apt-cache pkgname을 사용하여 패키지를 다음과 같이 검색합니다.

me@host:~$ apt-cache pkgnames | wc -l
62803

62803 결과 얻기

그러나

me@host:~$ dpkg -l | wc -l
2336

그렇게 큰 차이를 일으키는 이유는 무엇입니까? 나는 dpkg가 apt보다 super라고 가정합니다.



@Olorin 나는이 질문을 공개적으로 투표했습니다. 그것들은 복제본이지만, 복제 방향을 반대로하고 dpkg-query 대 apt-cache 를이 질문의 복제본으로 대신 닫고 싶습니다 .
karel

답변:


16

aptdpkg로컬로 설치된 패키지의 경우 원격 리포지토리를 관리하기 위한 것입니다. 그들은 관련이 있습니다. apt의 프런트 엔드 dpkg입니다. 당신이 apt-get install package그것을 실행할 때 .deb파일 을 얻고 를 통해 설치합니다 dpkg. 따라서 사용할 수있는 패키지가 많기 때문에 숫자가 다르지만 시스템에 부분적으로 만 설치됩니다.

apt-cacheapt원격 저장소에서 사용 가능한 항목 의 캐시 목록을 쿼리하므로 설치된 패키지와 설치되지 않은 패키지를 모두 표시 할 수 있습니다 (해당 캐시는 사용자가 수행하는 작업 apt-get update). 예를 들어

$ apt-cache policy terminator
terminator:
  Installed: (none)
  Candidate: 1.91-1


$ dpkg -l terminator
dpkg-query: no packages found matching terminator

설치 / 제거 된 로컬 패키지 목록을 쿼리 할 수있는 다른 도구가 있습니다 dpkg-query. 예를 들어

$ dpkg-query -l 'libc6'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

$ dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

당으로 dpkg를 수동

dpkg는 dpkg-deb (1) 및 dpkg-query (1)의 프런트 엔드로 사용할 수도 있습니다. 지원되는 작업 목록은 나중에 ACTIONS 섹션에서 찾을 수 있습니다. 이러한 작업이 발생하면 dpkg는 지정된 매개 변수를 사용하여 dpkg-deb 또는 dpkg-query를 실행하지만 현재 특정 옵션이 전달되지 않으므로 이러한 옵션을 사용하려면 백엔드를 직접 호출해야합니다.

지금까지처럼 dpkg-query간다,이 도구는 설치된 패키지의 데이터베이스 쿼리에 초점을 맞추고, 특히 형식 (에서 출력 할 수 정보가되는 것은 아니다 -f옵션을 더한 -W행동). 예를 들어

$ dpkg-query -W -f='PACK:${Package}\nARCH:${Architecture}\nSTAT:${Status}\n---\n' libc6
PACK:libc6
ARCH:amd64
STAT:install ok installed
---
PACK:libc6
ARCH:i386
STAT:install ok installed
---

흥미롭게도 dpkg 데이터베이스 는 제거 하도록 선택 되었거나 어느 시점에서 제거 된 패키지 목록을 유지 관리 합니다 . dpkg-query또한 glob 패턴을 인수로 사용할 수 있으며, 존재 여부에 따라 설치된 / 구성된 패키지 또는 모든 패키지 만 표시합니다.


2

dpkg -l은 설치된 패키지 버전 (ii로 시작), 제거 된 버전 (rc) 및 기타 버전 (예 : 설치되었지만 구성되지 않은 맨 페이지 참조)을 보여줍니다.

apt-cache pkgnames는 추가 된 리포지토리에서 사용 가능한 모든 패키지 이름 (동일한 패키지 버전은 아님)을 표시합니다.

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