Comment obtenir la liste des packages installés correspondant à un modèle?


11

Je suis sur un système exécutant une distribution Debian (assez récente).

Je voudrais générer une liste simple de tous les packages installés correspondant à un certain modèle. Je peux le faire en courant, disons,

apt list --installed "linux-image-*" | cut -d/ -f1

mais j'obtiens des lignes qui ne m'intéressent pas, par exemple:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Listing...

Alors peut-être que je ferais mieux de ne pas utiliser apt. Je peux exécuter dpkg-query comme ceci:

dpkg-query --showformat='${Package}\n' --show "linux-image*"

mais cela ne se limite pas aux packages installés. je pourrais utiliser

dpkg-query --list "linux-image-*" | grep "ii"

mais alors je devrais faire un tas de traitement de texte, et qui peut faire confiance à ces espaces, non?

Donc, en fin de compte: quelle est la bonne façon d'obtenir la liste des packages installés correspondant à un modèle?


Remarque :

  • Points bonus s'il peut s'agir d'une expression rationnelle appropriée plutôt que d'un simple glob de shell.
  • Devoir analyser le texte semble être une solution loin d'être idéale; si c'est ce que vous suggérez, veuillez expliquer pourquoi il n'y a pas de meilleure façon.

Réponses:


8

aptitude prend en charge la recherche parmi tous les packages connus des outils de gestion de packages, installés ou non, à l'aide d'expressions régulières, sans sortie étrangère, et peut savoir comment formater sa sortie:

aptitude search "linux-image-.*"

Pour répertorier uniquement les packages installés:

aptitude search "linux-image-.* ~i"

Pour répertorier uniquement les noms de packages installés correspondant à l'expression régulière:

aptitude search "linux-image-.* ~i" -F "%p"

La documentation couvre en détail les modèles de recherche disponibles et les spécificateurs de format de sortie . Vous trouverez également des exemples sur ce site, par exemple, existe-t-il un moyen d'utiliser regexp avec aptitude? , regexp avec aptitude partie 2 , et Linux - afficher ou mettre à jour les mises à jour de sécurité uniquement en utilisant apt .


6

Voici une bonne façon d'obtenir la liste des paquets installés sur un système basé sur Debian:

dpkg -l | grep ^ii | awk '{print $2}'

Les lignes de sortie de dpkg -lpeuvent être considérées comme saines. Le modèle ^iicorrespondra aux lignes des packages installés et le simple Awk extraira la deuxième colonne, les noms des packages (les mêmes noms utilisés dans les apt-get installcommandes). Les noms de packages ne peuvent pas contenir d'espaces, c'est donc à nouveau une opération sûre.


Cela fonctionne lorsque vous souhaitez effectuer une grep par version. Les réponses avec aptitude searchet apt listdans ce cas ne le font pas.
Hi-Angel

6
$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1{print $1}'
linux-image-3.16.0-4-amd64
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64
linux-image-4.8.0-2-amd64
linux-image-4.9.0-1-amd64
linux-image-4.9.0-2-amd64
linux-image-4.9.0-3-amd64

Parler de regex:

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F'/' 'NR>1 && $0~/4.1/{print $1}'
linux-image-4.11.0-1-amd64
linux-image-4.12.0-1-amd64
linux-image-4.13.0-1-amd64

Vous pouvez également utiliser dpkg-queryavec -f(--showformat) option, lorsqu'elle est appelée sans aucun nom de package par défaut sont listés les paquets uniquement installés.

$ dpkg-query -f '${Package}\n' -W |grep 'linux-image' #-W == --show

1

Afin de "piéger" le terme recherché lors de la sortie de grep ping dpkg , vous devez mettre le terme de recherche comme suit. " git " est utilisé comme terme de recherche de spécimen:

dpkg -l |grep "^ii  git[[:space:]]"

Le carat (^) ii suivi de (2) espaces précédant le terme recherché ne garantit rien AVANT que la combinaison de caractères puisse correspondre.

La [[:space:]]contiguïté du terme recherché empêche les correspondances partielles de se produire uniquement en faisant correspondre les espaces immédiatement après .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.