Como posso obter uma lista de todos os pacotes em uma seção do repositório na linha de comando?

13

No Synaptic, pode-se listar pacotes por seção. Por exemplo, na imagem abaixo, todos os pacotes da seção "Amateur Radio (universe)" estão listados.

Como posso obter essa lista (editar: com a descrição do pacote) na linha de comando?

Eu preciso de uma lista bruta; uma aplicação de terminal como aptitudenão vai fazer.

sináptica

Serge Stroobandt
fonte
shell de pesquisa do apt-cache
Panther
@ bodhi.zazen que é uma boa sugestão, mas não pesquisa apenas a Seção #
Steven Penny

Respostas:

5

Bem, embora você diga que não deseja usar o aptitude por causa da saída, você precisa saber que pode modificá-lo para obter o que gosta:

aptitude -F'|%p|%d|' search '?section(hamradio)'

O truque está no -Fcomutador que modifica o formato de saída. %psignifica pacote. Isso também é gerado quando o pacote possui várias arquiteturas (por exemplo, amd64 vs i386) e %dque gera a descrição. Você pode personalizar ainda mais o padrão de pesquisa para, por exemplo, pacotes não instalados:

aptitude -F'|%p|%d|' search '?section(hamradio) !~i'

onde ~isignifica instalado e o !é um não, então ele lê como "não (!) instalado (~ i)" ou se você deseja apenas os que estão disponíveis para sua arquitetura:

aptitude -F'|%p|%d|' search '?section(hamradio) ~r native'

~rsendo ?architecture()que corresponde à arquitetura do pacote e nativeque lista apenas aqueles que possuem a mesma arquitetura que o sistema, o equivalente a dpkg --print-architecture.

A linha anterior pode, portanto, ser escrita de forma ainda mais concisa como:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'
Braiam
fonte
Muito elegante, especialmente com -F'|%p|%d|'. No entanto, seria possível não listar os :i386pacotes adicionando !-expression à searchstring?
Serge Stroobandt 28/05
1
@GinGordon sim, basta adicionar ~r nativeaos termos de pesquisa. ~rsendo ?architectureque correspondem à arquitetura do pacote e nativeque listam apenas aqueles que possuem a mesma arquitetura que o sistema, o equivalente a dpkg --print-architecture. BTW, você queria a lista com a descrição do pacote?
Braiam 28/05
Ótimo! E sim, editei a pergunta para incluir a descrição do pacote. Por favor, edite sua resposta de forma adequada e você receberá meu voto de melhor resposta por ser o mais conciso.
Serge Stroobandt 28/05
@GinGordon confira.
Braiam 28/05
1
@GinGordon se você instalar o aptitude-docpacote e navegar /usr/share/doc/aptitude/html/en/index.htmlcom o navegador, encontrará file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmltodas as vantagens desagradáveis.
Braiam 28/05
11

Verifique se o pacote dctrl-toolsInstale dctrl-tools está instalado. Ele fornece comandos úteis para pesquisar nas listas de pacotes apt e dpkg. Para obter uma descrição completa de todos os pacotes de uma seção específica que é instalável com o apt, execute

grep-aptavail -F Section hamradio

Isso mostrará os metadados completos do pacote para cada pacote na hamradioseção. Se tudo o que você deseja ver são os nomes dos pacotes, execute

grep-aptavail -n -F Section -s Package hamradio

Se o seu sistema estiver configurado para multiarch, o mesmo pacote poderá aparecer mais de uma vez nesta lista se ele for criado para mais de uma arquitetura. Portanto, para refinar ainda mais isso, use

grep-aptavail -n -F Section -s Package hamradio | sort | uniq

ou

grep-aptavail -n -F Section -s Package hamradio | sort -u

para classificar a lista de pacotes e remover pacotes duplicados com o mesmo nome.

Observe que você precisará usar o nome real da seção, que é diferente do nome "legível por humanos" que o Synaptic mostra em sua GUI. Por exemplo, as pesquisas acima usam o nome da seção em hamradiovez da string "Amateur Radio" mostrada no Synaptic.

Veja a página de manual do grep-aptavail para uma descrição completa de todas as opções e alguns exemplos.

Mike Miller
fonte
3

Mais campos em uma única linha, com separador arbitrário

O one-liner a seguir imprimirá todos os nomes de pacotes exclusivos de uma seção do repositório, juntamente com sua descrição, cada um em uma única linha. Todos os campos são separados por um caractere de barra vertical , ou seja, prontos para conversão em uma tabela de barra horizontal Markdown . A tabela resultante pode ser encontrada no meu site.

grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u
Serge Stroobandt
fonte
2

Você pode usar o seguinte comando para obter uma lista de pacotes pertencentes a uma determinada seção:

$ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}'
bash
bash-completion
busybox-initramfs
busybox-static
dash
zsh
zsh-common
Sylvain Pineau
fonte