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


16

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

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

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

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


1
나는 현재 데비안을 가지고 있지 않지만 드라이 런 설치는 그 일을하지 않습니까?
jthill

답변:


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'

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


is가 standard를 사용하므로이 답변을 수락하십시오 aptitude. 나는 @ umläute의 설명을 좋아한다.
Totor

데비안 제시에, 난 그냥 시도 aptitude search '~Pmysql-server ~i'주는 mariadb-server-10.0mariadb-server-core-10.0하지만 내가 할 때 aptitude search '~Rprovides:~i ~v', 나는 볼 수 없습니다 mysql-server하지만, 내가 볼 않는 ... 목록에서 virtual-mysql-client, virtual-mysql-client-core, virtual-mysql-servervirtual-mysql-client-core목록에.
Totor

1
@figtrap 더 빠르지 만 확실 하지 않습니다 .
Gilles 'SO- 악의를 그만두십시오'

10

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

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

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

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

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

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

3
참고 : 명령 grep-available및 패키지 grep-status를 설치하면 사용할 수 있습니다 dctrl-tools.
Totor

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

가상 패키지 이름의 AUTHORITATIVE LIST 에서 모든 가상 패키지를 얻을 수 있습니다 . 가상 패키지가 설치되어 있는지 확인하려면 패키지를 설치 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을 반환 하는지 확인했습니다 .
Gilles 'SO- 악마 중지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.