Einige Pakete haben einen Provides:
Header. Zum Beispiel hat das Paket postfix
auf Debian Wheezy Provides: mail-transport-agent
.
Das Paket, mail-transport-agent
das physikalisch nicht existiert, wird als "virtuelles" Paket betrachtet.
Wie kann ich auf einem Debian-basierten System wissen, ob ein bestimmtes virtuelles Paket "installiert" (oder "bereitgestellt") ist? Kann ich jedes "bereitgestellte" virtuelle Paket auflisten?
Tipp : Um alle vorhandenen virtuellen Pakete aufzulisten, die installiert sind oder nicht, gehen Sie wie folgt vor:aptitude search "~v"
Antworten:
So listen Sie Pakete auf, die Folgendes bereitstellen
mail-transport-agent
:Führen Sie dies aus,
aptitude search '~Pmail-transport-agent ~i'
um nur installierte Pakete aufzulisten (falls vorhanden).So listen Sie alle virtuellen Pakete auf, die von derzeit installierten Paketen bereitgestellt werden:
Eine Erklärung der Suchmuster finden Sie im Aptitude-Handbuch .
quelle
aptitude
. Die Erklärung von @ umläute gefällt mir allerdings.aptitude search '~Pmysql-server ~i'
das gibtmariadb-server-10.0
undmariadb-server-core-10.0
, aber wenn ich das tueaptitude search '~Rprovides:~i ~v'
, sehe ich nichtmysql-server
in der Liste ... aber ich sehevirtual-mysql-client
,virtual-mysql-client-core
,virtual-mysql-server
undvirtual-mysql-client-core
in der Liste.Das Problem hierbei ist, dass es einen subtilen Unterschied zwischen virtuellen Paketen und Paketen gibt, die von anderen Paketen bereitgestellt werden.
Der Unterschied besteht darin, dass ein Paket auch ein reales Paket bereitstellen kann , nicht nur ein virtuelles Paket.
Auf jeden Fall sucht das Folgende nach allen Paketen, die ein Paket bereitstellen , und gibt sowohl den Paketnamen als auch die darin enthaltenen Pakete aus:
Um herauszufinden, ob auf Ihrem System ein Paket installiert ist, das ein bestimmtes Paket bereitstellt (z. B. Mail-Transport-Agent), verwenden Sie
quelle
grep-available
undgrep-status
sind verfügbar, sobald Sie dasdctrl-tools
Paket installiert haben .Sie können das Vorhandensein eines bestimmten virtuellen Pakets erkennen, indem Sie
apt-cache showpkg <virtual>
eine Liste der Kandidatenpaketedpkg -l <canddate> <candidate> ...
anzeigen und anschließend den Installationsstatus der Kandidaten anzeigen.Beispielsweise:
Hier ist ein vollständiger Ausdruck:
Ich glaube
dpkg
und binapt-cache
Werkzeuge der niedrigeren Ebene alsaptitude
,grep-available
undgrep-status
. Je nach Ihren speziellen Anforderungen kann die Verwendung von Werkzeugen auf niedrigerer Ebene von Vorteil sein oder auch nicht.quelle
Sie können alle virtuellen Pakete aus der AUTORITATIVEN LISTE DER VIRTUELLEN PAKETNAMEN abrufen . Um festzustellen, ob ein virtuelles Paket installiert ist, verwende ich
dpkg -l
und die Tatsache, dass es einen Beendigungscode von 0 hat, wenn das Paket installiert ist, und einen Beendigungscode von 1, wenn es nicht installiert ist.quelle
dpkg -l mail-transport-agent
kann 0 zurückgeben, auch wenn kein aktuell installiertes Paket vorhanden ist. Ich denke, es basiert auf der Präsenz in,/var/dpkg/lib/available
aber ich bin mir nicht sicher. Ich habe geprüft, obdpkg -l foo
1 für ein Paket zurückgegeben wird, das ich noch nie installiert habe, aber 0 für ein Paket, das ich gerade gelöscht habe.