Rozróżnienie między apt-cache i dpkg -l

9

Używam apt-cache pkgname do pobierania pakietów jako

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

uzyskać 62803 wyników

ale

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

Jakie są przyczyny tak ogromnego rozróżnienia. Zakładam, że dpkg jest super niż apt.

Alice
źródło
2
Możliwy duplikat dpkg-query vs apt-cache
Olorin
@Olorin Głosowałem za pozostawieniem tego pytania otwartym. Są to duplikaty, ale chcę, aby kierunek duplikacji został odwrócony, a zamiast tego dpkg-query vs apt-cache powinno zostać zamknięte jako duplikat tego pytania.
karel

Odpowiedzi:

16

aptsłuży do zarządzania zdalnymi repozytoriami, dpkg- dla lokalnie zainstalowanych pakietów. Są spokrewnieni. aptjest z przodu do dpkg. Po uruchomieniu apt-get install packagepobiera .debplik i instaluje go za pośrednictwem dpkg. Więc liczby różnią się, ponieważ dostępnych jest wiele pakietów, ale tylko część jest zainstalowana lokalnie w twoim systemie.

apt-cachemoże wyświetlać zarówno zainstalowane, jak i niezainstalowane pakiety, ponieważ odpytuje aptpamięć podręczną - wyświetla listę tego, co jest dostępne w zdalnych repozytoriach (ta pamięć podręczna jest tym, co dostajesz, gdy to robisz apt-get update). Na przykład,

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


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

Zauważ, że istnieje inne narzędzie, które może sprawdzać listę zainstalowanych / usuniętych pakietów lokalnych, i to jest dpkg-query. Na przykład,

$ 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

Zgodnie z instrukcją dpkg

dpkg może być również używany jako interfejs do dpkg-deb (1) i dpkg-query (1). Lista obsługiwanych działań znajduje się później w sekcji DZIAŁANIA. W przypadku napotkania takiej akcji dpkg po prostu uruchamia dpkg-deb lub dpkg-query z podanymi parametrami, ale nie są do nich przekazywane żadne konkretne opcje, aby użyć takiej opcji, back-endy muszą zostać bezpośrednio wywołane.

Jeśli chodzi o dpkg-queryto, należy zauważyć, że to narzędzie koncentruje się na wyszukiwaniu w bazie danych zainstalowanych pakietów i może wyświetlać informacje w określonym formacie ( -fopcja plus -Wakcja). Na przykład,

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

Co ciekawe, baza danych dpkg utrzymuje listę pakietów, które zostały wybrane do usunięcia lub zostały w pewnym momencie usunięte . dpkg-querymoże również przyjmować wzorzec glob jako argument, aw zależności od jego braku pokaż tylko zainstalowane / skonfigurowane pakiety lub wszystkie pakiety.

Sergiy Kolodyazhnyy
źródło
2

dpkg -l pokazuje zainstalowane wersje pakietu (poczynając od ii), usunięte (rc) i niektóre inne (np. zainstalowane, ale nieskonfigurowane, patrz strona podręcznika).

apt-cache pkgnames pokazuje wszystkie dostępne nazwy pakietów (ale nie wersje tego samego pakietu) w dodanych repozytoriach.

Nyos
źródło