Esc
 Naviguer  Ouvrir Esc Fermer
Aller au contenu

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 10 min prérequis : aucun

Trois raisons :

  1. Vitesse : mv *.jpg images/ est plus rapide que glisser-déposer 1 000 photos.
  2. Reproductibilité : tu peux scripter ce que tu fais, le partager, le rejouer.
  3. 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.

Quand tu ouvres un terminal, tu vois quelque chose comme :

user@machine:~/projects$
  • user : ton nom d’utilisateur
  • machine : 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)
Fenêtre de terminal
pwd # print working directory : où suis-je ?
ls # list : que contient le dossier ?
ls -la # tout afficher, format détaillé
cd Documents # change directory
cd .. # remonter d'un cran
cd ~ # aller dans ton home
cd - # revenir au dossier précédent
Fenêtre de terminal
mkdir nouveau # créer un dossier
mkdir -p a/b/c # créer toute l'arborescence
touch fichier.txt # créer un fichier vide (ou maj de date)
cp source dest # copier
cp -r dossier/ copie/ # copier récursivement (dossiers)
mv ancien nouveau # déplacer ou renommer
rm fichier # supprimer (irréversible !)
rm -rf dossier/ # supprimer récursivement et de force
Fenêtre de terminal
cat fichier.txt # afficher tout
less fichier.txt # lire page par page (q pour quitter)
head -n 20 fichier.txt # 20 premières lignes
tail -n 50 fichier.txt # 50 dernières lignes
tail -f log.txt # suivre en temps réel (très utile pour les logs)
wc -l fichier.txt # compter les lignes
file image # deviner le type d'un fichier
Fenêtre de terminal
find . -name "*.js" # tous les .js dans le dossier courant
find . -type f -size +10M # fichiers > 10 Mo
grep "TODO" fichier.txt # chercher dans un fichier
grep -r "TODO" . # chercher récursivement
grep -rn "TODO" . --include="*.js" # avec numéro de ligne, dans les .js

Le pipe (|) connecte la sortie d’une commande à l’entrée de la suivante. C’est l’idée géniale d’Unix.

Fenêtre de terminal
# Compter les fichiers .js dans un projet
find . -name "*.js" | wc -l
# Trouver les 10 plus gros fichiers
du -ah . | sort -rh | head -n 10
# Lister les processus consommant le plus de RAM
ps aux | sort -rk 4 | head -n 5

Les redirections envoient la sortie ailleurs que vers l’écran :

Fenêtre de terminal
echo "ligne 1" > fichier.txt # > écrase le fichier
echo "ligne 2" >> fichier.txt # >> ajoute à la fin
commande 2> erreurs.log # 2> redirige stderr
commande > sortie.log 2>&1 # tout (stdout + stderr) dans le même fichier
commande < entree.txt # < lit depuis un fichier

Chaque fichier a un propriétaire, un groupe, et trois ensembles de permissions : lecture (r), écriture (w), exécution (x).

Fenêtre de terminal
ls -l
# -rw-r--r-- 1 alice users 1024 Apr 29 14:00 notes.txt
# ↑ ↑↑↑↑↑↑↑↑↑
# type | propriétaire | groupe | autres

Lire les permissions de gauche à droite :

  • 1er caractère : - fichier, d dossier, l lien
  • 3 suivants : permissions du propriétaire
  • 3 suivants : permissions du groupe
  • 3 derniers : permissions des autres
Fenêtre de terminal
chmod +x script.sh # rendre exécutable
chmod 755 script.sh # rwxr-xr-x (notation octale)
chown alice fichier # changer le propriétaire
chgrp devs fichier # changer le groupe

Notation octale : rwx = 4+2+1 = 7. Donc 755 = propriétaire rwx, groupe r-x, autres r-x.

OctalPermissionsCas typique
644rw-r--r--Fichier de config
755rwxr-xr-xScript ou binaire
600rw-------Clé SSH privée
700rwx------Dossier ~/.ssh
Fenêtre de terminal
echo $HOME # /home/alice
echo $PATH # liste des dossiers où le shell cherche les exécutables
export API_KEY="abc123" # définir une variable pour la session
unset API_KEY # la supprimer

Quand 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.

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)"
# Variables
nom="Alice"
echo "Salut $nom"
# Conditions
if [ -f "config.json" ]; then
echo "Config trouvée"
else
echo "Pas de config"
fi
# Boucles
for fichier in *.txt; do
echo "Traitement de $fichier"
wc -l "$fichier"
done
# Fonctions
saluer() {
local prenom="$1"
echo "Bonjour $prenom"
}
saluer "Bob"

Pour le rendre exécutable et le lancer :

Fenêtre de terminal
chmod +x mon_script.sh
./mon_script.sh
ActionCommande
Où suis-jepwd
Listerls -la
Allercd dossier
Créer dossiermkdir -p a/b/c
Copier dossiercp -r src/ dest/
Supprimer dossierrm -rf dossier/
Chercher fichierfind . -name "*.js"
Chercher contenugrep -rn "texte" .
Voir un fichierless fichier
Suivre un logtail -f log
Compter ligneswc -l fichier
Permissionschmod 755 fichier
Variables envexport X=y puis echo $X
Quelle commande affiche les 5 fichiers les plus récemment modifiés du dossier courant ?
Que signifie chmod 600 fichier.key ?
Pourquoi met-on set -euo pipefail au début d'un script bash ?

Suite : 1.3 — Représentation des données pour comprendre comment les ordinateurs stockent texte et nombres.