Script Linux

Posté le Sunday, 20 August 2006 in 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

Commentaires

1. Le 2006-08-24 14:53:57+02:00 par mx

Salut,

pourquoi ne pas utiliser simplement

#dpkg --get-selections

cette commande renvoie la liste des paquets installés au format :

nom_paquet install

merci pour la doc "Chiffrer une partition d'un disque"

MxJeff

2. Le 2006-08-24 15:03:59+02:00 par Diplodocus

C'est une bonne remarque

Pourquoi? Je pense que je n'ai pas lu assez bien le man page :). Au moins cela m'entraîne à faire des scripts ...

3. Le 2009-11-30 18:18:10+01:00 par Julien

Je n'ai pas tout lu, mais pour la purge des paquets :

`aptitude purge \~c' me paraît plus simple non ?

4. Le 2009-11-30 19:30:58+01:00 par swiip81

Renumérotation

pas besoin de script, la commande rename est faite pour faire des choses de ce genre

10-million_miles.mp3
11-lost_my_mind.mp3
1-c'mon.mp3
12-ring_of_fire.mp3
2-the_power.mp3

$ rename 's/\^(\d)-/0\$1-/' *

01-c'mon.mp3
02-the_power.mp3
10-million_miles.mp3
11-lost_my_mind.mp3
12-ring_of_fire.mp3

Qui se traduit ici par remplacer dans le répertoire courant tout ce qui commence par un chiffre et est directement suivit par ici un '-' en '0' plus notre chiffre et le tiret

5. Le 2010-01-17 10:24:11+01:00 par Ulrich VANDENHEKKE

Merci pour la commande aptitude purge ~c et la commande rename que je ne connaissais pas. Comme quoi parfois on peut vouloir écrire un script compliqué alors que d'autres y ont déjà pensé et l'on fait beaucoup mieux....

Merci