Nie ma formalnej definicji metapakietu. Nieformalna definicja jest taka, że metapakiet to taki, który jest przeznaczony wyłącznie do zainstalowania ze względu na jego zależności i nie zawiera własnego przydatnego pliku.
Można zdefiniować metapakiet jako pakiet, który nie zawiera pliku. Nie ma możliwości ustalenia tego na podstawie bazy danych pakietu. Możesz użyć bazy danych plików i sprawdzić, czy pakiet zawiera tylko katalogi (wiele takich pakietów zawiera kilka katalogów). W rzeczywistości większość metapakietów zawiera kilka plików /usr/share/doc/<package name>
: copyright
plik, dziennik zmian, czasem kilka innych. Oto przybliżenie, które definiuje metapakiet jako zawierający tylko pliki w /usr/share/doc/<some directory>
(nie w jego podkatalogach) i wiodące katalogi:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Innym podejściem jest poszukiwanie znacznika pakietu z debtags
. Istnieje kilka tagów, które są powszechnie używane w metapakietach.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Innym podejściem jest poszukiwanie pakietów o małym rozmiarze. Każdy katalog liczy się jako 4 kB, więc planuj odpowiednio przy wybieraniu progu (ponownie, jest to przybliżenie).
aptitude -F '%I %p' search "~n^$package\$"
Po zastanowieniu zastanawiam się, czy masz na myśli pakiety wirtualne, a nie metapakiety. Pakiety wirtualne w rzeczywistości nie są pakietami, ale nazwami pakietów używanymi w Provides:
polach. Możesz je wymienić aptitude search '~v'
. Uruchomiony apt-cache show
na jednym wyświetlaczy „Nie można wybrać wersje z pakietu«zcav»jak to jest czysto wirtualny”. Uruchamianie aptitude show
wyświetla listę pakietów, które to zapewniają. Wygodnym sposobem wyświetlania wirtualnych pakietów jest apt-cache
: drukuje jedną linię dla pakietu nie-wirtualnego i potencjalnie wiele linii (jedna dla każdego dostawcy) dla pakietu wirtualnego - możesz stwierdzić, czy pakiet jest wirtualny, nawet jeśli jest jeden dostawca ponieważ nazwa dostawcy jest inna.
apt-cache -n search "^$package\$"