Comment puis-je obtenir une liste de tous les packages dans une section de référentiel à partir de la ligne de commande?

13

Dans Synaptic, on peut lister les packages par section. Par exemple, dans l'image ci-dessous, tous les packages de la section "Radio amateur (univers)" sont répertoriés.

Comment puis-je obtenir une telle liste (edit: avec la description du package) sur la ligne de commande?

J'ai besoin d'une liste brute; une application de terminal comme aptitudene le fera pas.

synaptique

Serge Stroobandt
la source
Shells de recherche apt-cache
Panther
@ bodhi.zazen qui est une bonne suggestion, mais ne recherche pas seulement la section
Steven Penny

Réponses:

5

Eh bien, même si vous dites que vous ne voulez pas utiliser aptitude à cause de la sortie, vous devez savoir que vous pouvez la modifier pour obtenir ce que vous aimez:

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

L'astuce réside dans le -Fcommutateur qui modifie le format de sortie. %psignifie package. Cela émet également lorsque le package a différentes architectures (c'est-à-dire amd64 vs i386), et %dqui génère la description. Vous pouvez personnaliser encore plus le modèle de recherche pour, par exemple, les packages non installés:

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

~isignifie installé et !n'est pas, donc il se lit comme "non (!) installé (~ i)", ou si vous ne voulez que ceux qui sont disponibles pour votre architecture:

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

~rétant ?architecture()qui correspond à l'architecture du paquet et nativequi ne liste que ceux qui ont la même architecture que le système, l'équivalent de dpkg --print-architecture.

La ligne précédente peut donc s'écrire de manière encore plus concise:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'
Braiam
la source
Très élégant, surtout avec -F'|%p|%d|'. Cependant, serait-il possible de ne pas lister les :i386packages en ajoutant une !expression-à la searchchaîne?
Serge Stroobandt
1
@GinGordon ouais, il suffit d'ajouter ~r nativeaux termes de recherche. ~rétant ?architecturequi correspondent à l'architecture du paquet et nativequi ne listent que ceux qui ont la même architecture que le système, l'équivalent de dpkg --print-architecture. BTW, vous vouliez la liste avec la description du paquet?
Braiam
Génial! Et oui, j'ai modifié la question pour inclure la description du package. Veuillez modifier votre réponse en conséquence et vous recevrez à juste titre ma meilleure réponse pour avoir été la plus concise.
Serge Stroobandt
@GinGordon check it out.
Braiam
1
@GinGordon si vous installez le aptitude-docpackage et accédez à /usr/share/doc/aptitude/html/en/index.htmlvotre navigateur, vous trouverez file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmltous les avantages désagréables.
Braiam
11

Assurez-vous que le package dctrl-toolsInstaller les outils dctrl est installé. Il fournit des commandes utiles pour rechercher les listes de paquets apt et dpkg. Pour obtenir une description complète de tous les packages d'une section particulière qui sont installables avec apt, exécutez

grep-aptavail -F Section hamradio

Cela montrera les métadonnées complètes du package pour chaque package de la hamradiosection. Si tout ce que vous voulez voir, ce sont les noms des packages, exécutez

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

Si votre système est configuré pour multiarchitecture, le même package peut apparaître plusieurs fois dans cette liste s'il est conçu pour plusieurs architectures. Donc, pour affiner cela, utilisez soit

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

ou

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

pour trier la liste des packages et supprimer les packages en double portant le même nom.

Notez que vous devrez utiliser le nom réel de la section, qui est différent du nom "lisible par l'homme" que Synaptic affiche dans son interface graphique. Par exemple, les recherches ci-dessus utilisent le nom de la section hamradioau lieu de la chaîne "Radio amateur" affichée dans Synaptic.

Voir la page de manuel de grep-aptavail pour une description complète de toutes les options et quelques exemples.

Mike Miller
la source
3

Plus de champs sur une seule ligne, avec séparateur arbitraire

La ligne suivante imprimera tous les noms de packages uniques d'une section de référentiel, ainsi que leur description, chacun sur une seule ligne. Tous les champs sont séparés par un caractère de tuyau, c'est-à-dire prêts à être convertis en table de tuyaux Markdown . Le tableau résultant peut être trouvé sur mon site Web.

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

Vous pouvez utiliser la commande suivante pour obtenir une liste des packages appartenant à une section donnée:

$ 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
la source