Já existe o comando apt-cache dumpavail
, que listará todos os pacotes disponíveis de todos os repositórios ativados. Nos bastidores, ele realmente lê arquivos armazenados no diretório /var/lib/apt/lists/
(eu fiz strace
do comando, e é isso que a saída mostra). Meu palpite é que o Gnome Software analisa esses mesmos arquivos e os organiza em categorias.
O problema é que os dados reais têm linhas que começam com Package:
para nomes de pacotes e Section:
a que pertencem, mas Section:
linhas não são organizadas exatamente da mesma forma que no Software Gnome. No entanto, com um pouco de magia de linha de comando, podemos chegar perto de algo assim. O que eu proponho é uma função
filter_sections()
{
apt-cache dumpavail | \
awk -v SEARCH="$@" '/^Package:/{ PKG=$0 }\
/Section:/ && $0~SEARCH {printf PKG" "$0"\n"}'
}
Com essa função, podemos listar todos os pacotes por seções, por exemplo:
$ filter_sections web | head
Package: apache2 Section: web
Package: awstats Section: web
Package: curl Section: web
Package: heat-api Section: web
Package: heat-api-cfn Section: web
Package: heat-api-cloudwatch Section: web
Package: heat-common Section: web
Package: heat-engine Section: web
Package: javascript-common Section: web
Package: libapache2-mod-apparmor Section: web
O código em si é bem simples: passamos a saída de apt-cache dumpavail
para awk
, que armazena cada nome de pacote em um varialbe, e se a linha Section:
também contém uma string que estamos combinando, imprima o nome do pacote e a seção.
Quanto a listar as seções em si, também é bastante fácil
apt-cache dumpavail | awk '/Section:/' | sort | uniq
O que também é bom nessa abordagem é que alguns dos Sections
mencionam a qual repositório o pacote pertence, por exemplo, universe/python
ou multiverse/web
. A função, no entanto, irá procurar por todos e por eles, mas se desejar, podemos sempre filtrar com awk
ainda mais