Script Linux
Ce billet est consacré au script Linux. J'ai écrit divers script pour
"automatiser" certaines commandes, même si je dois exécuter ces
scripts manuellement. Je pourrais, quand bien même, appeler ces scripts
dans un cron
si je le souhaitais.
Vous trouverez, donc, dans la suite, différents scripts, différentes idées, à améliorer, à récupérer.
Liste des paquets
Ce script permet de lister les paquets installés sur un système
GNU\\Debian. Cela me permet de récupérer une liste de paquet dans un
fichier, liste que je peux réutiliser dans un logiciel comme synaptic
pour installer les mêmes paquets sur une autre distribution.Couplé à une
sauvegarde du dossier home et du dossier etc, le script permet de
pouvoir réinstaller un système à l'identique (à condition que l'on ne se
trouve pas sur unstable et moyennant le dossier /var
.
liste=`dpkg -l | tail +6 | cut -d\\ -f3` for i in $liste ; do echo "$i install" done
La commande dpkg --get-selections
peut très bien remplacer le
script ci-dessus. Merci à mx pour sa remarque.
Purge des paquets
Permet de purger les paquets supprimés d'une distribution GNU\\Debian. Cela permet de supprimer les quelques fichiers inutiles lors de la suppression de paquet GNU\\Debian. Néanmoins, parfois on ne veut pas faire les purges.
for i in `dpkg -l | grep -e '^rc.*' | cut -f3 -d\\ ` ; do dpkg -P $i ; done
Sécurisation des données
Permet de monter une partition démontée et démonter une partition
montée. Ce script est basé sur KDialog pour demander les informations,
il nécessite donc KDE (mais je pense qu'il est possible de le réécrire
pour Gnome).On lui passe en paramètre le nom d'un périphérique. Il
suppose que la partition démontée est un volume logique (sous LVM) dont
le groupe est GNU\\Debian et dont le nom est $DISK-close
. Il crée à
la suite le device-mapper (en supposant qu'il a été créé à l'aide de
LUKS) du nom de $DISK-open
.S'il trouve ce "device-mapper", il le
démonte et le supprime.
#!/bin/sh DISK=$1 DISKOPEN="$DISK-open" DISKCLOSE="$DISK-close" if [ -e /dev/mapper/$DISKOPEN ] ; then umount /dev/mapper/$DISKOPEN 2> /dev/null if [ $? != 0 ] ; then kdialog --title KSecure --error "Impossible de démonter le péripherique $DISK" fi if [ -e /dev/mapper/$DISKOPEN ] ; then /sbin/cryptsetup luksClose $DISKOPEN kdialog --title KSecure --msgbox "Suppression du péripherique $DISK accomplie" fi else password=`kdialog --title KSecure --password "Cle de déchiffrement de $DISK"` if [ -z $password ] ; then password="nopassword" fi echo "$password" | \\ /sbin/cryptsetup luksOpen /dev/debian/$DISKCLOSE $DISKOPEN 2> /dev/null mount /dev/mapper/$DISKOPEN 2> /dev/null if [ $? -ne 0 ] ; then kdialog --title KSecure --error "Clé incorrecte" fi fi
Apprentissage du spam
Permet d'appeler bogofliter et spamassassin sur une liste de message Indésirable au format mbox. Il permet aussi de faire l'apprentissage des messages désirables.
#!/bin/bash sa-learn -L --no-sync --spam --mbox /home/phoenix/Mail/Indésirable\\ \\(Spam\\) sa-learn -L --no-sync --ham --mbox /home/phoenix/Mail/Désirable\\ \\(Non\\ spam\\) bogofilter -N -s < /home/phoenix/Mail/Indésirable\\ \\(Spam\\) bogofilter -S -n < /home/phoenix/Mail/Désirable\\ \\(Non\\ spam\\)
Création de lien
Permet à partir d'une liste de fichier identique générée par fdupes de créer des liens physiques entre les fichiers pour économiser de la place. Attention : si un des fichiers physiques est modifié, l'autre le sera aussi.
#!/bin/sh echo -n "|" read -r line while [ $? -eq 0 ] ; do line=`echo $line | sed -e "s/\\\\\\\\\\\\ /@/g"` index=0 principal="" for chemin in $line ; do if [ $index -eq 0 ] ; then principal=$chemin else a=`echo $principal | sed -e "s/@/\\\\ /g"` b=`echo $chemin | sed -e "s/@/\\\\ /g"` ln -f "$a" "$b" fi index=`expr $index + 1` done echo -n "=" read -r line done echo -n "|"
Renumérotation
Permet de renuméroté une liste d'image d'un dossier, du style
1 10 11 12 13 2 3 4...
en une suite précédé d'un 0
:
01 02 03 04 05 06 ...
#!/bin/sh for DIR in `ls` ; do echo -n "Change directory $DIR " cd $DIR CMD=`ls | sed -e 's/\\(.*\\)_\\([1-9]\\)\\.jpg/mv \\1_\\2.jpg \\1_0\\2.jpg ;/g' | grep "mv "` eval $CMD cd .. echo "Ok" done
Génération de playlist
Permet de générer une playlist sur un dossier pour utilisation avec le logiciel kpf (par exemple) de KDE. Il parcourt l'ensemble des dossiers et crée un fichier m3u à chaque fois qu'il trouve un fichier multimédia. Il remplace le début du dossier par un lien http.Je rajoute qu'il existe un très bon site contenant de la musique libre : Jamendo.
#!/bin/sh OLD=`pwd` cd "$1" if [ $? -ne 0 ] ; then exit fi THIS=`pwd` BASE=`basename "$THIS"` echo "Ouverture de $BASE" for path in * ; do if [ -d "$THIS/$path" ] ; then $0 "$THIS/$path" fi done echo "Traitement de $BASE" rm $BASE.m3u 2> /dev/null for path in *.mp3 *.ogg *.wma *.avi ; do echo $path | grep \\* > /dev/null if [ $? -eq 1 ] ; then echo $THIS/$path | sed -e "s/\\/media\\/music/http\\:\\/\\/192\\.168\\.101\\.7\\:8001/g" >> $BASE.m3u fi done echo "Sortie de $BASE"
Script pour gérer les documents latex
Ce script date de quelques temps quand je devais générer des documents différents à partir d'un même document LaTeX.Il utilise différentes commandes pour cela, et permet aussi de nettoyer le dossier. Une sorte de Makefile à la mode bash.
#!/bin/sh if [ $# != 2 ] ; then echo "Il faut le nom du fichier et de la sortie" exit 1; fi NAME=$1 DEST=$2 case $DEST in cleanPDF) rm -f $NAME.pdf ;; cleanTXT) rm -f $NAME.txt ;; cleanPS) rm -f $NAME.ps ;; cleanDVI) rm -f $NAME.dvi ;; cleanHTML) rm -f $NAME.html ;; cleanTEX) rm -f *.log *.toc *.htoc *.aux *.haux *~ ;; clean) glatex.sh $NAME cleanTEX glatex.sh $NAME cleanDVI glatex.sh $NAME cleanPS glatex.sh $NAME cleanTXT glatex.sh $NAME cleanPDF glatex.sh $NAME cleanHTML ;; mrproper) glatex.sh $NAME clean ;; _dvi) pslatex $NAME.tex pslatex $NAME.tex ;; xdvi) glatex.sh $NAME _dvi xdvi $NAME.dvi ;; dvi) glatex.sh $NAME _dvi glatex.sh $NAME cleanTEX ;; _html) hevea -francais -fix -noiso $NAME.tex ;; html) glatex.sh $NAME _html glatex.sh $NAME cleanTEX ;; _txt) hevea -francais -fix -text $NAME.tex ;; txt) glatex.sh $NAME _txt glatex.sh $NAME cleanTEX ;; _ps) glatex.sh $NAME _dvi dvips -Ppdf $NAME.dvi ;; ps) glatex.sh $NAME _ps glatex.sh $NAME cleanDVI glatex.sh $NAME cleanTEX ;; _pdf) pdflatex $NAME.tex pdflatex $NAME.tex ;; pdf) glatex.sh $NAME _pdf glatex.sh $NAME cleanTEX ;; esac