====== 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 }'