Unterscheidung zwischen apt-cache und dpkg -l

9

Ich benutze apt-cache pkgname, um die Pakete als abzurufen

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

62803 Ergebnisse erhalten

aber

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

Was sind die Gründe, die zu einer so großen Unterscheidung führen? Ich nehme an, dass dpkg super als apt ist.

Alice
quelle
2
Mögliches Duplikat von dpkg-query vs apt-cache
Olorin
@Olorin Ich habe dafür gestimmt, diese Frage offen zu lassen. Sie sind Duplikate in Ordnung, aber ich möchte, dass die Richtung der Duplizierung umgekehrt wird und dpkg-query vs apt-cache stattdessen als Duplikat dieser Frage geschlossen wird.
Karel

Antworten:

16

aptdient zum Verwalten von Remote-Repositorys, dpkg- für lokal installierte Pakete. Sie sind verwandt. aptist Frontend zu dpkg. Wenn Sie es ausführen apt-get install package, wird die .debDatei abgerufen und über installiert dpkg. Die Zahlen unterscheiden sich also, da viele Pakete verfügbar sind, aber nur ein Bruchteil lokal auf Ihrem System installiert ist.

apt-cachekann sowohl installierte als auch nicht installierte Pakete anzeigen, da der aptCache abgefragt wird - eine Auflistung der in Remote-Repositorys verfügbaren Elemente (dieser Cache ist das, was Sie erhalten, wenn Sie dies tun apt-get update). Zum Beispiel,

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


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

Beachten Sie, dass es ein anderes Tool gibt, das die Liste der installierten / entfernten lokalen Pakete abfragen kann dpkg-query. Zum Beispiel,

$ 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

Gemäß dpkg Handbuch

dpkg kann auch als Frontend für dpkg-deb (1) und dpkg-query (1) verwendet werden. Die Liste der unterstützten Aktionen finden Sie später im Abschnitt AKTIONEN. Wenn eine solche Aktion auftritt, führt dpkg nur dpkg-deb oder dpkg-query mit den ihm angegebenen Parametern aus, es werden jedoch derzeit keine spezifischen Optionen an sie übergeben. Um eine solche Option zu verwenden, müssen die Back-Ends direkt aufgerufen werden.

In dpkg-querydiesem Fall ist zu beachten, dass sich dieses Tool auf die Abfrage der Datenbank installierter Pakete konzentriert und Informationen in einem bestimmten Format ausgeben kann ( -fOption plus -WAktion). Zum Beispiel,

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

Interessanterweise enthält die dpkg-Datenbank eine Liste der Pakete, die zum Entfernen ausgewählt wurden oder zu einem bestimmten Zeitpunkt entfernt wurden . dpkg-querykann auch das Glob-Muster als Argument verwenden und je nach Vorhandensein des Musters nur installierte / konfigurierte Pakete oder alle Pakete anzeigen.

Sergiy Kolodyazhnyy
quelle
2

dpkg -l zeigt Ihre installierten Paketversionen (beginnend mit ii), entfernte (rc) und einige andere (z. B. installiert, aber nicht konfiguriert, siehe Manpage).

apt-cache pkgnames zeigt Ihnen alle verfügbaren Paketnamen (jedoch nicht Versionen desselben Pakets) in den hinzugefügten Repositorys.

Nyos
quelle