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

Это - сырой ответ, и я надеюсь, что кто-то еще добивается большего успеха, но если никакая другая поверхность идей, присоединение gdb и не вынуждает процесс сделать несколько syscalls:

(gdb) attach 12345 # target PID
(gdb) p close(2)
(gdb) p open("errfile", O_WRONLY)
(gdb) c
16
23.11.2013, 00:07
4 ответа

Перечислять обеспечение пакетов 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'

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

15
27.01.2020, 19:48
  • 1
    Принятие этого ответа, потому что стандарт использования aptitude. Мне нравится explaination @umläute все же. –  Totor 31.12.2013, 16:41
  • 2
    На 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 в списке. –  Totor 09.06.2016, 18:14

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

dpkg -l mail-transport-agent &> /dev/null; echo $?
-1
27.01.2020, 19:48
  • 1
    Нет, это не работает. dpkg -l mail-transport-agent может возвратиться 0, даже если нет никакого пакета, если это, который в настоящее время устанавливается. Я думаю, что это основано на присутствии в /var/dpkg/lib/available но я не уверен. Я действительно проверял это dpkg -l foo возвраты 1 для пакета, который я никогда не устанавливал, но 0 для пакета, которого я просто произвел чистку. –  Gilles 'SO- stop being evil' 17.10.2013, 13:17

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

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

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

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

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

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"
10
27.01.2020, 19:48
  • 1
    Отметьте: команды grep-available и grep-status доступны, после того как Вы установили dctrl-tools пакет. –  Totor 17.10.2013, 17:17

Вы можете определить наличие данного виртуального пакета, используя 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
27.01.2020, 19:48

Теги

Похожие вопросы