Es gibt keine formale Definition eines Metapakets. Die informelle Definition ist, dass ein Metapaket nur für seine Abhängigkeiten installiert werden soll und keine eigene nützliche Datei enthält.
Sie können ein Metapaket als Paket definieren, das keine Datei enthält. Es gibt keine Möglichkeit, dies aus der Paketdatenbank zu ermitteln. Sie können die Dateidatenbank verwenden und überprüfen, ob das Paket nur Verzeichnisse enthält (viele solcher Pakete enthalten einige Verzeichnisse). Tatsächlich enthalten die meisten Metapakete einige Dateien in /usr/share/doc/<package name>
: eine copyright
Datei, ein Änderungsprotokoll, manchmal einige weitere. Hier ist eine Annäherung, die ein Metapaket so definiert, dass es nur Dateien in /usr/share/doc/<some directory>
(nicht in Unterverzeichnissen davon) und den führenden Verzeichnissen enthält:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Ein anderer Ansatz besteht darin, nach einem Paket-Tag mit zu suchen debtags
. Es gibt mehrere Tags, die häufig für Metapakete verwendet werden.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Ein anderer Ansatz besteht darin, nach Paketen mit einer geringen Größe zu suchen. Jedes Verzeichnis hat eine Größe von 4 kB. Planen Sie daher bei der Auswahl eines Schwellenwerts entsprechend (auch dies ist eine Annäherung).
aptitude -F '%I %p' search "~n^$package\$"
Nach dem Nachdenken frage ich mich, ob Sie eher virtuelle Pakete als Metapakete meinen. Virtuelle Pakete sind eigentlich keine Pakete, sondern in Provides:
Feldern verwendete Paketnamen . Sie können sie mit auflisten aptitude search '~v'
. Bei der apt-cache show
Ausführung auf einem wird angezeigt, dass "Versionen aus dem Paket" zcav "nicht ausgewählt werden können, da es sich um ein rein virtuelles Paket handelt". Running aptitude show
listet die Pakete auf, die es bereitstellen. Eine bequeme Möglichkeit, virtuelle Pakete apt-cache
anzuzeigen, besteht darin, eine Zeile für ein nicht virtuelles Paket und möglicherweise mehrere Zeilen (eine für jeden Anbieter) für ein virtuelles Paket zu drucken. Sie können feststellen, ob das Paket virtuell ist, selbst wenn es einen einzelnen Anbieter gibt weil der Name des Anbieters unterschiedlich ist.
apt-cache -n search "^$package\$"