Як я можу дізнатися, чи віртуальний пакет "встановлений" у системі Debian?


16

Деякі пакети мають Provides:заголовок. Наприклад, пакет postfixDebian Wheezy має Provides: mail-transport-agent.

Пакет, mail-transport-agentякий фізично не існує, розглядається як "віртуальний" пакет.

Як я можу знати, що на базі системи Debian, якщо даний віртуальний пакет "встановлений" (або "надається")? Чи можу я перерахувати кожен "наданий" віртуальний пакет?

Підказка : щоб перелічити кожен наявний віртуальний пакет, встановлений чи ні, виконайте:aptitude search "~v"


1
Наразі я не маю debian, але хіба хіба що інсталяція не виконає роботу?
грудня 1313

Відповіді:


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. Мені подобається пояснення @ 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 '^.'

щоб встановити, чи встановлений у вашій системі який-небудь пакет, який надає певний пакет (наприклад, поштовий транспорт-агент), використовуйте

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.