Dans cette leçon, tu vas maîtriser tmux, un multiplexeur de terminal qui te permet de gérer plusieurs terminaux dans une seule fenêtre, de détacher et rattacher des sessions à distance, et de conserver ton travail même si ta connexion coupe.
Un **multiplexeur de terminal** comme **tmux** te permet de :
Sans tmux : si ta connexion SSH coupe, ton travail est perdu.
Avec tmux : tu te rattaches et tout est intact !
**Note :** Si tu utilises **screen** à la place de tmux, le principe est le même. tmux est juste plus moderne et mieux maintenu.
| Concept | Description |
|---|---|
| **Session** | Une session tmux est un environnement complet de terminaux |
| **Fenêtre (Window)** | Un onglet dans la session (comme les onglets d'un navigateur) |
| **Panneau (Pane)** | Une subdivision de la fenêtre (splits horizontaux ou verticaux) |
Session tmux
├── Fenêtre 1 (terminal)
│ ├── Panneau gauche
│ └── Panneau droit
├── Fenêtre 2 (logs)
└── Fenêtre 3 (editor)
# Lancer une nouvelle session (nommee)
tmux new -s ma_session
# Lancer rapidement
tmux
Le préfixe par défaut est **Ctrl+b**. Ensuite tu tapes la commande :
| Commande | Action |
|---|---|
Ctrl+b d | Détacher la session (laisser tourner en arrière-plan) |
Ctrl+b c | Créer une nouvelle fenêtre |
Ctrl+b , | Renommer la fenêtre actuelle |
Ctrl+b % | Split vertical (gauche/droite) |
Ctrl+b " | Split horizontal (haut/bas) |
Ctrl+b o | Passer au panneau suivant |
Ctrl+b x | Fermer le panneau actuel |
Ctrl+b w | Lister les fenêtres |
Ctrl+b n | Fenêtre suivante |
Ctrl+b p | Fenêtre précédente |
Ctrl+b 0-9 | Aller à la fenêtre numéro X |
Ctrl+b ? | Afficher toutes les touches |
# Se detacher : Ctrl+b d
# La session continue en arriere-plan !
# Lister les sessions actives
tmux ls
# Se rattacher a une session
tmux attach -t ma_session
# Rattacher ou créer si elle n'existe pas
tmux new -A -s ma_session
# Passer au panneau suivant
Ctrl+b o
# Aller a un panneau précis
Ctrl+b ;
# Resize du panneau actif
Ctrl+b Alt+flèche # Redimensionner
Ctrl+b : resize-pane -D # Agrandir vers le bas
Ctrl+b : resize-pane -U # Agrandir vers le haut
Ctrl+b : resize-pane -L # Agrandir vers la gauche
Ctrl+b : resize-pane -R # Agrandir vers la droite
# Renommer la fenêtre actuelle
Ctrl+b ,
# Lister les fenêtres
Ctrl+b w
# Aller à la fenêtre 1
Ctrl+b 1
# Déplacer la fenêtre vers la gauche ou la droite
Ctrl+b : swap-window -t -1 # Échanger avec précédente
Ctrl+b : swap-window -t +1 # Échanger avec suivante
tmux new-session -d -s nom_session 'commande' # Créer avec commande auto
tmux send-keys -t nom_session 'ls' Enter # Envoyer une commande
tmux kill-session -t nom_session # Tuer une session
tmux kill-server # Tuer tmux complètement
:kill-session # Tuer la session actuelle
:kill-server # Tuer toutes les sessions
# Exemple de configuration ~/.tmux.conf
# Activer la souris
set -g mouse on
# Activer le scroll
set -g history-limit 50000
# Commande plus courte (juste Ctrl+a)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Numérotation commence a 1 (plus intuitif)
set -g base-index 1
setw -g pane-base-index 1
# Coller depuis le presse-papier systeme
set -g default-command "reattach-to-user-namespace -l bash"
Après modification :
tmux source-file ~/.tmux.conf# Mode copie (scrollback)
Ctrl+b [
# Naviguer avec flèches / PgUp/PgDown
# Chercher avec / (comme dans less)
# Quitter avec q
Pour copier :
1. Ctrl+b [ pour entrer en mode copie
2. Space pour commencer la sélection
3. Déplacer avec les flèches
4. Enter pour copier
5. Ctrl+b ] pour coller
#!/bin/bash
# Script pour creer un environnement de travail
session="dev_work"
# Creer session avec 3 fenêtres
tmux new-session -d -s $session
tmux rename-window -t $session:1 'code'
tmux send-keys -t $session:1 'cd ~/projets && code .' Enter
tmux new-window -t $session -n 'server'
tmux send-keys -t $session:server 'cd ~/projets && npm run dev' Enter
tmux new-window -t $session -n 'logs'
tmux send-keys -t $session:logs 'tail -f ~/projets/logs/app.log' Enter
# Se rattacher
tmux attach -t $session
1. Ouvre un terminal et lance tmux :
tmux new -s demo2. Tape une commande (ex: ls)
3. Détache avec Ctrl+b d
4. Vérifie que la session existe toujours :
tmux ls5. Rattache-toi :
tmux attach -t demo✅ Tu devrais voir le résultat de ls - la session a survécu !
1. Crée une nouvelle session :
tmux new -s exo22. Sépare en deux verticalement : Ctrl+b %
3. Passe au panneau de droite : Ctrl+b o
4. Sépare en deux horizontalement : Ctrl+b "
5. Ferme un panneau : Ctrl+b x
6. Ajoute une fenêtre : Ctrl+b c
7. Bascule entre fenêtres : Ctrl+b n puis Ctrl+b p
8. Détache : Ctrl+b d
1. Vérifie si le fichier existe :
ls ~/.tmux.conf2. Crée-le avec cette configuration minimale :
cat > ~/.tmux.conf << 'EOF'
# Raccourci prefix: Ctrl+a au lieu de Ctrl+b
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Numérotation à partir de 1
set -g base-index 1
# Souris activee
set -g mouse on
EOF
3. Recharge la config :
tmux source-file ~/.tmux.conf4. Teste : Ctrl+a d pour détacher
Crée un script start-work.sh :
#!/bin/bash
tmux new-session -d -s travail
tmux rename-window -t travail:1 'Terminal'
tmux new-window -t travail -n 'Web' 'cd ~/Sites && python3 -m http.server 8000'
tmux attach -t travail
Teste-le :
chmod +x start-work.sh
./start-work.sh
| Commande | Description |
|---|---|
tmux new -s nom | Créer une session |
tmux ls | Lister les sessions |
tmux attach -t nom | Se rattacher |
Ctrl+b d | Détacher |
Ctrl+b c | Nouvelle fenêtre |
Ctrl+b % | Split vertical |
Ctrl+b " | Split horizontal |
Ctrl+b w | Lister fenêtres |
Ctrl+b [ | Mode scroll/copie |
tmux kill-session -t nom | Supprimer session |
tmux source-file ~/.tmux.conf | Recharger config |
Ctrl+b comme préfixe, puis la commande~/.tmux.confVous avez découvert tmux dans la leçon 27. screen est le multiplexeur de terminal historique, présent sur presque tous les systèmes Unix bien avant tmux. Si tmux n'est pas installé ou si vous devez travailler sur une machine distante ancienne, screen sera votre allié. Il offre les mêmes fonctions essentielles : maintenir des sessions persistantes, diviser l'écran, et reprendre votre travail après une déconnexion.
screen introduit la notion de session — un processus qui tourne en arrière-plan et qui peut abriter plusieurs fenêtres (window). Chaque fenêtre est un pseudo-terminal (pty). Vous pouvez vous détacher (detach) de la session et la retrouver plus tard, même après vous être déconnecté.
Le principe central de screen : vous vous attachez (attach) à une session. Vous pouvez vous détacher (detach) pour libérer le terminal. La session continue de tourner en arrière-plan. Plus tard, vous vous rattachez.
screen s'utilise avec des combinaisons de touches commençant par Ctrl+A (prefix). Par défaut, Ctrl+A suivi de la commande. tmux utilise Ctrl+B comme préfixe — screen utilise Ctrl+A pour ne pas interférer avec le comportement natif du terminal.
Le mode copie permet de naviguer dans le scrollback (l'historique visible de la fenêtre) et de copier du texte :
Le fichier ~/.screenrc configure le comportement par défaut de screen. Voici un exemple complet :
Screen peut vous alerter quand une fenêtre affiche quelque chose pendant que vous êtes dans une autre fenêtre — très utile pour les scripts longs ou les téléchargements :
Screen peut enregistrer tout ce qui passe dans une fenêtre dans un fichier :
screen -S session -X commande envoie une commande à une session sans s'attacher :
Quand vous lancez un script ou un serveur, un titre explicite aide à s'y retrouver :
Screen permet à plusieurs terminaux de se rattacher à la même session simultanément (multi-attach) — pratique pour collaborer à distance :
screen -S nom = créer une session nommée
Ctrl+A D = se détacher sans fermer les fenêtres
screen -r = se rattacher à une session
Ctrl+A C = nouvelle fenêtre dans la session
Ctrl+A " = lister et choisir une fenêtre
Ctrl+A S et Ctrl+A | = diviser l'écran
Ctrl+A TAB = naviguer entre les splits
Ctrl+A [ puis Esc = mode copie pour naviguer dans l'historique
Ctrl+A H = activer le logging d'une fenêtre
~/.screenrc = fichier de configuration personnel
screen -dmS nom "cmd" = créer une session détachée qui exécute une commande