Distinction entre apt-cache et dpkg -l

9

J'utilise apt-cache pkgname pour récupérer les packages en tant que

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

obtenir 62803 résultats

mais

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

Quelles sont les raisons qui conduisent à une telle distinction. Je suppose que dpkg est super qu'apt.

Alice
la source
2
Duplication possible de dpkg-query vs apt-cache
Olorin
@Olorin J'ai voté pour laisser cette question ouverte. Ce sont des doublons, mais je veux que la direction de la duplication soit inversée et que dpkg-query vs apt-cache soit fermé en tant que doublon de cette question.
karel

Réponses:

16

aptsert à gérer les référentiels distants, dpkg- pour les packages installés localement. Ils sont liés. aptest l'extrémité avant dpkg. Lorsque vous l'exécutez, apt-get install packageil obtient le .debfichier et l'installe via dpkg. Les nombres diffèrent donc car de nombreux packages sont disponibles, mais seule une fraction est installée localement sur votre système.

apt-cachepeut afficher les packages installés et non installés, car il interroge le aptcache - liste de ce qui est disponible dans les référentiels distants (ce cache est ce que vous obtenez lorsque vous le faites apt-get update). Par exemple,

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


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

Notez qu'il existe un autre outil qui peut interroger la liste des packages locaux installés / supprimés, et c'est dpkg-query. Par exemple,

$ 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

Selon le manuel du dpkg

dpkg peut également être utilisé comme interface pour dpkg-deb (1) et dpkg-query (1). La liste des actions prises en charge se trouve plus loin dans la section ACTIONS. Si une telle action est rencontrée, dpkg exécute simplement dpkg-deb ou dpkg-query avec les paramètres qui lui sont donnés, mais aucune option spécifique ne leur est actuellement transmise, pour utiliser une telle option, les back-ends doivent être appelés directement.

En ce qui concerne dpkg-query, il convient de noter que cet outil est axé sur l'interrogation de la base de données des packages installés et peut produire des informations dans un format particulier ( -foption plus -Waction). Par exemple,

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

Chose intéressante, la base de données dpkg conserve la liste des packages sélectionnés pour être supprimés ou qui ont été supprimés à un moment donné . dpkg-querypeut également prendre le modèle glob comme argument et, selon sa présence ou son absence, afficher uniquement les packages installés / configurés ou tous les packages.

Sergiy Kolodyazhnyy
la source
2

dpkg -l affiche les versions de vos packages installés (en commençant par ii), celles supprimées (rc) et quelques autres (par exemple installées mais non configurées, voir la page de manuel).

apt-cache pkgnames vous montre tous les noms de packages disponibles (mais pas les versions du même package) dans les référentiels ajoutés.

Nyos
la source