Distinção entre apt-cache e dpkg -l

9

Eu uso o apt-cache pkgname para recuperar os pacotes como

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

obter 62803 resultados

mas

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

Quais são as razões que levam a uma distinção tão grande. Presumo que o dpkg é super que o apt.

Alice
fonte
2
Possível duplicado de dpkg-query vs apt-cache
Olorin
@Olorin Votei em Deixar esta pergunta em aberto. Eles estão duplicados, mas quero que a direção da duplicação seja revertida e o dpkg-query vs apt-cache seja fechado como uma duplicata desta pergunta.
Karel

Respostas:

16

apté para gerenciar repositórios remotos, dpkg- para pacotes instalados localmente. Eles são parentes. apté front end para dpkg. Quando você executa, apt-get install packageele obtém o .debarquivo e o instala via dpkg. Portanto, os números diferem porque há muitos pacotes disponíveis, mas apenas uma fração é instalada localmente no seu sistema.

apt-cachepode mostrar pacotes instalados e não instalados, porque consulta o aptcache - listando o que está disponível em repositórios remotos (esse cache é o que você obtém quando faz apt-get update). Por exemplo,

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


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

Observe que há outra ferramenta que pode consultar a lista de pacotes locais instalados / removidos, e é isso dpkg-query. Por exemplo,

$ 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

Conforme manual do dpkg

O dpkg também pode ser usado como front-end para o dpkg-deb (1) e o dpkg-query (1). A lista de ações suportadas pode ser encontrada posteriormente na seção AÇÕES. Se alguma ação desse tipo for encontrada, o dpkg executará o dpkg-deb ou o dpkg-query com os parâmetros fornecidos, mas nenhuma opção específica atualmente seja passada a eles. Para usar qualquer opção, os back-ends precisam ser chamados diretamente.

Na medida do possível dpkg-query, deve-se notar que essa ferramenta está focada na consulta ao banco de dados de pacotes instalados e pode gerar informações em um formato específico ( -fopção mais -Wação). Por exemplo,

$ 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
---

Curiosamente, o banco de dados dpkg mantém a lista de pacotes selecionados para remoção ou que foram removidos em algum momento . dpkg-querytambém pode considerar o padrão glob como argumento e, dependendo da presença de ausência, mostrar apenas pacotes instalados / configurados ou todos os pacotes.

Sergiy Kolodyazhnyy
fonte
2

O dpkg -l mostra as versões do pacote instalado (começando com ii), as removidas (rc) e algumas outras (por exemplo, instaladas mas não configuradas, consulte a página de manual).

O apt-cache pkgnames mostra todos os nomes de pacotes disponíveis (mas não as versões do mesmo pacote) nos repositórios adicionados.

Nyos
fonte