데비안 시스템에 가상 패키지가 설치되어 있는지 어떻게 알 수 있습니까? 가상 패키지가

일부 패키지에는 Provides:헤더가 있습니다. 예를 들어, postfixDebian Wheezy 의 패키지 는 Provides: mail-transport-agent입니다.

mail-transport-agent물리적으로 존재하지 않는 패키지 는 “가상”패키지로 간주됩니다.

주어진 가상 패키지가 “설치된”(또는 “제공된”) 데비안 기반 시스템에서 어떻게 알 수 있습니까? 모든 “제공된”가상 패키지를 나열 할 수 있습니까?

힌트 : 설치된 모든 기존 가상 패키지를 나열하려면 다음을 수행하십시오.aptitude search "~v"



답변

다음을 제공하는 패키지를 나열하려면 다음을 수행하십시오 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'

검색 패턴에 대한 설명은 적성 매뉴얼 을 참조하십시오 .


답변

여기서 문제는 가상 패키지와 다른 패키지에서 제공 하는 패키지 간에 미묘한 차이가 있다는 것입니다 .

차이점은 패키지가 가상 패키지 뿐만 아니라 실제 패키지도 제공 있다는 입니다.

어쨌든 다음은 패키지를 제공 하는 모든 패키지를 검색 하고 패키지 이름과 패키지를 모두 인쇄합니다.

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

특정 패키지를 제공하는 패키지가 시스템에 설치되어 있는지 확인하려면 (예 : 메일 전송 에이전트)

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

답변

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. 특정 요구 사항에 따라 낮은 수준의 도구를 사용하면 도움이 될 수도 있고 아닐 수도 있습니다.


답변

가상 패키지 이름의 AUTHORITATIVE LIST 에서 모든 가상 패키지를 얻을 수 있습니다 . 가상 패키지가 설치되어 있는지 확인하려면 패키지를 설치 dpkg -l하면 종료 코드가 0이고 설치되지 않은 경우 종료 코드가 1이라는 사실을 사용합니다.

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