Розмежування apt-кешу і dpkg -l


9

Я використовую apt-cache pkgname для отримання пакетів як

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

отримати 62803 результати

але

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

Які причини, які призводять до такого величезного розрізнення. Я припускаю, що dpkg - це супер, ніж підхожий.


2
Можливий дублікат dpkg-query vs apt-cache
Олорін

@Olorin Я проголосував за те, щоб залишити це питання відкритим. Вони дублікати добре, але я хочу, щоб напрямок дублювання було змінено, а dpkg-запит проти apt-кеша було закрито як дублікат цього питання.
карел

Відповіді:


16

aptпризначений для управління віддаленими сховищами, dpkg- для локально встановлених пакетів. Вони пов'язані. aptє передній кінець до dpkg. При запуску apt-get install packageвін отримує .debфайл і встановлює його через dpkg. Таким чином, цифри відрізняються тим, що доступно багато пакетів, але лише локально встановлена ​​система.

apt-cacheможе показувати як встановлені, так і не встановлені пакети, тому що він запитує aptкеш - перелік того, що доступне у віддалених сховищах (цей кеш - це те, що ви отримуєте, коли це робите 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). Список підтримуваних дій можна знайти пізніше в розділі ДІЇ. Якщо виникає будь-яка така дія, dpkg просто запускає dpkg-deb або dpkg-запит із заданими йому параметрами, але конкретні параметри їм зараз не передаються, щоб використовувати будь-який такий варіант, зворотні кінці потрібно викликати безпосередньо.

Що стосується цього 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також може приймати глобальний шаблон як аргумент, і в залежності від наявності його відсутність показують лише встановлені / налаштовані пакети або всі пакунки.


2

dpkg -l показує встановлені версії пакету (починаючи з ii), видалені (rc) та деякі інші (наприклад, встановлені, але не налаштовані, див. сторінку).

apt-cache pkgnames показує вам усі доступні назви пакунків (але не версії того ж пакету) у доданих сховищах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.