DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesScripting Bash et administration système Linux

Module

Scripting Bash, outils de traitement de texte, tâches planifiées et administration système.

  • 2h
  • Avancé
  • 5 exercices
Voir les exercices

Formation 100 % Linux

Tous les modules nécessitent un environnement Linux. Si vous êtes sur Windows, installez d'abord WSL (Windows Subsystem for Linux) avant de continuer.

Scripting Bash et administration système Linux


🎯 Objectifs

  • ✅ Écrire des scripts Bash complets et robustes
  • ✅ Maîtriser les outils de traitement de texte (awk, sed, sort, cut)
  • ✅ Planifier des tâches avec cron
  • ✅ Gérer les services avec systemd
  • ✅ Appliquer les bonnes pratiques de scripting

📌 Prérequis

Modules Linux Débutant et Linux Intermédiaire complétés (navigation, permissions, redirections, pipes).


🔧 Scripting Bash

Premier script

bash
#!/bin/bash
# Mon premier script
echo "Bonjour, $(whoami) !"
echo "Nous sommes le $(date +%Y-%m-%d)"
bash
chmod +x mon_script.sh
./mon_script.sh

💡 La première ligne #!/bin/bash (shebang) indique quel interpréteur utiliser.

Variables

bash
nom="DevOps"             # Pas d'espace autour du =
echo "Bonjour $nom"      # Double quotes : interprète les variables
echo 'Bonjour $nom'      # Simple quotes : texte littéral
echo "Home : ${HOME}"    # Accolades pour délimiter

Substitution de commande et arithmétique

bash
fichiers=$(ls | wc -l)
echo "Il y a $fichiers fichiers ici"

resultat=$((5 + 3))
echo "5 + 3 = $resultat"

Conditions

bash
#!/bin/bash
if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "Nginx est configuré"
elif [ -f "/etc/apache2/apache2.conf" ]; then
    echo "Apache est configuré"
else
    echo "Aucun serveur web trouvé"
fi

Opérateurs de test :

OpérateurDescriptionExemple
-fFichier existe[ -f fichier ]
-dDossier existe[ -d dossier ]
-zChaîne vide[ -z "$var" ]
-eqÉgal (nombres)[ $a -eq $b ]
-gtPlus grand que[ $a -gt 10 ]
=Égal (chaînes)[ "$a" = "oui" ]

Boucles

bash
# Boucle for - liste
for service in nginx mysql redis; do
    echo "Vérification de $service..."
    systemctl is-active "$service"
done
bash
# Boucle for - fichiers
for f in /var/log/*.log; do
    echo "$f : $(wc -l < "$f") lignes"
done
bash
# Boucle while - lire un fichier ligne par ligne
while IFS= read -r ligne; do
    echo "Serveur : $ligne"
done < serveurs.txt

Fonctions

bash
verifier_service() {
    local service="$1"
    if systemctl is-active --quiet "$service"; then
        echo "✅ $service est actif"
    else
        echo "❌ $service est arrêté"
    fi
}

verifier_service nginx
verifier_service mysql

💡 Utilisez local pour limiter la portée des variables dans les fonctions.

Arguments

bash
#!/bin/bash
# Usage : ./deploy.sh <env> <version>
echo "Script : $0"
echo "Environnement : $1"
echo "Version : $2"
echo "Tous les args : $@"
echo "Nombre d'args : $#"

# Validation
if [ $# -lt 2 ]; then
    echo "Usage: $0 <env> <version>"
    exit 1
fi

Mode strict

Ajoutez cette ligne en haut de tous vos scripts :

bash
set -euo pipefail
OptionEffet
-eArrêt immédiat en cas d'erreur
-uErreur si variable non définie
-o pipefailErreur si une commande dans un pipe échoue

Exemple complet - Script de backup

bash
#!/bin/bash
set -euo pipefail

BACKUP_DIR="/backups"
SOURCE="/var/www/html"
DATE=$(date +%Y%m%d_%H%M%S)
ARCHIVE="${BACKUP_DIR}/backup_${DATE}.tar.gz"

mkdir -p "$BACKUP_DIR"
tar -czf "$ARCHIVE" -C "$(dirname "$SOURCE")" "$(basename "$SOURCE")"

# Garder les 7 derniers backups
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete

echo "✅ Backup créé : $ARCHIVE"
echo "   Taille : $(du -sh "$ARCHIVE" | cut -f1)"

📝 Outils de Traitement de Texte

Trier, dédupliquer, couper

bash
sort fichier.txt                   # Trier par ordre alphabétique
sort -rn fichier.txt               # Tri numérique inversé
uniq -c                            # Compter les doublons (après sort)
cut -d':' -f1 /etc/passwd          # Couper par délimiteur (champ 1)

awk - Traitement par colonnes

bash
# Colonne spécifique (ici la 1ère)
awk '{print $1}' access.log

# Filtrer par condition
ps aux | awk '$3 > 5.0 {print $11, $3"%"}'

# Calculer une somme
awk '{sum += $5} END {print "Total:", sum}' data.txt

# Formater la sortie
df -h | awk 'NR>1 {printf "%-20s %s\n", $6, $5}'

sed - Édition de flux

bash
# Remplacer (première occurrence par ligne)
sed 's/ancien/nouveau/' fichier.txt

# Remplacer toutes les occurrences
sed -i 's/http/https/g' config.txt

# Supprimer des lignes
sed '/^#/d' config.txt              # Lignes commençant par #
sed '1,5d' fichier.txt              # Lignes 1 à 5

Exemple concret - Analyse de logs

bash
# Top 10 des IPs dans un access log
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# Nombre de requêtes 404
grep " 404 " access.log | wc -l

# IPs avec plus de 100 requêtes
awk '{print $1}' access.log | sort | uniq -c | sort -rn \
  | awk '$1 > 100 {print $2, $1 " requêtes"}'

⏰ Tâches Planifiées (crontab)

Format cron

┌───── minute (0-59)
│ ┌───── heure (0-23)
│ │ ┌───── jour du mois (1-31)
│ │ │ ┌───── mois (1-12)
│ │ │ │ ┌───── jour de la semaine (0-7, 0=7=dimanche)
│ │ │ │ │
* * * * *  commande

Gérer les tâches

bash
crontab -e        # Éditer les tâches
crontab -l        # Lister les tâches

Exemples

bash
# Backup quotidien à 2h du matin
0 2 * * * /scripts/backup.sh >> /var/log/backup.log 2>&1

# Nettoyage des logs chaque lundi à 6h
0 6 * * 1 find /var/log -name "*.log" -mtime +30 -delete

# Vérification toutes les 5 minutes
*/5 * * * * /scripts/healthcheck.sh

