Vous venez de vous connecter à votre serveur Linux pour la première fois. Le terminal noir s'affiche, le curseur clignote, et vous vous demandez : "Et maintenant, je fais quoi ?" 😰
Si taper ls et cd est le maximum de votre répertoire de commandes, cet article est fait pour vous. Et même si vous connaissez déjà les bases, je parie qu'il y a des astuces ici qui vont vous faire gagner des heures.
Vous n'avez pas besoin de connaître 10 000 commandes. Une cinquantaine bien maîtrisées suffisent pour 95% de l'administration serveur.
Dans ce guide, on va apprendre les commandes par cas d'usage réel, pas juste une liste alphabétique ennuyeuse que vous allez oublier dans 5 minutes.
Ce que vous allez apprendre :
-
Les commandes pour naviguer et explorer votre serveur
-
Gérer les fichiers et dossiers comme un pro
-
Surveiller les performances (CPU, RAM, disque)
-
Gérer les processus et services
-
Diagnostiquer et résoudre les problèmes
-
Sécuriser et maintenir votre serveur
-
Les raccourcis qui vont vous sauver la vie
Allez, on y va ! 🚀
Niveau 0 : Survivre dans le terminal (les bases absolues)
Cette section couvre les commandes minimales à connaître pour ne pas être perdu dans le terminal. Vous trouverez des explications simples suivies d'exemples de commandes.
Si vous débutez complètement, commençons par le strict minimum pour ne pas paniquer.
Se repérer : Où suis-je ?
Ici on explique comment savoir où vous êtes et ce que contient le dossier courant. Les commandes ci‑dessous montrent comment afficher le répertoire de travail et lister les fichiers.
Avant d'exécuter des commandes, il est crucial de savoir où vous vous trouvez dans l'arborescence et ce que contient le dossier courant. Voici les commandes essentielles pour afficher votre répertoire de travail et lister son contenu.
# Afficher le répertoire actuel (Print Working Directory)
pwd
# Exemple de sortie : /home/votre-user
# Lister les fichiers et dossiers
ls
# Version détaillée
ls -la
# -l : format long (permissions, propriétaire, taille, date)
# -a : afficher les fichiers cachés (ceux qui commencent par .)
# -h : tailles lisibles (Ko, Mo, Go)
ls -lah
# Lister seulement les dossiers
ls -d */
Astuce pro : Créez un alias pour ls avec vos options préférées :
alias ll='ls -lah'
# Ajoutez ça dans ~/.bashrc pour le rendre permanent
Se déplacer : Navigation
Cette mini-section montre les commandes de navigation de base dans l'arborescence. Exécutez-les pour vous déplacer entre dossiers.
# Aller dans un dossier
cd /var/www
# Revenir au dossier précédent
cd -
# Aller à la racine du système
cd /
# Aller dans votre dossier personnel
cd ~
# ou simplement
cd
# Remonter d'un niveau
cd ..
# Remonter de deux niveaux
cd ../..
Astuce clavier : Utilisez Tab pour l'autocomplétion. Tapez cd /va puis Tab, ça complète automatiquement en /var/. Ça marche pour tout !
Obtenir de l'aide
Ces commandes vous apprennent à trouver de l'aide et des informations sur les commandes disponibles. Elles sont essentielles quand vous êtes coincé.
# Manuel d'une commande
man ls
# Naviguer : flèches, espace (page suivante), q (quitter)
# Aide rapide
ls --help
# Chercher une commande (exemple : "comment copier des fichiers ?")
man -k copy
# ou
apropos copy
# Savoir où se trouve une commande
which python3
# Sortie : /usr/bin/python3
# Info sur une commande (plus détaillé que which)
type python3
Vous êtes perdu dans un écran ?
-
q: quitter (fonctionne dans man, less, etc.) -
Ctrl + C: arrêter une commande en cours -
Ctrl + Z: mettre en pause (reprendre avecfg) -
Ctrl + D: déconnecter (logout)
Niveau 1 : Gérer les fichiers et dossiers
Cette section présente les commandes courantes pour créer, copier, déplacer et supprimer fichiers et dossiers. Des exemples pratiques accompagnent chaque sous-titre.
Créer, copier, déplacer, supprimer
Les commandes suivantes montrent comment manipuler fichiers et répertoires en ligne de commande, avec des options pour être sûr de ce que vous faites.
# Créer un fichier vide
touch fichier.txt
# Créer un dossier
mkdir mon-dossier
# Créer des dossiers imbriqués (avec les parents)
mkdir -p projet/app/images-data/css
# Copier un fichier
cp fichier.txt fichier-copie.txt
# Copier un dossier (récursif)
cp -r mon-dossier mon-dossier-copie
# Copier en gardant les permissions et dates
cp -a mon-dossier mon-dossier-backup
# Déplacer/renommer
mv ancien-nom.txt nouveau-nom.txt
mv fichier.txt /var/www/
# Supprimer un fichier
rm fichier.txt
# Supprimer un dossier (récursif)
rm -r mon-dossier
# Supprimer sans confirmation (ATTENTION, DANGEREUX !)
rm -rf mon-dossier
# Le fameux "rm -rf /" qui peut détruire votre système 💀
# Ne faites JAMAIS ça !
# Supprimer de manière interactive (demande confirmation)
rm -i fichier.txt
Astuce sécurité : Créez un alias pour éviter les accidents :
alias rm='rm -i'
Lire et éditer des fichiers
Ici on montre comment afficher, suivre et éditer des fichiers texte depuis le terminal. Les commandes vont du simple affichage aux éditeurs.
# Afficher tout le contenu d'un fichier
cat fichier.txt
# Afficher avec numéros de ligne
cat -n fichier.txt
# Afficher les 10 premières lignes
head fichier.txt
# Les 20 premières
head -n 20 fichier.txt
# Afficher les 10 dernières lignes
tail fichier.txt
# Suivre un fichier en temps réel (logs)
tail -f /var/log/nginx/access.log
# Sortir avec Ctrl+C
# Afficher page par page (scroller)
less fichier.txt
# Naviguer : espace (page suivante), b (page précédente), q (quitter)
# Chercher dans un fichier avec less
less fichier.txt
# Tapez / puis votre recherche, Entrée
# n : occurrence suivante, N : occurrence précédente
# Éditer avec nano (éditeur simple)
nano fichier.txt
# Ctrl+X pour quitter, Y pour sauvegarder
# Éditer avec vim (plus puissant mais courbe d'apprentissage)
vim fichier.txt
# i : mode insertion, Esc : mode commande, :wq : sauvegarder et quitter, :q! : quitter sans sauvegarder
Débutant ? Utilisez nano. À l'aise ? Apprenez vim, vous me remercierez plus tard.
Chercher des fichiers
Cette partie explique comment localiser des fichiers par nom, taille, date ou contenu. Les combinaisons find/grep sont incontournables.
# Chercher par nom
find /var/www -name "*.py"
# Chercher des fichiers modifiés dans les dernières 24h
find /var/log -type f -mtime -1
# Chercher des fichiers plus gros que 100Mo
find / -type f -size +100M
# Chercher et exécuter une commande sur chaque résultat
find /tmp -name "*.tmp" -exec rm {} \;
# Chercher dans le contenu des fichiers
grep "erreur" fichier.log
# Chercher récursivement dans tous les fichiers
grep -r "TODO" /var/www/mon-app/
# Chercher en ignorant la casse
grep -i "error" fichier.log
# Afficher le numéro de ligne
grep -n "error" fichier.log
# Compter les occurrences
grep -c "error" fichier.log
# Chercher plusieurs patterns
grep -E "error|warning|critical" fichier.log
Astuce: grep est ULTRA-PUISSANT. Maîtrisez-le et vous résoudrez 50% de vos problèmes plus vite.
Permissions et propriétaires
Explication courte : cette section détaille comment lire et modifier permissions et propriétaires pour sécuriser vos fichiers. Les commandes chmod, chown et chgrp sont montrées avec des exemples.
# Voir les permissions
ls -l fichier.txt
# Exemple : -rw-r--r-- 1 user group 1234 Jan 15 10:30 fichier.txt
# │││││││││
# │││││││└─ autres : lecture
# │││││└──── groupe : lecture
# │││└────── propriétaire : lecture, écriture
# ││└─────── nombre de liens
# │└──────── type (- = fichier, d = dossier, l = lien)
# Changer les permissions (chmod)
# rwx = 7, rw- = 6, r-x = 5, r-- = 4, --- = 0
chmod 644 fichier.txt # rw-r--r--
chmod 755 script.sh # rwxr-xr-x
chmod +x script.sh # Ajouter l'exécution
# Permissions récursives
chmod -R 755 /var/www/mon-app
# Changer le propriétaire
chown user:group fichier.txt
# Récursif
chown -R user:group /var/www/mon-app
# Changer seulement le groupe
chgrp nginx fichier.txt
Rappel important :
-
chmod 777= TOUT LE MONDE peut TOUT faire (DANGER !) -
chmod 755= Proprio full access, autres lecture/exécution (bien pour les scripts) -
chmod 644= Proprio lecture/écriture, autres lecture (bien pour les fichiers)
Niveau 2 : Surveiller et diagnostiquer
Cette partie regroupe les outils de monitoring et diagnostic pour analyser CPU, RAM, disque et logs. Des commandes pratiques suivront pour chaque besoin.
Monitoring système en temps réel
Introduction : présente les outils interactifs et non interactifs pour observer processus, mémoire et disque en temps réel. Utilisez-les pour repérer rapidement les goulets d'étranglement.
# Top : processus en temps réel
top
# Trier par CPU : P
# Trier par RAM : M
# Tuer un processus : k puis PID
# Quitter : q
# htop : version améliorée de top (plus lisible)
htop
# F9 : kill, F6 : trier, q : quitter
# Utilisation CPU et RAM en un coup d'œil
free -h
# -h : human-readable (Go, Mo au lieu de bytes)
# Utilisation disque
df -h
# Voir l'utilisation par dossier
du -sh /var/*
# Trier par taille (les plus gros en dernier)
du -sh /var/* | sort -h
# Trouver ce qui bouffe tout votre disque
du -ah /var | sort -h | tail -20
# Version interactive pour explorer
ncdu /var
# Naviguez avec les flèches, d : delete, q : quitter
Scénario réel : "Mon disque est plein, WTF ?"
# 1. Voir quel disque est plein
df -h
# 2. Trouver les gros dossiers
du -sh /* | sort -h | tail -10
# 3. Explorer le coupable
ncdu /var
# 4. Supprimer les vieux logs, backups, etc.
Informations système
Court résumé : comment obtenir des informations générales sur le noyau, la distribution, l'uptime et les connexions. Les commandes suivantes fournissent un état rapide du serveur.
# Infos générales du système
uname -a
# Quelle distribution Linux ?
cat /etc/os-release
# Uptime (depuis combien de temps le serveur tourne)
uptime
# Qui est connecté actuellement
w
# ou
who
# Historique des connexions
last
# Voir les logs système
journalctl -xe
# -x : avec explications, -e : à la fin
# Logs d'un service spécifique
journalctl -u nginx
# Logs en temps réel
journalctl -f
# Logs depuis aujourd'hui
journalctl --since today
# Logs entre deux dates
journalctl --since "2024-01-15" --until "2024-01-16"
Réseau et connectivité
Bref aperçu : présente les commandes pour vérifier interfaces, connectivité, ports et télécharger des ressources. Utile pour diagnostiquer problèmes réseau.
# Voir les interfaces réseau
ip addr
# ou l'ancienne commande
ifconfig
# Tester la connexion à un serveur
ping google.com
# Arrêter avec Ctrl+C
# Limiter le nombre de pings
ping -c 4 google.com
# Tracer la route vers un serveur
traceroute google.com
# Ports ouverts et connexions
ss -tulnp
# -t : TCP, -u : UDP, -l : listening, -n : numérique, -p : processus
# Version ancienne (encore utilisée)
netstat -tulnp
# Tester si un port est ouvert
nc -zv google.com 443
# ou
telnet google.com 443
# Télécharger un fichier
wget https://example.com/fichier.zip
# Version plus moderne et puissante
curl -O https://example.com/fichier.zip
# Tester une API
curl https://api.example.com/status
# POST request
curl -X POST -d "param1=value1" https://api.example.com/endpoint
# Voir les headers HTTP
curl -I https://example.com
Troubleshooting réseau typique :
# 1. Le serveur est-il accessible ?
ping mon-serveur.com
# 2. Le port est-il ouvert ?
nc -zv mon-serveur.com 80
# 3. Qu'est-ce qui écoute sur ce port ?
ss -tulnp | grep :80
# 4. Firewall bloque ?
sudo firewall-cmd --list-all
Niveau 3 : Gérer les processus et services
Cette section regroupe tout ce qui concerne la gestion des processus et des services systemd. Vous verrez comment lister, tuer, backgrounder et gérer les services.
Processus en cours
Explication : méthodes pour lister, filtrer et contrôler les processus en cours d'exécution. Utile pour arrêter les tâches problématiques.
# Voir tous les processus
ps aux
# Chercher un processus spécifique
ps aux | grep nginx
# Arbre des processus
pstree
# Détails d'un processus
ps -p PID -f
# Tuer un processus
kill PID
# Tuer de force (si kill ne suffit pas)
kill -9 PID
# Tuer par nom
pkill nginx
# Tuer tous les processus d'un utilisateur
pkill -u username
# Lancer une commande en arrière-plan
./mon-script.sh &
# Voir les jobs en arrière-plan
jobs
# Ramener un job au premier plan
fg
# Mettre en arrière-plan
bg
# Lancer une commande qui survit à la déconnexion
nohup ./mon-script.sh &
# Mieux : utiliser screen ou tmux
screen -S ma-session
# Détacher : Ctrl+A puis D
# Ré-attacher : screen -r ma-session
Services avec systemd
Courte explication : commandes systemctl et journalctl pour démarrer, stopper, recharger et diagnostiquer des services. Indispensable pour gérer les daemons modernes.
# Démarrer un service
sudo systemctl start nginx
# Arrêter
sudo systemctl stop nginx
# Redémarrer
sudo systemctl restart nginx
# Recharger la config sans redémarrer
sudo systemctl reload nginx
# Voir le statut
sudo systemctl status nginx
# Activer au démarrage
sudo systemctl enable nginx
# Désactiver au démarrage
sudo systemctl disable nginx
# Lister tous les services
sudo systemctl list-units --type=service
# Lister les services qui démarrent au boot
sudo systemctl list-unit-files --state=enabled
# Voir les logs d'un service
sudo journalctl -u nginx -n 50
# Logs en temps réel
sudo journalctl -u nginx -f
# Recharger systemd après modif d'un .service
sudo systemctl daemon-reload
Scénario typique : "Mon app ne démarre pas"
# 1. Vérifier le statut
sudo systemctl status mon-app
# 2. Voir les logs
sudo journalctl -u mon-app -n 100
# 3. Vérifier la config du service
sudo cat /etc/systemd/system/mon-app.service
# 4. Tester manuellement
cd /chemin/vers/app
./start.sh
# 5. Corriger, puis
sudo systemctl daemon-reload
sudo systemctl restart mon-app
Niveau 4 : Gestion des paquets et mises à jour
Cette section montre comment gérer paquets et mises à jour selon la distribution (DNF ou APT). Suivez la partie correspondant à votre OS.
Avec DNF (Alma Linux, Rocky, Fedora, RHEL)
Brève description : commandes DNF pour mettre à jour, installer, supprimer et gérer l'historique des paquets.
# Mettre à jour la liste des paquets
sudo dnf check-update
# Mettre à jour tout le système
sudo dnf update -y
# Installer un paquet
sudo dnf install -y nginx
# Désinstaller
sudo dnf remove nginx
# Chercher un paquet
dnf search python
# Info sur un paquet
dnf info nginx
# Lister les paquets installés
dnf list installed
# Nettoyer les vieux paquets
sudo dnf autoremove
# Voir l'historique des installations
dnf history
# Annuler une installation (rollback)
sudo dnf history undo last
Avec APT (Debian, Ubuntu)
Explication courte : commandes apt pour mettre à jour et gérer paquets sur Debian/Ubuntu. Inclut update, upgrade, install et purge.
# Mettre à jour la liste
sudo apt update
# Mettre à jour les paquets
sudo apt upgrade -y
# Full upgrade (peut supprimer des paquets)
sudo apt full-upgrade
# Installer
sudo apt install nginx
# Désinstaller
sudo apt remove nginx
# Désinstaller avec les fichiers de config
sudo apt purge nginx
# Chercher
apt search python
# Info
apt show nginx
# Nettoyer
sudo apt autoremove
sudo apt autoclean
Bonne pratique : Avant toute modif importante, faites :
sudo dnf update -y
# ou
sudo apt update && sudo apt upgrade -y
Niveau 5 : Compression et archives
Court résumé : commandes pour archiver et compresser fichiers/dossiers, avec exemples tar, gzip, zip et options pratiques.
# Créer une archive tar
tar -czf archive.tar.gz /chemin/vers/dossier
# -c : create, -z : gzip, -f : file
# Exclure des fichiers
tar -czf archive.tar.gz --exclude='*.log' /var/www
# Extraire
tar -xzf archive.tar.gz
# -x : extract
# Voir le contenu sans extraire
tar -tzf archive.tar.gz
# Compresser un fichier (gzip)
gzip fichier.txt
# Crée fichier.txt.gz et supprime l'original
# Décompresser
gunzip fichier.txt.gz
# Garder l'original en compressant
gzip -k fichier.txt
# Compresser un dossier (zip)
zip -r archive.zip /chemin/vers/dossier
# Décompresser
unzip archive.zip
# Voir le contenu
unzip -l archive.zip
Astuce : Sauvegarde rapide avant modif :
tar -czf backup-$(date +%Y%m%d).tar.gz /var/www/mon-app
Niveau 6 : Gestion des utilisateurs
Explication : création, modification et suppression d'utilisateurs, gestion des groupes et droits sudo. Indispensable pour l'administration multi‑utilisateurs.
# Créer un utilisateur
sudo adduser nouveau-user
# Donner les droits sudo
sudo usermod -aG wheel nouveau-user # Alma/Rocky/RHEL
sudo usermod -aG sudo nouveau-user # Ubuntu/Debian
# Changer le mot de passe
sudo passwd nouveau-user
# Supprimer un utilisateur
sudo userdel nouveau-user
# Supprimer avec son dossier home
sudo userdel -r nouveau-user
# Voir les groupes d'un utilisateur
groups nouveau-user
# Lister tous les utilisateurs
cat /etc/passwd
# Lister tous les groupes
cat /etc/group
# Changer d'utilisateur
su - autre-user
# Exécuter une commande en tant qu'autre utilisateur
sudo -u autre-user commande
Niveau 7 : Sécurité et firewall
Cette section détaille les outils de firewall (firewalld, UFW) et fail2ban pour protéger votre serveur. Les commandes permettent d'ajouter/supprimer règles et diagnostiquer.
Firewalld (Alma/Rocky/RHEL)
Brève explication : commandes pour gérer zones, services et ports avec firewalld, plus rechargement des règles permanentes.
# Voir le statut
sudo firewall-cmd --state
# Voir les zones actives
sudo firewall-cmd --get-active-zones
# Voir toutes les règles
sudo firewall-cmd --list-all
# Autoriser un service
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Autoriser un port
sudo firewall-cmd --permanent --add-port=8080/tcp
# Bloquer une IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
# Recharger
sudo firewall-cmd --reload
# Supprimer une règle
sudo firewall-cmd --permanent --remove-service=http
UFW (Ubuntu/Debian)
Courte description : commandes simples pour activer UFW, autoriser/deny ports et IPs, et gérer les règles numérotées.
# Activer
sudo ufw enable
# Statut
sudo ufw status
# Autoriser SSH (FAITES ÇA AVANT D'ACTIVER !)
sudo ufw allow ssh
# Autoriser HTTP et HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Autoriser une IP spécifique
sudo ufw allow from 192.168.1.100
# Bloquer une IP
sudo ufw deny from 192.168.1.100
# Voir les règles numérotées
sudo ufw status numbered
# Supprimer une règle
sudo ufw delete 2
Fail2ban (bloquer les attaques brute-force)
Explication : commandes pour vérifier statut de fail2ban, lister les jails et débannir des IPs en cas de faux positifs.
# Voir le statut
sudo systemctl status fail2ban
# Voir les jails actives
sudo fail2ban-client status
# Détails d'une jail
sudo fail2ban-client status sshd
# Débannir une IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
Niveau 8 : Astuces et raccourcis qui changent la vie
Court résumé : trucs pour l'historique, redirections, pipes, variables, alias et autres petites optimisations qui accélèrent le travail quotidien.
Historique des commandes
Explication : comment rechercher et réexécuter rapidement des commandes depuis l'historique, et nettoyer l'historique si nécessaire.
# Voir l'historique
history
# Exécuter la commande #123
!123
# Exécuter la dernière commande
!!
# Exécuter la dernière commande qui commence par "git"
!git
# Rechercher dans l'historique
Ctrl + R
# Tapez quelques lettres, ça trouve la commande
# Ctrl + R encore pour la précédente
# Entrée pour exécuter
# Effacer l'historique (si vous avez tapé un mot de passe par erreur)
history -c
Redirections et pipes
Bref aperçu : principes de redirection des sorties et erreurs, pipes pour chaîner commandes et exemples utiles pour le traitement de flux.
# Rediriger la sortie vers un fichier (écrase)
ls > liste-fichiers.txt
# Rediriger en ajoutant à la fin
ls >> liste-fichiers.txt
# Rediriger les erreurs
commande 2> erreurs.log
# Rediriger sortie ET erreurs
commande &> tout.log
# Pipe : passer la sortie d'une commande à une autre
ls -la | grep ".txt"
# Compter les lignes
cat fichier.txt | wc -l
# Chaîner plusieurs pipes
ps aux | grep nginx | awk '{print $2}'
# Ignorer la sortie
commande > /dev/null 2>&1
Exemple puissant :
# Trouver les 10 fichiers les plus gros
du -ah /var | sort -rh | head -10
# Compter le nombre d'erreurs dans un log
grep -c "ERROR" /var/log/mon-app.log
# Voir les IPs qui se connectent le plus
sudo cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
Exécution conditionnelle
Explication : opérateurs && et || pour enchaîner des commandes selon le succès ou l'échec, et le point-virgule pour exécuter toujours.
# Exécuter la 2e commande SEULEMENT si la 1ère réussit
mkdir nouveau-dossier && cd nouveau-dossier
# Exécuter la 2e commande SEULEMENT si la 1ère échoue
ping -c 1 google.com || echo "Pas de connexion internet"
# Exécuter plusieurs commandes dans tous les cas
apt update ; apt upgrade ; apt autoremove
Variables et boucles rapides
Court résumé : définition de variables et boucles simples en bash pour automatiser des petites tâches répétitives.
# Créer une variable
MA_VAR="Hello"
echo $MA_VAR
# Boucle simple
for i in {1..5}; do echo "Numéro $i"; done
# Boucle sur des fichiers
for file in *.txt; do echo "Traitement de $file"; done
# Renommer plusieurs fichiers
for file in *.txt; do mv "$file" "${file%.txt}.md"; done
Alias utiles
Explication : exemples d'alias pratiques à ajouter à ~/.bashrc pour gagner du temps. Rechargez le fichier après modification.
Ajoutez ça dans ~/.bashrc ou ~/.bash_aliases :
# Raccourcis de navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ll='ls -lah'
alias la='ls -A'
# Sécurité
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Systemd raccourcis
alias start='sudo systemctl start'
alias stop='sudo systemctl stop'
alias restart='sudo systemctl restart'
alias status='sudo systemctl status'
# Mise à jour rapide
alias update='sudo dnf update -y' # ou apt pour Ubuntu
# Voir les ports ouverts
alias ports='ss -tulnp'
# Top 10 commandes utilisées
alias top10='history | awk "{print \$2}" | sort | uniq -c | sort -rn | head -10'
# Taille des dossiers
alias duh='du -sh * | sort -h'
# IP publique
alias myip='curl ifconfig.me'
# Après avoir modifié, rechargez
source ~/.bashrc
Niveau 9 : Scripts bash utiles
Introduction : exemples de scripts bash pour backup et monitoring. Ils montrent des bonnes pratiques (logs, suppression ancienne, cron).
Script de backup automatique
Courte explication : script simple de sauvegarde compressée avec rotation (suppression des backups anciens). Rendez-le exécutable et planifiez‑le avec cron.
#!/bin/bash
# backup.sh - Sauvegarde automatique
BACKUP_DIR="/var/backups/mon-app"
SOURCE_DIR="/var/www/mon-app"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
# Créer le dossier si nécessaire
mkdir -p $BACKUP_DIR
# Créer l'archive
echo "Backup en cours..."
tar -czf $BACKUP_FILE $SOURCE_DIR
# Supprimer les backups de plus de 7 jours
find $BACKUP_DIR -type f -name "backup_*.tar.gz" -mtime +7 -delete
echo "Backup terminé : $BACKUP_FILE"
Rendez-le exécutable et automatisez :
chmod +x backup.sh
# Ajoutez dans crontab (tous les jours à 2h)
crontab -e
0 2 * * * /chemin/vers/backup.sh >> /var/log/backup.log 2>&1
Script de monitoring
Explication : script d'état rapide pour vérifier uptime, disque, RAM et services critiques. Adaptable à vos besoins.
#!/bin/bash
# check-server.sh - Vérifications basiques
echo "=== État du serveur ==="
echo ""
# Uptime
echo "Uptime:"
uptime
echo ""
# Utilisation disque
echo "Disque:"
df -h | grep -vE '^tmpfs|^devtmpfs'
echo ""
# Utilisation RAM
echo "RAM:"
free -h
echo ""
# Services critiques
echo "Services:"
for service in nginx postgresql mon-app; do
if systemctl is-active --quiet $service; then
echo "✅ $service : OK"
else
echo "❌ $service : DOWN"
fi
done
echo ""
# Top 5 processus CPU
echo "Top 5 CPU:"
ps aux --sort=-%cpu | head -6
echo ""
# Top 5 processus RAM
echo "Top 5 RAM:"
ps aux --sort=-%mem | head -6
Niveau 10 : Commandes avancées pour les pros
Bref aperçu : commandes avancées pour manipulation de texte, monitoring approfondi et diagnostic bas niveau. À maîtriser pour l'administration avancée.
Manipulation de texte avec awk et sed
Explication : awk et sed permettent d'extraire, filtrer et transformer des flux texte. Voici des usages courants pour logs et sorties de commandes.
# Extraire une colonne spécifique
ps aux | awk '{print $1, $11}'
# Filtrer par condition
df -h | awk '$5 > 80 {print $0}' # Disques > 80% pleins
# Remplacer du texte (sed)
sed 's/ancien/nouveau/g' fichier.txt
# Modifier un fichier en place
sed -i 's/ancien/nouveau/g' fichier.txt
# Supprimer les lignes vides
sed '/^$/d' fichier.txt
# Afficher seulement les lignes 10 à 20
sed -n '10,20p' fichier.txt
Monitoring avancé
Court résumé : outils pour lsof, iostat, iftop, strace et autres utilitaires pour diagnostiquer I/O, réseau et comportement des processus.
# Voir les fichiers ouverts par un processus
lsof -p PID
# Voir ce qui accède à un fichier
lsof /var/log/nginx/access.log
# Voir l'utilisation I/O disque
iostat -x 2 # Refresh toutes les 2s
# Voir l'utilisation réseau en temps réel
iftop
# ou
nload
# Strace : déboguer un processus
strace -p PID
Gestion de la mémoire
Explication : commandes pour inspecter et, en dernier recours, libérer caches ou diagnostiquer OOM. À utiliser avec précaution.
# Vider le cache (si vraiment nécessaire)
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
# Voir l'utilisation mémoire détaillée
cat /proc/meminfo
# OOM killer logs (Out Of Memory)
dmesg | grep -i "killed process"
# Voir le swap usage
swapon --show
Commandes par scénario réel
Cette section regroupe checklists et commandes à suivre selon des situations fréquentes (lenteur, SSH, disque plein, app qui ne démarre pas).
"Mon site est lent"
Court guide : étapes à suivre pour identifier CPU, mémoire, disque, I/O et problèmes réseau, avec commandes pour chaque étape.
# 1. CPU surchargé ?
top
# ou
htop
# 2. Quel processus bouffe tout ?
ps aux --sort=-%cpu | head -10
# 3. Problème de mémoire ?
free -h
# 4. Disque plein ?
df -h
# 5. I/O disque saturé ?
iostat -x 2
# 6. Connexions réseau anormales ?
ss -s
# 7. Logs d'erreurs ?
sudo journalctl -p err -n 100
"Je ne peux plus me connecter en SSH"
Explication : procédure de dépannage SSH depuis une console alternative, incluant vérification du service SSH, firewall et fail2ban ainsi que logs et config.
Sur un autre terminal/console du provider :
# 1. SSH tourne ?
sudo systemctl status sshd
# 2. Redémarrer SSH
sudo systemctl restart sshd
# 3. Firewall bloque ?
sudo firewall-cmd --list-all
# Le port SSH est autorisé ?
# 4. Fail2ban vous a banné ?
sudo fail2ban-client status sshd
# Vous débannir
sudo fail2ban-client set sshd unbanip VOTRE-IP
# 5. Vérifier la config SSH
sudo nano /etc/ssh/sshd_config
# Vérifier que Port, PermitRootLogin, etc. sont corrects
# 6. Logs SSH
sudo tail -f /var/log/secure # RHEL/Alma
# ou
sudo tail -f /var/log/auth.log # Ubuntu/Debian
"Mon disque est plein"
Résumé : étapes pour localiser l'utilisation disque, nettoyer logs et caches, et vérifier images/containers Docker.
# 1. Où est le problème ?
df -h
# 2. Quels sont les gros dossiers ?
du -sh /* | sort -h
# 3. Exploration interactive
ncdu /
# 4. Vieux logs ?
du -sh /var/log/*
# Compresser ou supprimer les vieux logs
sudo find /var/log -name "*.log" -type f -mtime +30 -delete
# 5. Paquets inutiles ?
sudo dnf autoremove
# ou
sudo apt autoremove
# 6. Cache Docker/containers ?
docker system df
docker system prune -a
# 7. Journald trop gros ?
sudo journalctl --disk-usage
# Nettoyer (garder seulement 3 jours)
sudo journalctl --vacuum-time=3d
"L'app ne démarre pas"
Explication : checklist pour diagnostiquer une application qui refuse de démarrer : statut systemd, logs, configuration, dépendances, ports et SELinux.
# 1. Statut du service
sudo systemctl status mon-app
# 2. Logs récents
sudo journalctl -u mon-app -n 100 --no-pager
# 3. Erreur de config ?
sudo nano /etc/systemd/system/mon-app.service
# 4. Tester manuellement
cd /chemin/app
./start-script.sh
# 5. Dépendance manquante ?
ldd /chemin/vers/binaire
# 6. Port déjà utilisé ?
sudo ss -tulnp | grep :PORT
# 7. Permissions ?
ls -la /chemin/app
# 8. SELinux bloque ?
sudo ausearch -m avc -ts recent
Checklist de maintenance serveur
Cette checklist propose tâches quotidiennes, hebdomadaires et mensuelles pour garder un serveur sain et sécurisé. Suivez-la et automatisez ce qui peut l'être.
Quotidienne (automatisée)
Court texte : vérifications rapides à automatiser pour alerter sur disque plein, services down ou consommation mémoire anormale.
# Vérifier l'espace disque
df -h | grep -vE '^tmpfs|^devtmpfs' | awk '$5 > 80 {print $0}'
# Vérifier la RAM
free -h
# Services critiques up ?
systemctl is-active nginx postgresql mon-app
Hebdomadaire
Explication : tâches à faire chaque semaine : mises à jour, revue des logs d'erreurs, nettoyage journald et vérification des backups.
# Mises à jour de sécurité
sudo dnf update -y
# ou
sudo apt update && sudo apt upgrade -y
# Vérifier les logs d'erreurs
sudo journalctl -p err --since "1 week ago"
# Nettoyer les vieux logs
sudo journalctl --vacuum-time=30d
# Backup
./backup-script.sh
Mensuelle
Bref rappel : audits mensuels des utilisateurs, connexions SSH, ports ouverts, fail2ban, et test de restauration des backups.
# Vérifier les utilisateurs
cat /etc/passwd
# Vérifier les connexions SSH
last | head -20
# Audit des ports ouverts
sudo ss -tulnp
# Vérifier fail2ban
sudo fail2ban-client status
# Tester les backups (restaurer un backup pour vérifier)
Les erreurs de débutant à éviter
Introduction : liste des erreurs classiques et comment les éviter (backups, tests, précautions avec rm/chmod). Lisez et appliquez ces recommandations.
rm -rf / ou rm -rf /*
Rappel succinct : jamais lancer ces commandes, elles détruisent le système. Toujours vérifier ce que vous supprimez.
JAMAIS. Vous détruisez tout votre système.
chmod 777 -R /
Explication : éviter de rendre tout accessible en écriture/exécution — cela casse la sécurité et peut compromettre le système.
Pareil. Vous cassez toutes les permissions système.
Modifier des fichiers système sans backup
Conseil : toujours copier le fichier avant modification pour pouvoir revenir en arrière.
# TOUJOURS faire ça avant :
sudo cp /etc/important.conf /etc/important.conf.backup
Oublier de tester avant de redémarrer un service
Rappel pratique : tester la configuration (ex. nginx -t) avant de recharger ou redémarrer.
# Exemple nginx
sudo nginx -t # AVANT de faire reload/restart
Ne pas vérifier avant de supprimer
Astuce : lister d'abord pour éviter les catastrophes, puis supprimer.
# Mauvais
rm -rf *.txt
# Bon
ls *.txt # Vérifier d'abord ce qui sera supprimé
rm -i *.txt # Puis supprimer avec confirmation
Travailler en root pour tout
Rappel de sécurité : préférez sudo et limitez l'usage de root.
Utilisez sudo seulement quand nécessaire.
Ne pas lire les messages d'erreur
Conseil : les erreurs donnent souvent la solution. Prenez le temps de les lire.
Les erreurs vous DISENT ce qui ne va pas. Lisez-les !
Ressources pour aller plus loin
Courte introduction : suggestions d'outils et d'environnements pour approfondir vos compétences, plus liens et pratiques recommandées.
Commandes à apprendre ensuite
-
tmux/screen: Sessions terminales persistantes -
rsync: Synchronisation de fichiers puissante -
jq: Parser du JSON en ligne de commande -
git: Versionning de code (essentiel) -
docker: Containerisation -
ansible: Automatisation de serveurs
Où pratiquer
Suggestions : terrains de jeu pour pratiquer — VPS, VM, OverTheWire ou containers Docker.
-
Votre propre VPS : Le meilleur terrain de jeu voir mon guide
-
VM locale : VirtualBox ou VMware
-
OverTheWire : Wargames Linux (gratuit, génial)
-
Serveur de test : Container Docker avec Linux
Aide-mémoire à imprimer
Conseil : créez votre cheat sheet avec les commandes les plus utiles et placez-la à portée de main.
Créez votre propre cheat sheet avec VOS commandes les plus utilisées. Mettez-la en fond d'écran ou imprimez-la.
Conclusion : De débutant à ninja du terminal 🥷
Conclusion courte : résumé des acquis et conseils finaux pour progresser. Restez curieux et pratiquez régulièrement.
Voilà ! Vous avez maintenant un arsenal de commandes pour gérer n'importe quel serveur Linux.
Ce qu'on a couvert :
-
Navigation et gestion de fichiers
-
Monitoring et diagnostic
-
Gestion des processus et services
-
Sécurité et firewall
-
Astuces de productivité
-
Résolution de problèmes réels
Les commandements du sysadmin :
-
Toujours faire un backup avant une modif importante
-
Lire les logs quand quelque chose ne marche pas
-
Tester les commandes destructives (rm, chmod) avant de valider
-
Utiliser
sudoavec parcimonie -
Automatiser les tâches répétitives
-
Documenter ce que vous faites
-
Apprendre une nouvelle commande par semaine
Rappelez-vous : Vous n'avez pas besoin de TOUT connaître. Maîtrisez les 20% de commandes qui couvrent 80% des besoins. Le reste, Google et man sont vos amis.
La vraie compétence, c'est de savoir quoi chercher et comment debugger. Avec les bases de cet article, vous y êtes ! 💪
Vous avez une commande préférée que j'ai oubliée ? Un scénario que je n'ai pas couvert ? Partagez en commentaire ! Et si cet article vous a aidé, partagez-le avec d'autres devs qui débutent sur Linux. 😉
Bon terminal, et que la ligne de commande soit avec vous ! 🐧✨
Articles connexes :

Laisser un commentaire