Est-il possible de répertorier tous les packages installés à partir d'un composant de référentiel officiel spécifique (principal, restreint, univers ou multivers) à l'aide d'utilitaires tels qu'apt, apt-cache, aptitude?
J'ai écrit un script simple à cet effet:
dpkg -l | grep ^ii | cut -f3 -d ' ' | while read -r pkg;
do
status=`apt-cache show $pkg | grep -m1 "Section: multiverse"`
if [ ! -z "$status" ]
then
echo $pkg
fi
done;
Cela fonctionne, mais c'est vraiment lent car il vérifie tous les paquets un par un. L'exécution de la commande time
pour ce script produira:
real 1m16.797s
user 0m57.008s
sys 0m8.260s
J'ai déjà essayé modèles de recherche d'aptitude , et dpkg-query formater, mais il semble qu'ils ne disposent pas de la colonne/du schéma approprié pour créer une requête à cette fin.
J'ai aussi jeté un œil au script vrms pour savoir comment cela fonctionne. Parce qu'il recherche très rapidement les paquets contrib/non-free, il semble que le script vrms analyse l'intégralité du fichier /var/lib/dpkg/status
, chercher des choses comme 'Section: (contrib | non-free | restricted | multiverse | partner)', donc ce n'était pas utile non plus, car tous les packages ne possèdent pas cette section.
D'accord, je n'ai trouvé aucune solution pour ce faire avec les utilitaires standard, cependant, après avoir jeté un œil sur vrms
, j'ai mis au point un script de meilleure qualité pour la recherche de paquets installés à partir d'un composant spécifique.
L'autre script que j'ai mentionné dans ma question prenait beaucoup de temps.
Cependant, le nouveau script est disponible ici: pkgs-from.sh
L'utilisation est:
./pkgs-from.sh universe # or main, multiverse, backports
Et le résultat de la commande time
pour celui-ci est:
real 0m4.367s
user 0m0.980s
sys 0m0.408s
Ce qui est plutôt bien.
Comment ça marche?
Le script créera une liste de tous les packages liés au composant demandé à partir des fichiers associés dans le répertoire /var/lib/apt/lists/
, puis commencera à effectuer une recherche dans l'ensemble au lieu d'utiliser apt-cache
.