1.2 — Ligne de commande
🎯 Objectif : être à l’aise dans un terminal pour naviguer, inspecter des fichiers, enchaîner des commandes et écrire un petit script utilitaire.
À l'issue de cet axe, tu sauras :
- Naviguer dans le système de fichiers (cd, ls, pwd) sans cliquer
- Inspecter et chercher dans des fichiers (cat, less, grep, find)
- Combiner des commandes avec pipes et redirections
- Comprendre les permissions Unix et les modifier
- Écrire un script shell avec variables, conditions et boucles
Débutant
Pourquoi le terminal ?
Section intitulée « Pourquoi le terminal ? »Trois raisons :
- Vitesse :
mv *.jpg images/est plus rapide que glisser-déposer 1 000 photos. - Reproductibilité : tu peux scripter ce que tu fais, le partager, le rejouer.
- Universalité : sur tout serveur Linux, c’est ta seule interface.
Si tu as fait l’axe 1.1 et installé WSL2 (ou tu es sous macOS/Linux), tu peux suivre. Sous PowerShell pur, la plupart des commandes existent en équivalent.
L’invite et l’environnement
Section intitulée « L’invite et l’environnement »Quand tu ouvres un terminal, tu vois quelque chose comme :
user@machine:~/projects$user: ton nom d’utilisateurmachine: nom de la machine~/projects: ton répertoire courant (~= ton home,~/projects=/home/user/projects)$: tu es un utilisateur normal (#apparaît si tu es root)
Les 10 commandes vitales
Section intitulée « Les 10 commandes vitales »Navigation
Section intitulée « Navigation »pwd # print working directory : où suis-je ?ls # list : que contient le dossier ?ls -la # tout afficher, format détaillécd Documents # change directorycd .. # remonter d'un crancd ~ # aller dans ton homecd - # revenir au dossier précédentManipulation de fichiers
Section intitulée « Manipulation de fichiers »mkdir nouveau # créer un dossiermkdir -p a/b/c # créer toute l'arborescencetouch fichier.txt # créer un fichier vide (ou maj de date)cp source dest # copiercp -r dossier/ copie/ # copier récursivement (dossiers)mv ancien nouveau # déplacer ou renommerrm fichier # supprimer (irréversible !)rm -rf dossier/ # supprimer récursivement et de forceInspection
Section intitulée « Inspection »cat fichier.txt # afficher toutless fichier.txt # lire page par page (q pour quitter)head -n 20 fichier.txt # 20 premières lignestail -n 50 fichier.txt # 50 dernières lignestail -f log.txt # suivre en temps réel (très utile pour les logs)wc -l fichier.txt # compter les lignesfile image # deviner le type d'un fichierRecherche
Section intitulée « Recherche »find . -name "*.js" # tous les .js dans le dossier courantfind . -type f -size +10M # fichiers > 10 Mogrep "TODO" fichier.txt # chercher dans un fichiergrep -r "TODO" . # chercher récursivementgrep -rn "TODO" . --include="*.js" # avec numéro de ligne, dans les .jsPipes et redirections
Section intitulée « Pipes et redirections »Le pipe (|) connecte la sortie d’une commande à l’entrée de la suivante. C’est l’idée géniale d’Unix.
# Compter les fichiers .js dans un projetfind . -name "*.js" | wc -l
# Trouver les 10 plus gros fichiersdu -ah . | sort -rh | head -n 10
# Lister les processus consommant le plus de RAMps aux | sort -rk 4 | head -n 5Les redirections envoient la sortie ailleurs que vers l’écran :
echo "ligne 1" > fichier.txt # > écrase le fichierecho "ligne 2" >> fichier.txt # >> ajoute à la fincommande 2> erreurs.log # 2> redirige stderrcommande > sortie.log 2>&1 # tout (stdout + stderr) dans le même fichiercommande < entree.txt # < lit depuis un fichierPermissions Unix
Section intitulée « Permissions Unix »Chaque fichier a un propriétaire, un groupe, et trois ensembles de permissions : lecture (r), écriture (w), exécution (x).
ls -l# -rw-r--r-- 1 alice users 1024 Apr 29 14:00 notes.txt# ↑ ↑↑↑↑↑↑↑↑↑# type | propriétaire | groupe | autresLire les permissions de gauche à droite :
- 1er caractère :
-fichier,ddossier,llien - 3 suivants : permissions du propriétaire
- 3 suivants : permissions du groupe
- 3 derniers : permissions des autres
Modifier
Section intitulée « Modifier »chmod +x script.sh # rendre exécutablechmod 755 script.sh # rwxr-xr-x (notation octale)chown alice fichier # changer le propriétairechgrp devs fichier # changer le groupeNotation octale : rwx = 4+2+1 = 7. Donc 755 = propriétaire rwx, groupe r-x, autres r-x.
| Octal | Permissions | Cas typique |
|---|---|---|
644 | rw-r--r-- | Fichier de config |
755 | rwxr-xr-x | Script ou binaire |
600 | rw------- | Clé SSH privée |
700 | rwx------ | Dossier ~/.ssh |
Variables d’environnement et PATH
Section intitulée « Variables d’environnement et PATH »echo $HOME # /home/aliceecho $PATH # liste des dossiers où le shell cherche les exécutablesexport API_KEY="abc123" # définir une variable pour la sessionunset API_KEY # la supprimerQuand tu tapes node, le shell cherche node dans chaque dossier de $PATH (séparés par :). C’est pour ça que npm install -g doit installer dans un dossier du PATH.
Scripts shell
Section intitulée « Scripts shell »Un script, c’est une suite de commandes dans un fichier :
#!/usr/bin/env bash# La 1re ligne (shebang) dit : exécute ce fichier avec bash
set -euo pipefail# -e : sortir si une commande échoue# -u : sortir si une variable n'existe pas# -o pipefail : sortir si une commande dans un pipe échoue
echo "Bonjour $USER, on est $(date +%A)"
# Variablesnom="Alice"echo "Salut $nom"
# Conditionsif [ -f "config.json" ]; then echo "Config trouvée"else echo "Pas de config"fi
# Bouclesfor fichier in *.txt; do echo "Traitement de $fichier" wc -l "$fichier"done
# Fonctionssaluer() { local prenom="$1" echo "Bonjour $prenom"}saluer "Bob"Pour le rendre exécutable et le lancer :
chmod +x mon_script.sh./mon_script.shCheat sheet à imprimer
Section intitulée « Cheat sheet à imprimer »| Action | Commande |
|---|---|
| Où suis-je | pwd |
| Lister | ls -la |
| Aller | cd dossier |
| Créer dossier | mkdir -p a/b/c |
| Copier dossier | cp -r src/ dest/ |
| Supprimer dossier | rm -rf dossier/ |
| Chercher fichier | find . -name "*.js" |
| Chercher contenu | grep -rn "texte" . |
| Voir un fichier | less fichier |
| Suivre un log | tail -f log |
| Compter lignes | wc -l fichier |
| Permissions | chmod 755 fichier |
| Variables env | export X=y puis echo $X |
| Action | Commande |
|---|---|
| Où suis-je | Get-Location (alias pwd) |
| Lister | Get-ChildItem (alias ls, dir) |
| Aller | Set-Location dossier (alias cd) |
| Créer dossier | New-Item -ItemType Directory -Path a/b/c -Force |
| Copier dossier | Copy-Item src dest -Recurse |
| Supprimer dossier | Remove-Item dossier -Recurse -Force |
| Chercher fichier | Get-ChildItem -Recurse -Filter "*.js" |
| Chercher contenu | Select-String -Path *.js -Pattern "texte" |
| Voir un fichier | Get-Content fichier (alias cat) |
| Suivre un log | Get-Content log -Wait |
| Variables env | $env:X = "y" puis $env:X |
Auto-évaluation
Section intitulée « Auto-évaluation »Pour aller plus loin
Section intitulée « Pour aller plus loin »- MIT Missing Semester — Lecture 2 : Shell Tools and Scripting
- Bash Guide — Greg Wooledge (mywiki.wooledge.org/BashGuide)
- Explainshell — colle une commande, il l’explique morceau par morceau (explainshell.com)
- Modern Unix — outils modernes (bat, eza, ripgrep, fd, fzf…) (github.com/ibraheemdev/modern-unix)
Suite : 1.3 — Représentation des données pour comprendre comment les ordinateurs stockent texte et nombres.