Answers:
列出提供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手册。
aptitude
。我喜欢@umläute的解释。
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
在列表中。
这里的问题是虚拟软件包与其他软件包提供的软件包之间存在细微的差别。
不同的是,一个包可以提供一个真正的包以及,不仅是一个虚拟包。
无论如何,以下内容将搜索提供软件包的所有软件包,并打印软件包名称和它提供的软件包:
grep-available -sPackage -sProvides -FProvides -e '^.'
查找系统上是否安装了提供给定软件包的任何软件包(例如mail-transport-agent),请使用
grep-status -sPackage -sProvides -FProvides "mail-transport-agent"
grep-available
和grep-status
在安装dctrl-tools
软件包后可用。
您可以通过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
。根据您的特定要求,使用较低级别的工具可能不会有所好处。
您可以从虚拟软件包名称的权威列表中获取所有虚拟软件包。至于确定是否安装了虚拟软件包,我使用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。