Introduction & Objectifs
Quand on parle d’administration système, les fichiers et les logs sont la mémoire de la machine.
Savoir les lire, les transformer, les filtrer ou les créer proprement fait toute la différence entre un script “qui marche” et un script “de production”.
Ici, tu vas apprendre à :
- manipuler les flux (
STDIN,STDOUT,STDERR) ; - lire et écrire dans des fichiers texte, XML, JSON ;
- créer des logs structurés et rediriger intelligemment la sortie ;
- automatiser la recherche, l’analyse et la transformation de fichiers.
Tout ce qu’il faut pour automatiser un audit système ou une tâche de maintenance.
⚙️ Anatomie des flux : STDIN, STDOUT, STDERR
Concept
Tout programme Linux échange des données via trois flux standards :
| Flux | Numéro | Description |
|---|---|---|
| STDIN | 0 | Entrée standard (ce qu’on “envoie” au programme) |
| STDOUT | 1 | Sortie standard (résultat normal) |
| STDERR | 2 | Sortie d’erreur |
C’est grâce à eux qu’on peut “chaîner” des commandes, rediriger des résultats, ou séparer les erreurs.
Exemple / Code
ls /etc /dossier_inexistant >resultats.txt 2>erreurs.txt
Ici :
>redirige la sortie normale versresultats.txt2>redirige la sortie d’erreur verserreurs.txt
Pour combiner les deux :
ls /etc /dossier_inexistant &> tout.log
Et pour afficher tout à la fois à l’écran et dans un fichier :
ls /etc | tee sortie.txt
👉 Pourquoi faire ça ?
En production, cela permet de surveiller l’exécution tout en archivant les résultats et erreurs pour analyse post-mortem.
📁 Lecture et écriture de fichiers
Concept
Lire un fichier, ce n’est pas juste faire cat.
En Bash, on peut écrire, ajouter, ou créer des fichiers sans détruire les anciens.
>: écrase le fichier>>: ajoute à la fin<<EOF ... EOF: crée un bloc de texte (here-doc)<<< "texte": injecte une chaîne unique
Exemple / Code
echo "Sauvegarde terminée le $(date)" >> /var/log/backup.log
Ou encore :
cat <<EOF >rapport.txt
Rapport de sauvegarde
Date : $(date)
Fichiers copiés : $(ls /backup | wc -l)
EOF
👉 Pourquoi ?
Les here-doc (<<EOF) permettent de créer des fichiers structurés (rapports, configurations, logs) directement dans le script, sans redirections multiples.
🌲 Parcourir et gérer les fichiers / dossiers
Concept
Pour auditer, il faut parcourir l’arborescence et filtrer ce qu’on veut.
Les outils maîtres : find, xargs, et les boucles while read.
Exemple / Code
Lister tous les fichiers modifiés il y a plus de 7 jours :
find /var/log -type f -mtime +7
Supprimer les logs trop vieux (⚠️ prudence !) :
find /var/log -type f -mtime +30 -print0 | xargs -0 rm -f
Lire un fichier ligne par ligne proprement :
while IFS= read -r line; do
echo "Traitement : $line"
done < liste.txt
👉 Pourquoi ?
Les boucles while read sont plus sûres que for f in $(cat fichier) car elles respectent les espaces, les caractères spéciaux et les retours à la ligne.
🔎 Recherche et filtrage de contenu
Concept
grep, sed, et awk sont les trois mousquetaires du traitement de texte Linux.
Ils servent à extraire, filtrer, transformer.
Exemple / Code
Rechercher toutes les erreurs dans un log :
grep -i "error" /var/log/syslog
Compter combien de lignes contiennent “failed” :
grep -c "failed" /var/log/auth.log
Afficher uniquement la 3ᵉ colonne d’un CSV :
awk -F, '{print $3}' data.csv
👉 Pourquoi ?
Ces outils évitent de réécrire des boucles Bash : on peut traiter des millions de lignes en une seule commande.
🧰 Transformation & édition en ligne
Concept
sed et awk permettent de modifier des fichiers sans ouvrir d’éditeur.
sed= Stream Editor → remplace, supprime, insère.awk= Analyseur de champs → travaille sur les colonnes.
Exemple / Code
Supprimer les lignes vides :
sed -i '/^$/d' fichier.txt
Remplacer “erreur” par “ERROR” :
sed -i 's/erreur/ERROR/g' app.log
Calculer la moyenne d’un fichier CSV (colonne 3) :
awk -F, '{sum+=$3} END {print "Moyenne:", sum/NR}' data.csv
👉 Pourquoi ?sed et awk rendent ton script auto-réparateur : il peut corriger et reformater des fichiers sans intervention humaine.
🧾 Création & gestion de logs
Concept
Un bon script doit tracer ce qu’il fait.
Deux outils : tee (dupliquer la sortie) et logger (envoyer au système de logs).
Exemple / Code
#!/bin/bash
LOGFILE="/var/log/maintenance.log"
{
echo "=== Début maintenance $(date) ==="
apt update && apt upgrade -y
df -h
echo "=== Fin maintenance ==="
} 2>&1 | tee -a "$LOGFILE" | logger -t maintenance
👉 Pourquoi ?
On garde une trace locale (LOGFILE) et une trace centralisée (syslog).
C’est une preuve d’exécution pour les audits.
🧮 Analyse de fichiers XML / JSON
Concept
Bash peut lire du XML et du JSON grâce à des outils spécialisés :
xmllintpour le XMLjqpour le JSON
Exemple / Code
Valider un XML :
xmllint --noout --schema schema.xsd config.xml
Lire une valeur JSON :
jq '.server.ip' config.json
Lister les utilisateurs actifs :
jq '.users[] | select(.active==true) | .name' users.json
👉 Pourquoi ?
Les fichiers de configuration modernes (Ansible, API, logs Cloud) sont souvent en JSON : jq devient donc indispensable pour tout script moderne.
🧠 Robustesse et bonnes pratiques
Concept
Un bon script ne s’arrête pas silencieusement et nettoie après lui.
Active les protections :
set -Eeuo pipefail
trap 'echo "Erreur ligne $LINENO"; exit 1' ERR
Exemple / Code
#!/bin/bash
set -Eeuo pipefail
trap 'echo "Erreur à la ligne $LINENO" >&2' ERR
mkdir -p /tmp/backup
cp /var/log/syslog /tmp/backup/syslog.$(date +%F)
👉 Pourquoi ?
Ces options (set -euo pipefail) empêchent les erreurs silencieuses et rendent les scripts prévisibles.
C’est la frontière entre “script de test” et “outil pro”.
🧩 Cas réels : audit & maintenance
| Concept | Exemple concret |
|---|---|
| Audit disque | du -sh /home/* >rapport_disque.txt |
| Vérification services | systemctl --failed |
| Analyse rapide des logs | `journalctl -p 3 -xb |
| Rapport combiné | Script qui fait tout ci-dessus + envoi mail |
💬 Retour d’expérience du lecteur
Avez-vous déjà automatisé vos audits ?
Quel outil préférez-vous : awk, jq, ou un script Python ?
Partagez vos astuces dans les commentaires ci-dessous !
🧠 Exercices pratiques
| 1️⃣ Lire un fichier et compter les erreurs | 2️⃣ Supprimer les lignes vides d’un fichier texte |
|---|---|
Utiliser grep et wc -l | Utiliser sed avec une regex |
| 3️⃣ Extraire un champ JSON spécifique | 4️⃣ Créer un log “maintenance” avec tee |
Utiliser jq '.nom_du_champ' | Rediriger sortie et erreur vers un log |
🔗 Recommandations / Autres solutions
🧭 Pour aller plus loin avant ou après ce projet :
Avant de plonger dans les tableaux et structures, jette un œil à ces articles complémentaires :
- 🧠 Bases du scripting Bash — comprendre le shebang, les variables et la structure d’un script.
- ⚙️ Variables et opérateurs en Bash — tout sur les variables spéciales, d’environnement et les opérateurs.
- 🔁 Boucles et conditions en Bash — la logique répétitive : for, while, if, case.
- 🧩 Tableaux, dictionnaires – structures avancées en Bash – Part 4
- 🧠Gestion des erreurs et débogage en Bash – maîtriser la gestion des erreurs Bash, du
set -eautrap ERR– Part 5
Tu peux explorer également :
- ripgrep (
rg) : 10× plus rapide quegrep - fd : alternative moderne à
find - yq : parseur YAML/JSON combiné
- xmlstarlet : plus complet que
xmllint
Et pour centraliser les logs : logrotate, systemd-journal, ou ELK Stack (Elasticsearch, Logstash, Kibana).
🧩 Conclusion
Les fichiers et logs sont les capteurs de ton système.
Les maîtriser, c’est savoir ce qui se passe avant même qu’un incident ne survienne.
Bash, bien utilisé, devient ton outil d’audit permanent.
Et vous, comment gérez-vous vos flux et logs Bash ?
Partagez vos pratiques en commentaire !
✅ Solutions des exercices

1️⃣
grep -i "error" monfichier.log | wc -l
2️⃣
sed -i '/^$/d' fichier.txt
3️⃣
jq '.nom_du_champ' data.json
4️⃣
commande | tee maintenance.log
