1° script Shell Linux

Après avoir vu l’astuce pour renommer un fichier avec un nom non conventionnel utilisant des informations systèmes, nous allons voir un script l’utilisant ainsi que d’autres qui synthétisent les apprentissages des derniers jours.
Le but de ce script sera de créer une archive compressée du répertoire personnel utilisateur (/home/utilisateur ou ~/), au nom de l’utilisateur et horodaté, de le stocker sur un dossier partagé NFS d’un serveur.
La notion de ~/ est très importante ici, car elle indique le chemin vers le répertoire utilisateur (/home/utilisateur) qui est connecté et qui exécute le script.

Voici le code du script que je vais détailler et expliquer :

#! /bin/bash

### Création d'une archive et compression du répertoire personnel utilisateur
tar -acvf ~/Home.tar.bz2 ~/

### Renommage du fichier avec nom utilisateur et horodatage
NAME="`whoami`_`date +%Y%m%d_%T`.tar.bz2"
mv ~/Home.tar.bz2 ~/$NAME

### Monter le dossier partagé NFS du serveur 10.xxx.xxx.xxx
### dans notre cas le partage du serveur à été fait sur /home/nfs
mkdir ~/NFSDIR
sudo mount 10.xxx.xxx.xx:/home/nfs ~/NFSDIR

### Copier le fichier archive renommé dans le répertoire partagé NFS
cp ~/$NAME ~/NFSDIR

### Démonter le partage NFS & effacer le dossier local de montage du partage serveur
sudo umount ~/NFSDIR
rmdir ~/NFSDIR

### Supprimer le fichier archive du répertoire personnel
rm ~/$NAME

Voilà on peut enregistrer ce script sous le nom backup_home.sh et faire la commande suivante sur ce fichier afin de le rendre exécutable :

chmod +x backup_home.sh

Pour exécuter le script, il faut se placer dans le répertoire où se situe le script (pour nous dans le répertoire personnel) et on le lance avec l’une de ces deux commande :

sh backup_home.sh
./backup_home.sh

On pourrait aussi avoir enregistré le script dans un dossier script du répertoire personnel que l’on ajoutera au PATH (variable environnement pour les chemins de recherche des exécutables).

Explications :

La 1° ligne sert à déclarer qu’il s’agit d’un script, et avec quel interpréteur de commande celui-ci doit s’exécuter :

#! /bin/bash

Ensuite on crée une archive compressée commande tar -acvf [a : compression automatique en fonction de l’extension du nom, v : verbose (retour d’informations sur le déroulement de la commande, f : l’archive prendra le nom du fichier qui suit le f il est donc important de placer le f en dernier, sinon il y aura une erreur en retour].
L’archive se nommera ~/Home.tar.bz2 : notez le ~/ qui précède le nom de fichier et qui indique que ce fichier sera stocker dans le répertoire utilisateur actuellement connecté et qui exécute le script (attention à bien différencier l’utilisateur connecté du répertoire dans lequel on se situe : ce n’est pas parce qu’on est dans le répertoire /home/utilisateur que c’est le répertoire que l’on va sauvegarder).
Le dernier argument ~/ indique ce que l’on va archiver, soit ici la totalité du répertoire utilisateur.

On définit ensuite le nouveau nom de l’archive dans une variable, car le nom sera variable en fonction de l’heure et il sera donc difficile de retrouver le nom exact par la suite, et nous aurons besoin à plusieurs reprise de ce nom (renommage, copie, et suppression).

NAME="`whoami`_`date +%Y%m%d_%T`.tar.bz2"

NAME : nom de la variable
On met entre «  » tout le nouveau nom du fichier qui sera interprété comme une chaîne de caractères.
Comme on l’a vu dans cet article, le caractère ` sert à indiquer à l’interpréteur qu’il va s’agir d’une commande à évaluer et le résultat sera concaténer au reste de la chaîne.

`whoami`_ renverra le nom de l’utilisateur actuellement connecté.
`date +%Y%m%d_%T` renverra comme chaîne de caractère « 20150325_09:00:00 »
La variable NAME contiendra donc au final la chaîne de caractère pour mon cas :
« dimitri_20150325_09:00:00.tar.bz2 » qui correspond donc au nouveau nom de l’archive personnalisée et horodaté.
On renomme ensuite l’archive avec la commande :

mv ~/Home.tar.bz2 ~/$NAME ($NAME servant à rappeler le contenu de la variable NAME).

On veut ensuite transférer notre archive sur un serveur distant dans un dossier partagé NFS.
Pour monter un dossier NFS, il faut que l’utilisateur possède un dossier vierge avec les autorisations adéquates sur lequel monté le dossier partagé. On crée donc un dossier dans lequel on va monter le partage NFS, que l’on appellera NFSDIR (répertoire NFS 😉 ).
Donc mkdir ~/NFSDIR crée un répertoire NFSDIR dans le répertoire utilisateur.
Ensuite sudo mount 10.xxx.xxx.xxx:/home/nfs ~/NFSDIR va monter le répertoire partagé NFS du serveur sur le dossier local utilisateur NFSDIR. On utilise la commande sudo car la commande mount ne peut être utilisé qu’avec les droits super utilisateur ROOT.
C’est peut être ici le défaut de ce script, car il faut soit connaître le mot de passe ROOT, soit avoir la présence d’un administrateur qui connaisse le mot de passe. Mais dans le cadre de notre exercice, nous connaissions le mot de passe ROOT.
On copie ensuite le fichier d’archive sur le dossier partagé du serveur à l’aide la commande :

cp ~/$NAME ~/NFSDIR

Une fois la copie terminé on démonte le dossier partagé NFS qui n’a plus d’utilité. Comme pour mount, la commande umount nécessite les droits ROOT, que l’on va obtenir avec la commande sudo.

sudo umount ~/NFSDIR

On supprime le dossier NFSDIR qui ne nous est plus utile, afin de ne pas avoir d’erreur lors de la création du dossier avec une nouvelle exécution du script.

rmdir ~/NFSDIR

On supprime ensuite le fichier archive du répertoire personnel qui alourdirai le répertoire personnel au fur et à mesure de l’exécution du script et serai sauvegardé récursivement dans chaque nouvelle archive !

rm ~/$NAME

Pour le plaisir, on peut ajouter un petit message indiquant que le script est terminé 😉 par exemple :

echo "Fin de l'archivage de "$NAME

Voilà c’est terminé ! En espérant que tout à été clair et compris 🙂

Laisser un commentaire