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 a 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 :
Ctrl+b [ pour entrer en mode copieSpace pour commencer la sélectionEnter pour copierCtrl+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
tmux new -s demo
ls)Ctrl+b dtmux ls
tmux attach -t demo
✅ Tu devrais voir le résultat de ls - la session a survécu !
tmux new -s exo2
Ctrl+b %Ctrl+b oCtrl+b "Ctrl+b xCtrl+b cCtrl+b n puis Ctrl+b pCtrl+b dls ~/.tmux.conf
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 a partir de 1
set -g base-index 1
# Souris activee
set -g mouse on
EOF
tmux source-file ~/.tmux.conf
Ctrl+a d pour détacherCré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.conf