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
Vus : 711
Publié par Ulrich Van Den Hekke : 73