22 - tmux : le multiplexeur de terminal
Ce que tu vas apprendre
- Pourquoi tmux est indispensable quand tu travailles en SSH
- Creer et gerer des sessions, fenêtres et panneaux
- Maitriser les raccourcis clavier essentiels
- Detacher et rattacher des sessions
- Configurer tmux avec .tmux.conf
- Combiner tmux et SSH pour un workflow robuste
Prerequisites
Etre a l'aise avec le terminal et connaître SSH.
J'etais en train de déployer en production via SSH. Migration de base de donnees en cours, 30 minutes estimees. Ma connexion Wi-Fi a lache. La session SSH s'est fermee. La migration tournait toujours sur le serveur, mais je n'avais plus aucune visibilité. J'ai du attendre, stresse, sans savoir si tout se passait bien. Depuis ce jour, je ne lance plus rien via SSH sans tmux. Plus jamais.
Pourquoi tmux
tmux (terminal multiplexer) resout trois problèmes :
- Persistance : ta session survit a une deconnexion SSH. Tu te reconnectes et tu retrouves tout exactement comme avant.
- Multiplexage : plusieurs terminaux dans une seule fenêtre. Pas besoin de 6 onglets SSH.
- Organisation : des sessions nommees pour chaque projet ou tache.
bash# Installer
sudo apt install tmux
Les concepts : sessions, fenêtres, panneaux
tmux s'organise en trois niveaux :
- Session : un espace de travail complet (ex: "mon-projet", "serveur-prod")
- Fenetre : un onglet dans une session (ex: "code", "logs", "base de donnees")
- Panneau : une division de fenêtre (ex: code a gauche, terminal a droite)
Sessions
bash# Creer une nouvelle session nommee
tmux new -s mon-projet
# Lister les sessions existantes
tmux ls
# Se rattacher a une session
tmux attach -t mon-projet
# Detacher la session courante (depuis tmux)
# Ctrl+b puis d
# Creer une session sans s'y attacher
tmux new -s background -d
# Tuer une session
tmux kill-session -t mon-projet
Le raccourci Ctrl+b est le prefixe de tmux. Toutes les commandes tmux commencent par ce prefixe. Tu appuies sur Ctrl+b, tu relaches, puis tu appuies sur la touche de commande.
Fenetres
bash# Depuis tmux :
# Ctrl+b c Creer une nouvelle fenetre
# Ctrl+b , Renommer la fenetre courante
# Ctrl+b n Fenetre suivante
# Ctrl+b p Fenetre precedente
# Ctrl+b 0-9 Aller a la fenetre par numero
# Ctrl+b w Lister les fenetres (navigation interactive)
# Ctrl+b & Fermer la fenetre courante
La barre en bas de tmux montre les fenêtres. Un asterisque marque la fenêtre active.
Panneaux
C'est la que tmux brille vraiment :
bash# Ctrl+b % Diviser verticalement (gauche/droite)
# Ctrl+b " Diviser horizontalement (haut/bas)
# Ctrl+b fleches Naviguer entre les panneaux
# Ctrl+b z Zoom sur un panneau (toggle)
# Ctrl+b x Fermer le panneau courant
# Ctrl+b { Deplacer le panneau vers la gauche
# Ctrl+b } Deplacer le panneau vers la droite
# Ctrl+b Space Changer la disposition des panneaux
# Redimensionner un panneau
# Ctrl+b Alt+fleche
Mon layout typique : code ou commandes a gauche (grand panneau), logs en haut a droite, terminal rapide en bas a droite.
Copier et coller dans tmux
tmux a son propre mode de copie :
bash# Ctrl+b [ Entrer en mode copie (navigation avec les fleches ou vi)
# Space Commencer la selection
# Enter Copier la selection
# Ctrl+b ] Coller
# q Quitter le mode copie
En mode copie, tu peux naviguer dans l'historique du terminal, chercher avec /, te deplacer page par page. C'est comme less dans ton terminal.
Detacher et rattacher : le super-pouvoir
C'est la fonctionnalité qui justifie tmux a elle seule :
bash# Sur le serveur, lancer tmux
ssh deploy@mon-serveur
tmux new -s deploy
# Lancer ta commande longue
./migration.sh
# Detacher : Ctrl+b d
# Tu es de retour dans ton shell SSH normal
# Tu peux fermer la connexion SSH
# Plus tard, te reconnecter et rattacher
ssh deploy@mon-serveur
tmux attach -t deploy
# Ta migration est toujours la, tu vois toute la sortie
Sur paltemps.fr, j'ai une session tmux permanente sur le serveur. Elle contient des fenêtres pour les logs, le monitoring et un shell. Je m'y rattache a chaque connexion.
Configurer tmux avec .tmux.conf
Le fichier ~/.tmux.conf personnalise tmux :
bash# Changer le prefixe de Ctrl+b a Ctrl+a (plus accessible)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Commencer la numerotation des fenetres a 1 (pas 0)
set -g base-index 1
setw -g pane-base-index 1
# Renumeroter les fenetres quand on en ferme une
set -g renumber-windows on
# Activer la souris (redimensionner, cliquer, scroller)
set -g mouse on
# Augmenter l'historique
set -g history-limit 50000
# Diviser avec des touches plus intuitives
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Garder le repertoire courant dans les nouveaux panneaux
bind c new-window -c "#{pane_current_path}"
# Recharger la config avec Ctrl+a r
bind r source-file ~/.tmux.conf \; display "Config rechargee"
# Couleurs du terminal
set -g default-terminal "screen-256color"
# Barre de statut
set -g status-style 'bg=colour235 fg=colour250'
set -g status-left '[#S] '
set -g status-right '%H:%M %d/%m'
Apres avoir modifie le fichier :
bash# Recharger depuis tmux
tmux source-file ~/.tmux.conf
# Ou avec le raccourci configure ci-dessus : Ctrl+a r
tmux et SSH : le workflow complet
bash# Script de connexion typique
ssh deploy@mon-serveur -t 'tmux attach -t main || tmux new -s main'
# Se rattache a la session "main" si elle existe, sinon en cree une nouvelle
Tu peux meme créer un alias :
bash# Dans ~/.bashrc
alias prod='ssh deploy@mon-serveur -t "tmux attach -t main || tmux new -s main"'
screen : l'alternative historique
screen est l'ancetre de tmux. Il fait la meme chose en moins bien, mais il est installe par défaut sur beaucoup de serveurs :
bash# Lancer screen
screen -S ma-session
# Detacher : Ctrl+a d
# Rattacher
screen -r ma-session
# Lister
screen -ls
Si tu as le choix, prends tmux. L'interface est meilleure, la configuration plus flexible, et la communauté plus active. Mais si tu te retrouves sur un vieux serveur avec uniquement screen, les bases sont similaires.
Résumé
tmux new -s nompour créer,tmux attach -t nompour rattacherCtrl+b dpour detacher,Ctrl+b cpour une fenêtre,Ctrl+b %et"pour diviserCtrl+b zpour zoomer sur un panneau- Configure
~/.tmux.confavec souris, prefixe Ctrl+a et historique long ssh serveur -t 'tmux attach || tmux new'pour toujours travailler dans tmux en SSH- tmux est non-negociable pour les opérations longues en production
Article précédent : Performance et diagnostic Article suivant : Glossaire Linux