💡 Utilisez crontab.guru pour vérifier vos expressions cron.


🖥️ Services (systemd)

Commandes principales

bash
sudo systemctl start nginx       # Démarrer
sudo systemctl stop nginx        # Arrêter
sudo systemctl restart nginx     # Redémarrer
sudo systemctl status nginx      # État détaillé
sudo systemctl enable nginx      # Activer au démarrage

Consulter les logs

bash
journalctl -u nginx              # Logs d'un service
journalctl -u nginx -f           # Suivre en temps réel
journalctl --since "1 hour ago"  # Logs récents

❌ Erreurs Courantes

ErreurCauseCorrection
command not foundScript non exécutablechmod +x script.sh
unbound variableVariable non définie (mode strict)Initialiser la variable
[: too many argumentsVariable avec espacesUtiliser "$var" (guillemets)
Permission deniedDroits insuffisantschmod ou sudo
unexpected end of filefi, done ou } manquantVérifier la fermeture des blocs
Cron ne s'exécute pasChemins relatifsUtiliser des chemins absolus

📋 Points Clés

ConceptÀ retenir
Shebang#!/bin/bash en première ligne
Mode strictset -euo pipefail toujours
Variables"$var" avec guillemets doubles
awkTraitement par colonnes
sedRechercher/remplacer dans un flux
Croncrontab -e, 5 champs + commande
systemdsystemctl + journalctl

🏋️ Exercices du module

  1. Naviguer et explorer le système de fichiers - Parcourir l'arborescence, lister des fichiers
  2. Gérer les fichiers et répertoires - Créer, copier, déplacer, supprimer
  3. Permissions et propriété des fichiers - chmod, chown, droits utilisateurs
  4. Processus et monitoring système - ps, top, kill, surveillance
  5. Flux, pipes et traitement de texte - stdin, stdout, grep, sed
  6. Projet Capstone : Automatisation et supervision avec Bash - Script Bash complet, awk/sed, cron et service systemd

📚 Ressources

  • man bash - Manuel officiel Bash
  • ExplainShell - Décortique vos commandes
  • crontab.guru - Éditeur visuel de cron
  • ShellCheck - Linter pour scripts Bash

🚀 Prochaines étapes

Vous maîtrisez Linux. Il est temps de versionner votre code :

  1. Débuter avec Git : commits, branches et premier repo - Commits, branches et bases du contrôle de version

Exercices Pratiques

5 exercices pour mettre en pratique

01

08 - Projet Capstone : Automatisation et supervision avec Bash

1hAvancé
02

09 - Scripts Bash : variables, conditions et boucles

35 minutesAvancé
03

10 - Bash avancé : fonctions, tableaux et gestion d'erreurs

35 minutesAvancé
04

11 - Traitement de texte avancé avec awk et sed

40 minutesAvancé
05

12 - Planification avec cron et services systemd

40 minutesAvancé
Retour aux modules

Sur cette page

  • 🎯 Objectifs
  • 📌 Prérequis
  • 🔧 Scripting Bash
  • Premier script
  • Variables
  • Substitution de commande et arithmétique
  • Conditions
  • Boucles
  • Fonctions
  • Arguments
  • Mode strict
  • Exemple complet - Script de backup
  • 📝 Outils de Traitement de Texte
  • Trier, dédupliquer, couper
  • awk - Traitement par colonnes
  • sed - Édition de flux
  • Exemple concret - Analyse de logs
  • ⏰ Tâches Planifiées (crontab)
  • Format cron
  • Gérer les tâches
  • Exemples
  • 🖥️ Services (systemd)
  • Commandes principales
  • Consulter les logs
  • ❌ Erreurs Courantes
  • 📋 Points Clés
  • 🏋️ Exercices du module
  • 📚 Ressources
  • 🚀 Prochaines étapes