Maintenance du système avec bash
Afin de mieux connaître son système d’exploitation, la création d’un journal des installations permet de suivre l’occupation de son disque dur, comprendre l’origine des fichiers qui s’approprient la place sur le disque.
On peut de cette façon effectuer des désinstallations manuelles en effaçant exclusivement les fichiers dont on connaît la source et la destination.
Le logiciel d’installation/désinstallation (Software Manager) fait cela très bien, mais ne laisse pas d’alternative entre une installation ou une désinstallation complète, il laisse aussi quelquefois des traces qu’on détecte difficilement étant donné la densité des fichiers dans ces répertoires.
La création de ce journal permet aussi de rester le décisionnaire sur le suivi de son système, on accède aussi de cette manière à l’orthographe du nom de l’exécutable du logiciel installé, du chemin complet des répertoires contenant les fichiers de configuration et d’initialisation, des fichiers d’icônes etc...
On reste de ce fait l’administrateur de son système.
C’est un script bash très simple avec une interface graphique réalisée avec zenity.
- l’examen initial :
Explore le disque dur et créé une liste de l’ensemble des fichiers
Il faut ensuite procéder à l’installation du programme et modifier ainsi le système.
- l’examen de contrôle :
Explore à nouveau le disque dur et créé une nouvelle liste.
- ajout dans le journal :
Procède à une comparaison des deux listes et extrait les fichiers ajoutés avec leur chemin, la liste des ajouts sera affichée à l’écran et ajoutée au fichier journal.
Dans le script les fichiers sont lus/écrits dans le répertoire dont le chemin absolu est ~/.zen/, c’est le répertoire de travail des différentes listes et du journal, il est possible de le personnaliser en modifiant tous les chemins ~/.zen/ avec le nom d’un autre répertoire.
Le journal ne contient pas les données inscrites dans le dossier personnel, il s’agit le plus souvent de fichiers de configurations et bien sûr des fichiers d’exploitation résultant du travail accompli avec le logiciel.
#!/bin/bash # -------------------------------- # fonction scan initial du système # -------------------------------- scaninit() { find /usr > ~/.zen/examen1 find /etc >> ~/.zen/examen1 } # ------------------------------------ # fonction scan de contrôle du système # ------------------------------------ scancontr() { find /usr > ~/.zen/examen2 find /etc >> ~/.zen/examen2 } # -------------------------------------- # fonction de sauvegarde dans le journal # -------------------------------------- fjournal() { titre=$(zenity --entry --title "Entrée d'un titre pour le journal" --text "Saisir un titre pour annoter le paragraphe dans le journal") echo >~/.zen/tamp echo >>~/.zen/tamp echo ---------------------------------------------------------- >>~/.zen/tamp echo "nouvelle entrée en date du : " >>~/.zen/tamp date >>~/.zen/tamp echo $titre >>~/.zen/tamp echo ---------------------------------------------------------- >>~/.zen/tamp echo >>~/.zen/tamp diff --old-line-format='' --new-line-format='%l ' --unchanged-line-format='' ~/.zen/examen1 ~/.zen/examen2 >>~/.zen/tamp zenity --text-info --width=500 --height=400 --title "liste des ajouts" --filename ~/.zen/tamp cat ~/.zen/tamp >>~/.zen/journal } # ------------------------------------ # fonction de visualisation du journal # ------------------------------------ vjournal() { zenity --text-info --width=500 --height=400 --title "Visualisation du journal" --filename ~/.zen/journal } # ----------------- # Boucle principale # ----------------- while true ; do code=$(zenity --list --column=code --column=designation --title="Examen des installations" --width=500 --height=350 --hide-header --hide-column=1 --text=" lors de l'examen initial et de contrôle ================================= PATIENTER JUSQU'A LA REAPPARITION DE LA FENETRE ================================= - le scan peut durer quelques minutes -" 1 "Examen initial" 2 "Examen de contrôle" 3 "Ajouter les fichiers dans le journal" 4 "Visualiser le journal" 5 "Quitter" ) case $code in 1) scaninit ;; 2) scancontr ;; 3) fjournal ;; 4) vjournal ;; 5) break ;; esac done |
Extrait du résulat de l'enregistrement de l'installation du logiciel "scribus" dans le journal
///////// //// /usr/lib/scribus/plugins/libbarcodegenerator.so |
La même version avec interface texte dans un terminal
#!/bin/bash # -------------------------------- # fonction scan initial du système # -------------------------------- scaninit() { find /usr > ~/.zen/examen1 find /etc >> ~/.zen/examen1 } # ------------------------------------ # fonction scan de contrôle du système # ------------------------------------ scancontr() { find /usr > ~/.zen/examen2 find /etc >> ~/.zen/examen2 } # -------------------------------------- # fonction de sauvegarde dans le journal # -------------------------------------- fjournal() { clear echo echo "---------------------------------------------------------------" echo "saisie d'un titre pour annotation dans le paragraphe du journal" echo "---------------------------------------------------------------" echo read titre echo >~/.zen/tamp echo >>~/.zen/tamp echo ---------------------------------------------------------- >>~/.zen/tamp echo "nouvelle entrée en date du : " >>~/.zen/tamp date >>~/.zen/tamp echo $titre >>~/.zen/tamp echo ---------------------------------------------------------- >>~/.zen/tamp echo >>~/.zen/tamp diff --old-line-format='' --new-line-format='%l ' --unchanged-line-format='' ~/.zen/examen1 ~/.zen/examen2 >>~/.zen/tamp more ~/.zen/tamp cat ~/.zen/tamp >>~/.zen/journal } # ------------------------------------ # fonction de visualisation du journal # ------------------------------------ vjournal() { clear echo echo echo "==============================================" echo "espace pour parcourir une page, Q pour quitter" echo "==============================================" read a more ~/.zen/journal } # ----------------- # Boucle principale # ----------------- while true ; do clear echo echo "lors de l'examen initial et de contrôle" echo "===============================================" echo "PATIENTER JUSQU'A LA REAPPARITION DE LA FENETRE" echo "===============================================" echo "Le scan peut durer quelques minutes" echo echo echo "***************************" echo "###### M E N U ######" echo "***************************" echo "1 - Examen initial" echo "2 - Examen de contrôle" echo "3 - Ajouter les fichiers dans le journal" echo "4 - Visualiser le journal" echo "5 - Quitter" read choix case $choix in 1) scaninit;; 2) scancontr;; 3) fjournal;; 4) vjournal;; 5) break esac done |
Suppression totale d’une installation en mode manuel
Pour supprimer une série de fichiers facilement avec un ordre bash, il faut créer un nouveau fichier texte et y transcrire la liste des fichiers à supprimer d’un simple copier/coller du journal vers le fichier.
Dans une console envoyer l’ordre :
sudo rm $(cat fichier.txt)
La suppression est immédiate après la saisie du mot de passe administrateur, sans aucune confirmation.
Simple et efficace.