Chapitre 12
Conclusion et pour aller plus loin
Objectifs
À la fin de ce chapitre, tu sauras :
- situer ce que tu as appris dans une vue d'ensemble cohérente ;
- appliquer les bonnes pratiques d'écriture de scripts robustes ;
- reconnaître et éviter les pièges les plus dangereux du terminal ;
- choisir tes prochaines étapes pour progresser vers le niveau avancé.
Tu es parti d'un écran noir intimidant. Tu sais désormais te déplacer, manipuler des fichiers, filtrer du texte, gérer permissions et processus, et écrire des scripts qui s'exécutent tout seuls. Ce chapitre consolide l'ensemble et t'ouvre la suite.
Vue d'ensemble du chemin parcouru
Chaque chapitre a posé une brique. Voici comment elles s'empilent :
| Chapitres | Compétence acquise |
|---|---|
| 1–2 | Comprendre le terminal et naviguer dans le système de fichiers |
| 3 | Créer, copier, déplacer, supprimer fichiers et dossiers |
| 4–5 | Lire et filtrer du texte ; redirections et tuyaux pour composer des commandes |
| 6 | Permissions, propriétaires et sudo |
| 7 | Recherche et transformation de texte (find, sort, sed, awk) |
| 8 | Variables, environnement, PATH, personnalisation |
| 9–10 | Écrire des scripts : arguments, conditions, boucles, fonctions |
| 11 | Processus et automatisation avec cron |
Le fil conducteur : chaque petite commande fait une chose, et on les combine (par des tuyaux, des scripts, des planifications) pour résoudre de grands problèmes. C'est la philosophie Unix, et c'est ce qui fait sa puissance durable.
Bonnes pratiques pour tes scripts
Maintenant que tu écris des scripts, quelques habitudes te feront passer pour quelqu'un qui sait ce qu'il fait — et surtout t'éviteront des bugs.
- Toujours le shebang en première ligne :
#!/bin/bash. - Guillemets autour des variables :
"$fichier", pas$fichier. C'est la cause numéro un de bugs dès qu'un nom contient un espace ou qu'une variable est vide. - Vérifier les entrées avant d'agir : l'argument est-il fourni ? le fichier existe-t-il ? Échouer
tôt avec un message clair (
exit 1) vaut mieux qu'un dégât silencieux. - Des noms parlants pour les variables et les fonctions :
dossier_sourceplutôt qued. - Commenter le pourquoi, pas le comment : le code dit déjà ce qu'il fait.
- Tester sur des données jetables avant de lancer sur de vraies données, surtout avec
rm,mv -ioused -i.
Astuce — Ajoute
set -euo pipefailjuste après le shebang de tes scripts sérieux. En résumé : le script s'arrête à la première erreur (-e), refuse les variables non définies (-u), et propage les échecs dans les tuyaux (pipefail). C'est un filet de sécurité que les professionnels mettent par réflexe.
Les pièges à ne jamais oublier
Quelques gestes peuvent causer des dégâts irréversibles. Garde-les en tête :
rmne pardonne pas. Pas de corbeille. Relis toujours la ligne, surtout avec-ret*. Ne tape jamaisrm -rf /ni une variante « pour voir ».>écrase silencieusement un fichier existant. Utilise>>quand tu veux ajouter.sudoretire les garde-fous. Comprends une commande avant de la lancer ensudo, surtout si tu l'as copiée depuis internet.- Les jokers sont développés par le shell.
rm fichier *.txtavec un espace de trop n'est pasrm fichier*.txt. Vérifie aveclsd'abord.
À retenir — Le meilleur réflexe de sécurité est gratuit : avant une commande destructive, remplace-la mentalement par
lsouechopour visualiser ce sur quoi elle va agir.
Comment continuer à progresser
Tu as le niveau intermédiaire. Pour aller vers l'avancé, voici des pistes concrètes, par ordre d'utilité.
- Pratiquer pour de vrai. Force-toi à faire au terminal ce que tu ferais à la souris : naviguer, renommer, chercher. C'est la répétition qui ancre.
- Apprendre un éditeur en terminal.
nanosuffit pour débuter, mais investir dansvim(ouneovim) change la vie quand on travaille beaucoup en ligne de commande. Lancevimtutorpour un tutoriel intégré. - Les expressions régulières (regex). Tu as effleuré les motifs avec
grep; les regex démultiplient la puissance degrep,sedetawk. C'est un sujet à part entière, très rentable. git, le gestionnaire de versions, qui s'utilise principalement au terminal et dont tu maîtrises déjà l'environnement.- La connexion à distance avec
ssh, pour piloter des serveurs — l'usage par excellence de tout ce que tu as appris. - Lire des scripts existants. Ceux de ton système (dans
/etc) ou de projets open source sont une mine d'apprentissage.
Astuce — Le réflexe le plus important n'est pas de tout savoir, mais de savoir chercher :
man commande,commande --help, et formuler clairement ton problème dans un moteur de recherche. Un bon utilisateur du terminal est avant tout quelqu'un qui sait se débloquer seul.
Résumé
- Tu maîtrises la navigation, la manipulation de fichiers, le filtrage de texte, les permissions, les processus et l'écriture de scripts automatisés.
- La philosophie Unix : de petits outils combinables valent mieux qu'un gros outil monolithique.
- Bonnes pratiques de script : shebang, guillemets autour des variables, vérification des entrées,
noms parlants,
set -euo pipefail. - Pièges majeurs :
rmsans corbeille,>qui écrase,sudosans garde-fou, jokers développés par le shell. - Pour progresser : pratiquer, apprendre
vim, les regex,git,ssh, et lire le code des autres.
Exercices
Exercice 1 — Le défi de synthèse
Sans regarder le corrigé, écris un script rapport-disque.sh qui :
- affiche la date du jour ;
- affiche les 3 plus gros fichiers du dossier passé en argument ;
- refuse de s'exécuter (avec un message clair et
exit 1) si aucun argument n'est fourni ou si le dossier n'existe pas.
Il mobilise des notions de presque tous les chapitres : arguments, tests, find, tri, tuyaux.
Voir le corrigé
La démarche : vérifier l'entrée (chapitre 10), puis chercher les fichiers et les trier par taille (chapitres 7 et 5).
#!/bin/bash
set -euo pipefail
# rapport-disque.sh - liste les plus gros fichiers d'un dossier.
dossier="${1:-}"
if [ -z "$dossier" ] || [ ! -d "$dossier" ]; then
echo "Usage : $0 <dossier-existant>" >&2
exit 1
fi
echo "Rapport du $(date +%Y-%m-%d) pour : $dossier"
echo "Les 3 plus gros fichiers :"
find "$dossier" -type f -exec du -h {} + | sort -rh | head -n 3
${1:-} vaut le premier argument, ou une chaîne vide s'il manque (utile avec set -u qui interdit
les variables non définies). du -h donne la taille de chaque fichier, sort -rh les classe du plus
gros au plus petit, head -n 3 n'en garde que trois.
Exercice 2 — Relire un script critique
Voici un script trouvé sur internet. Sans l'exécuter, repère trois problèmes qui le rendent dangereux ou fragile.
#!/bin/bash
cible=$1
cd $cible
rm -rf *
Voir le corrigé
La démarche : on applique les bonnes pratiques et les pièges du chapitre.
- Aucune vérification de l'argument. Si
$1est vide,cd(sans argument) t'emmène dans ton dossier personnel… puisrm -rf *y efface tout. Catastrophe silencieuse. - Variables sans guillemets.
cd $ciblecasse si le chemin contient un espace, et le comportement devient imprévisible. rm -rf *sans filet. Combiné à l'absence de vérification et aucdpotentiellement raté, c'est une bombe. Il faudrait au minimum vérifier quecda réussi (cd "$cible" || exit 1) et confirmer la cible.
Version corrigée prudente :
#!/bin/bash
set -euo pipefail
cible="${1:-}"
if [ -z "$cible" ] || [ ! -d "$cible" ]; then
echo "Usage : $0 <dossier>" >&2
exit 1
fi
cd "$cible" || exit 1
echo "Contenu qui serait supprime dans $(pwd) :"
ls -A # on AFFICHE d'abord, on ne supprime pas a l'aveugle
Le réflexe clé : un script copié doit toujours être lu et compris avant d'être lancé, surtout
s'il contient rm, sudo ou dd.
Quiz
1. Quelle est la philosophie centrale d'Unix ?
- A. Un seul gros programme qui fait tout
- B. De petits outils spécialisés que l'on combine
- C. Tout faire à la souris
2. Pourquoi entoure-t-on les variables de guillemets dans un script ?
- A. Pour les rendre plus lisibles uniquement
- B. Pour éviter les bugs quand une valeur est vide ou contient des espaces
- C. C'est obligatoire sous peine d'erreur de syntaxe
3. Que fait set -e en tête d'un script ?
- A. Active le mode silencieux
- B. Arrête le script à la première commande qui échoue
- C. Efface l'écran
4. Avant une commande destructive comme rm -r, quel réflexe est le plus sûr ?
- A. La lancer vite pour ne pas perdre de temps
- B. La remplacer mentalement par
ls/echopour visualiser la cible - C. Ajouter
sudodevant
Voir les réponses
- B — De petits outils combinables : c'est ce qui rend le terminal si puissant.
- B — Les guillemets protègent contre les valeurs vides ou contenant des espaces.
- B —
-einterrompt le script dès qu'une commande renvoie un code d'échec. - B — Visualiser la cible avec
ls/echoavant d'agir évite les catastrophes irréversibles.
Projet fil rouge
Ton outil sauvegarde.sh est fonctionnel et automatisé. Pour clore le projet, applique-lui les bonnes
pratiques de ce chapitre et offre-lui une amélioration de ton choix. Quelques idées, de la plus simple
à la plus ambitieuse :
-
Robustesse : ajoute
set -euo pipefailen tête et relis chaque variable pour t'assurer qu'elle est entre guillemets. -
Compression : remplace la copie par une vraie archive compressée avec
tar:tar -czf "$DESTINATION/$nom_sauvegarde.tar.gz" "$SOURCE"(
tar -czf archive.tar.gz dossiercrée une archive compressée ;tar -xzf archive.tar.gzla restaure.) -
Rotation : supprime automatiquement les sauvegardes de plus de 30 jours avec
find "$DESTINATION" -name 'sauvegarde-*' -mtime +30 -delete(teste sans-deleted'abord !). -
Notification : à la fin, affiche un résumé (taille de l'archive, nombre de fichiers sauvegardés) en t'appuyant sur
du -hetfind ... | wc -l.
Tu disposes maintenant d'un outil réel que tu comprends de bout en bout, et de la méthode pour en écrire d'autres. C'est exactement la définition du niveau intermédiaire visé par cette formation : autonome, capable de te débloquer seul, et conscient des bonnes pratiques.
Bravo d'être allé au bout. Le terminal n'est plus un écran noir intimidant : c'est ton outil.