일부 패키지에는 Provides:
헤더가 있습니다. 예를 들어, postfix
Debian 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 $?