Различие между apt-cache и dpkg -l


9

Я использую apt-cache pkgname для получения пакетов как

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

получить 62803 результатов

но

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

Какие причины приводят к такому огромному различию? Я предполагаю, что dpkg супер, чем apt.


2
Возможный дубликат dpkg-запроса против apt-cache
Олорин

@Olorin Я проголосовал за то, чтобы оставить этот вопрос открытым. Они хорошо продублированы, но я хочу, чтобы направление дублирования было изменено, и вместо этого dpkg-query против apt-cache был закрыт как дубликат этого вопроса.
Карел

Ответы:


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-query с заданными ему параметрами, но в настоящее время им не передаются никакие конкретные опции, чтобы использовать любую такую ​​опцию, нужно напрямую вызывать серверные части.

В отношении 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также может принимать шаблон glob в качестве аргумента и в зависимости от наличия его отсутствия показывать только установленные / настроенные пакеты или все пакеты.


2

dpkg -l показывает версии установленных пакетов (начиная с ii), удаленных (rc) и некоторых других (например, установленных, но не настроенных, см. справочную страницу).

apt-cache pkgnames показывает все доступные имена пакетов (но не версии одного пакета) в добавленных репозиториях.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.