Как я могу узнать, установлен ли виртуальный пакет в системе Debian?


16

Некоторые пакеты имеют Provides:заголовок. Например, пакет postfixна Debian Wheezy имеет Provides: mail-transport-agent.

Пакет, mail-transport-agentкоторый не существует физически, считается «виртуальным» пакетом.

Как я могу узнать в системе на основе Debian, установлен ли данный виртуальный пакет (или «предоставлен»)? Могу ли я перечислить каждый «предоставленный» виртуальный пакет?

Подсказка : чтобы получить список всех существующих виртуальных пакетов, установленных или нет, выполните:aptitude search "~v"


1
У меня нет Debian в данный момент, но разве не будет работать пробная установка?
до

Ответы:


15

Для просмотра списка пакетов mail-transport-agent:

$ aptitude search '~Pmail-transport-agent'
p   citadel-mta                     - complete and feature-rich groupware server
p   courier-mta                     - Courier mail server - ESMTP daemon        
p   dma                             - lightweight mail transport agent          
p   esmtp-run                       - user configurable relay-only MTA - the reg
p   exim4-daemon-heavy              - Exim MTA (v4) daemon with extended feature
p   exim4-daemon-light              - lightweight Exim MTA (v4) daemon          
p   masqmail                        - mail transport agent for intermittently co
p   msmtp-mta                       - light SMTP client with support for server 
p   nullmailer                      - simple relay-only mail transport agent    
i   postfix                         - High-performance mail transport agent     
p   sendmail-bin                    - powerful, efficient, and scalable Mail Tra
p   ssmtp                           - extremely simple MTA to get mail off the s
p   xmail                           - advanced, fast and reliable ESMTP/POP3 mai

Сделать это, aptitude search '~Pmail-transport-agent ~i'чтобы только список установленных пакетов (если таковые имеются).

Чтобы просмотреть все виртуальные пакеты, предоставляемые в настоящее время установленными пакетами:

aptitude search '~Rprovides:~i ~v'

Смотрите руководство aptitude для объяснения шаблонов поиска.


Принимая этот ответ, потому что он использует стандартные aptitude. Мне нравится объяснение @ umläute, хотя.
Тотор

В Debian Jessie, я просто попытался aptitude search '~Pmysql-server ~i'что дает mariadb-server-10.0и mariadb-server-core-10.0, но когда я делаю aptitude search '~Rprovides:~i ~v', я не вижу mysql-serverв списке ... Тем не менее, я вижу virtual-mysql-client, virtual-mysql-client-core, virtual-mysql-serverи virtual-mysql-client-coreв списке.
Тотор


10

проблема здесь в том, что есть небольшая разница между виртуальными пакетами и предоставляемыми пакетами другими пакетами .

разница в том, что пакет может обеспечить более реальный пакет, а не только виртуальный пакет.

в любом случае, следующий запрос будет искать все пакеты, которые предоставляют пакет, и печатать как имя пакета, так и пакеты, которые он предоставляет:

grep-available -sPackage  -sProvides -FProvides -e '^.'

чтобы узнать, установлен ли какой-либо пакет в вашей системе, который предоставляет данный (например, mail-transport-agent), используйте

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"

3
Примечание: команды grep-availableи grep-statusдоступны , как только вы установили dctrl-tools пакет.
Тотор

1

Вы можете обнаружить присутствие данного виртуального пакета, используя apt-cache showpkg <virtual>для отображения списка пакетов-кандидатов, а затем dpkg -l <canddate> <candidate> ...для отображения состояния установки кандидатов.

Например:

$ apt-cache showpkg awk
$ dpkg -l original-awk mawk gawk

Вот полная распечатка:

$ apt-cache showpkg awk
Package: awk
Versions: 

Reverse Depends: 
  base-files,awk
  base-files,awk
Dependencies: 
Provides: 
Reverse Provides: 
mawk:i386 1.3.3-17ubuntu2
gawk:i386 1:4.0.1+dfsg-2.1ubuntu2
original-awk 2012-12-20-1
mawk 1.3.3-17ubuntu2
gawk 1:4.0.1+dfsg-2.1ubuntu2

$ dpkg -l original-awk mawk gawk
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  gawk           1:4.0.1+dfsg amd64        GNU awk, a pattern scanning and p
ii  mawk           1.3.3-17ubun amd64        a pattern scanning and text proce
dpkg-query: no packages found matching original-awk

Я считаю, dpkgи apt-cacheинструменты более низкого уровня, чем aptitude, grep-availableи grep-status. Использование инструментов более низкого уровня может или не может быть преимуществом, в зависимости от ваших конкретных требований.


-1

Вы можете получить все виртуальные пакеты из АВТОРИТИЧЕСКОГО СПИСКА ВИРТУАЛЬНЫХ ИМ ПАКЕТОВ . Что касается определения, установлен ли виртуальный пакет, я использую его dpkg -lи тот факт, что он имеет код выхода 0, если пакет установлен, и код выхода 1, если он не установлен.

dpkg -l mail-transport-agent &> /dev/null; echo $?

Нет, это не работает dpkg -l mail-transport-agentможет вернуть 0, даже если пакет, предоставляющий его, в данный момент не установлен. Я думаю, что это основано на присутствии, /var/dpkg/lib/availableно я не уверен. Я проверил, что dpkg -l fooвозвращает 1 для пакета, который я никогда не устанавливал, но 0 для пакета, который я только что удалил.
Жиль "ТАК - перестань быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.