Script Linux
Posté le 20. August 2006 dans SysAdmin
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