Офіційного визначення метапакету немає. Неофіційне визначення полягає в тому, що метапакет - це той, який призначений тільки для встановлення залежностей і не містить власного корисного файлу.
Ви можете визначити метапакет як пакет, який не містить файлу. Неможливо це визначити з бази даних пакетів. Ви можете використовувати файлову базу даних і переконатися, що пакет містить лише каталоги (багато таких пакетів містять кілька каталогів). Насправді більшість метапакетів містять у собі декілька файлів /usr/share/doc/<package name>
: copyright
файл, журнал змін, іноді ще кілька. Ось наближення, яке визначає метапакет як такий, що містить лише файли в /usr/share/doc/<some directory>
(а не у підкаталогах цього) та провідних каталогах:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Ще один підхід - шукати тег пакета за допомогою debtags
. Існує кілька тегів, які зазвичай використовуються в метапакетах.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Ще один підхід - пошук пакетів невеликого розміру. Кожен каталог рахується як 4 кБ, тому плануйте відповідно підбір порогу (знову ж таки, це наближення).
aptitude -F '%I %p' search "~n^$package\$"
Замислюючись, мені цікаво, чи ви маєте на увазі віртуальні пакунки, а не метапакети. Віртуальні пакети насправді не пакети, а назви пакетів, що використовуються в Provides:
полях. Ви можете перелічити їх aptitude search '~v'
. Запуск apt-cache show
на одному дисплеї "Неможливо вибрати версії з пакету" zcav ", оскільки це чисто віртуально". Біг aptitude show
перераховує пакети, які його надають. Зручним способом показу віртуальних пакетів є apt-cache
: виводить один рядок для невіртуального пакета та потенційно кілька рядків (по одному для кожного постачальника) для віртуального пакету - ви можете сказати, чи пакет віртуальний, навіть якщо є один постачальник адже назва постачальника різна.
apt-cache -n search "^$package\$"