Não há definição formal de um metapacote. A definição informal é que um metapacote é aquele destinado apenas a ser instalado por suas dependências e não contém nenhum arquivo útil.
Você pode definir um metapacote como um pacote que não contém arquivos. Não há como determinar isso no banco de dados do pacote. Você pode usar o banco de dados de arquivos e verificar se o pacote contém apenas diretórios (muitos desses pacotes contêm alguns diretórios). De fato, a maioria dos metapacotes contém alguns arquivos em /usr/share/doc/<package name>
: um copyright
arquivo, um registro de alterações, algumas vezes mais. Aqui está uma aproximação que define um metapacote como contendo apenas arquivos /usr/share/doc/<some directory>
(e não nos subdiretórios) e nos diretórios principais:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Outra abordagem é procurar uma etiqueta de pacote com debtags
. Existem várias tags que são comumente usadas em metapacotes.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Outra abordagem é procurar pacotes com um tamanho pequeno. Cada diretório conta como 4 kB, portanto, planeje adequadamente ao escolher um limite (novamente, isso é uma aproximação).
aptitude -F '%I %p' search "~n^$package\$"
Após reflexão, pergunto-me se você quer dizer pacotes virtuais em vez de metapacotes. Pacotes virtuais, na verdade, não são pacotes, mas nomes de pacotes usados em Provides:
campos. Você pode listá-los com aptitude search '~v'
. A execução apt-cache show
em um exibe "Não é possível selecionar versões do pacote 'zcav', pois é puramente virtual". A execução aptitude show
lista os pacotes que o fornecem. Uma maneira conveniente de mostrar pacotes virtuais é apt-cache
: imprime uma linha para um pacote não virtual e potencialmente várias linhas (uma para cada provedor) para um pacote virtual - você pode saber se o pacote é virtual, mesmo que exista um único provedor porque o nome do provedor é diferente.
apt-cache -n search "^$package\$"