====== Identifier la Section à laquelle appartient un paquet ====== * Objet : Script pour identifier la section à laquelle appartient un paquet * Niveau requis :{{tag>débutant avisé}} * Commentaires : FIXME * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) * Suivi : {{tag>à-tester}} * Création par [[user>thom1]] le 07/02/2008 * Testé par .... le .... * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=116053#p116053 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! =====Présentation ===== Voici un petit script, que j'ai nommé "debsection" qui permet de savoir si un paquet se trouve dans la section "main", "non-free" ou "contrib" La liste des paquets est stockée dans le fichier /var/cache/debsect par l'intermédiaire de l'option '//update//'. Il faut donc être root uniquement pour cette option, sinon un simple utilisateur suffit, du moment qu'il a accès à /var/cache/debsect, bien entendu. ===== Le Script Debsection ===== #!/bin/sh debcache=/var/cache/debsect update(){ # Ces variables ne seront pas visibles en dehors de la fonction update() local debinst section if [ $(id -u) -ne 0 ]; then echo "Vous devez être ROOT" exit 1 fi echo "Mise à jour en cours..."; rm -f "$debcache" 2> /dev/null for debinst in $(dpkg -l | awk '$1 == "ii" { print $2 }'); do info=$(apt-cache showpkg "$debinst") case $info in *main*) section=main;; *contrib*) section=contrib;; *non-free*) section=non-free;; *) section=unknown;; esac echo "$section : $debinst" >> "$debcache" done } help() { echo "Usage: `basename $0` paquet1 paquet2"; echo "Options :" echo " update : mise à jour de la base de données (ROOT uniquement)"; echo " list : liste tout les paquets"; echo " search : liste nom_paquet"; exit; } if [ ! -f "$debcache" ] && [ "$1" != "update" ]; then echo "Veuillez faire '`basename $0` update' SVP"; exit 1; fi case $1 in list) cat "$debcache" exit 0 ;; update) update exit 0 ;; search) shift for i in "$@"; do grep "$i" "$debcache" done exit 0 ;; *) help exit 1 ;; esac ===== Pensez 'y ===== N'oubliez pas la commande 'awk' si vous voulez afficher __uniquement__ les noms de paquets: debsection list | grep non-free | awk '{print $3}' ce qui affichera la liste des paquets installés et faisant partis de la section 'non-free'. Et même : debsection list | awk '/non-free/ { print $3 }'