TL;DR — Résumé Rapide

Maîtrisez la gestion des sessions tmux pour serveurs distants. Sessions persistantes, volets, configuration, plugins et workflows DevOps pratiques expliqués.

Si vous avez déjà perdu des heures de travail parce qu’une connexion SSH s’est coupée au milieu d’un déploiement, ou si vous vous êtes retrouvé à jongler avec une douzaine de fenêtres de terminal pour surveiller un serveur distant, tmux est l’outil qui résout les deux problèmes définitivement. Tmux (multiplexeur de terminal) exécute un processus serveur persistant sur l’hôte distant — vos sessions, volets et commandes en cours d’exécution survivent aux déconnexions, aux redémarrages de votre machine locale et aux pannes réseau. Ce guide couvre tout ce dont vous avez besoin : installation, la hiérarchie session-fenêtre-volet, chaque raccourci essentiel, un ~/.tmux.conf prêt pour la production, l’écosystème de plugins, les scripts d’environnements automatisés et trois workflows pratiques DevOps.

Prérequis

Avant de commencer, vous avez besoin de :

  • Un système Linux ou macOS avec accès au terminal (local ou via SSH)
  • Privilèges sudo pour l’installation
  • Familiarité de base avec la ligne de commande
  • Un client SSH si vous travaillez avec des serveurs distants

Pourquoi tmux ? Les Cas d’Usage Principaux

Trois scénarios rendent tmux indispensable pour le travail sur des serveurs distants :

Survivre aux déconnexions SSH. Quand votre FAI est défaillant ou que vous fermez le couvercle de votre portable, tout processus exécuté dans un terminal SSH simple meurt. Avec tmux, la session continue sur le serveur. Votre rsync, ansible-playbook ou npm run build de longue durée continue de tourner. Vous vous reconnectez et vous rattachez.

Workflows multi-volets. Un déploiement typique peut impliquer la surveillance des logs dans un volet, l’exécution de scripts de migration dans un autre, et un shell prêt pour les commandes de rollback dans un troisième — le tout en une seule connexion SSH.

Programmation en binôme. Deux ingénieurs peuvent se connecter en SSH au même serveur et s’attacher à la même session tmux. Ils voient et interagissent tous les deux avec le même terminal en temps réel.


Installation

Tmux est disponible dans les dépôts par défaut de toutes les distributions principales.

Ubuntu/Debian :

sudo apt update && sudo apt install -y tmux

Fedora/RHEL/CentOS :

sudo dnf install -y tmux

Arch Linux :

sudo pacman -S tmux

macOS (Homebrew) :

brew install tmux

Vérifier :

tmux -V
# tmux 3.4

Toute version 3.0 ou ultérieure prend en charge toutes les fonctionnalités de ce guide.


Concepts Principaux : Sessions, Fenêtres et Volets

La hiérarchie tmux comporte trois niveaux :

Session — Le conteneur le plus externe. Un espace de travail indépendant et nommé. Vous pouvez avoir de nombreuses sessions en cours : travail, deploiement, monitor. Les sessions persistent même quand vous n’êtes pas attaché.

Fenêtre — Vit dans une session. Occupe tout l’écran, comme un onglet de navigateur. Chaque session peut avoir plusieurs fenêtres. La barre de statut en bas affiche toutes les fenêtres.

Volet — Une subdivision d’une fenêtre. Vous divisez une fenêtre horizontalement ou verticalement pour créer plusieurs volets, chacun exécutant son propre shell ou commande.

serveur tmux (persistant sur l'hôte distant)
  |
  +-- Session: "travail"
  |     +-- Fenêtre 0: "editeur"
  |     |     +-- Volet 0: vim src/app.py
  |     |     +-- Volet 1: python -m pytest
  |     +-- Fenêtre 1: "logs"
  |           +-- Volet 0: tail -f /var/log/app.log
  |
  +-- Session: "deploiement"
        +-- Fenêtre 0: "principal"
              +-- Volet 0: ansible-playbook deploy.yml

La touche préfixe signale à tmux que la prochaine frappe est une commande. Le préfixe par défaut est Ctrl+b.


Raccourcis Essentiels

Référence complète pour l’utilisation quotidienne de tmux (préfixe par défaut Ctrl+b) :

ActionRaccourci
Sessions
Se détacher de la sessionCtrl+b d
Lister et changer de sessionCtrl+b s
Renommer la session actuelleCtrl+b $
Session précédenteCtrl+b (
Session suivanteCtrl+b )
Fenêtres
Créer une nouvelle fenêtreCtrl+b c
Renommer la fenêtre actuelleCtrl+b ,
Fenêtre suivanteCtrl+b n
Fenêtre précédenteCtrl+b p
Aller à la fenêtre par numéroCtrl+b 0-9
Lister et sélectionner les fenêtresCtrl+b w
Fermer la fenêtre actuelleCtrl+b &
Volets
Division verticaleCtrl+b %
Division horizontaleCtrl+b "
Naviguer entre les voletsCtrl+b ←↑↓→
Faire défiler les voletsCtrl+b o
Afficher les numéros de voletsCtrl+b q
Zoom du volet (plein écran)Ctrl+b z
Échanger avec le volet précédentCtrl+b {
Échanger avec le volet suivantCtrl+b }
Convertir le volet en fenêtreCtrl+b !
Fermer le volet actuelCtrl+b x
Faire défiler les dispositionsCtrl+b Space
Mode Copie
Entrer en mode copieCtrl+b [
Coller le bufferCtrl+b ]
Quitter le mode copieq
Autres
Invite de commandeCtrl+b :
Lister tous les raccourcisCtrl+b ?
Recharger la configCtrl+b r

Gestion des Sessions

Créer des Sessions

# Nouvelle session sans nom
tmux

# Nouvelle session nommée (toujours préférer ceci)
tmux new -s travail

# Session exécutant une commande spécifique
tmux new -s logs "tail -f /var/log/syslog"

# Session dans un répertoire spécifique
tmux new -s api -c /var/www/api

Lister et Changer de Session

tmux ls

# Exemple de sortie :
# deploiement: 2 fenêtres (créée dim 22 mar 09:15:22 2026)
# monitor: 1 fenêtres (créée dim 22 mar 08:30:15 2026) (attachée)
# travail: 3 fenêtres (créée dim 22 mar 07:45:00 2026)

S’attacher et se Détacher

# Se détacher (session continue) : Ctrl+b d

# S'attacher à la session la plus récente
tmux attach

# S'attacher à une session spécifique
tmux attach -t travail

# S'attacher et détacher les autres clients
tmux attach -t travail -d

Renommer et Supprimer des Sessions

tmux rename-session -t ancien-nom nouveau-nom
tmux kill-session -t deploiement
tmux kill-session -a
tmux kill-server

Gestion des Fenêtres

# Créer une nouvelle fenêtre : Ctrl+b c
# Renommer la fenêtre actuelle : Ctrl+b ,
# Aller à la fenêtre 0 : Ctrl+b 0
# Suivante/précédente : Ctrl+b n / Ctrl+b p
# Lister les fenêtres : Ctrl+b w
# Fermer la fenêtre : Ctrl+b &

Gestion des Volets

Diviser

# Division verticale (volets côte à côte) : Ctrl+b %
# Division horizontale (volets empilés) : Ctrl+b "

Redimensionner les Volets

# Redimensionnement fin : Ctrl+b puis Ctrl + flèche
# Depuis l'invite de commande (Ctrl+b :) :
resize-pane -D 10    # Bas 10 lignes
resize-pane -U 10    # Haut 10 lignes
resize-pane -L 20    # Gauche 20 colonnes
resize-pane -R 20    # Droite 20 colonnes

Dispositions de Volets

Tmux possède cinq dispositions intégrées que vous pouvez faire défiler avec Ctrl+b Space :

  1. even-horizontal — volets côte à côte, largeur égale
  2. even-vertical — volets empilés, hauteur égale
  3. main-horizontal — un grand volet en haut, des volets plus petits en dessous
  4. main-vertical — un grand volet à gauche, des volets plus petits à droite
  5. tiled — volets en grille

Séparer et Joindre des Volets

# Convertir un volet en sa propre fenêtre : Ctrl+b !

# Joindre un volet d'une autre fenêtre (via Ctrl+b :)
join-pane -s 2.0    # Déplacer le volet 0 de la fenêtre 2 dans la fenêtre actuelle
join-pane -t 3      # Déplacer le volet actuel dans la fenêtre 3

Mode Copie

Le mode copie donne accès complet au buffer de défilement avec recherche et sélection de texte.

Entrer en Mode Copie et Naviguer

# Entrer en mode copie
Ctrl+b [

# Navigation
Touches fléchées    # Déplacer le curseur
PgUp / PgDn         # Défiler par page
g                   # Aller au début du buffer
G                   # Aller à la fin du buffer
/terme              # Rechercher en avant
?terme              # Rechercher en arrière
n / N               # Correspondance suivante / précédente
q                   # Quitter

Mode Vi (Recommandé)

Ajoutez à ~/.tmux.conf :

setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel

En mode copie :

v    # Commencer la sélection
y    # Copier la sélection
Ctrl+b ]    # Coller

Configuration Personnalisée ~/.tmux.conf

Configuration Initiale Complète

# ~/.tmux.conf

# Préfixe
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# Souris
set -g mouse on

# Couleurs
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"

# Buffer de défilement
set -g history-limit 50000

# Mode vi
setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel

# Indexation
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on

# Pas de délai d'échappement
set -sg escape-time 0

# Divisions de volets
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# Recharger
bind r source-file ~/.tmux.conf \; display-message "Config rechargée"

# Barre de statut
set -g status-position bottom
set -g status-style "bg=#1a1b26,fg=#a9b1d6"
set -g status-left "#[fg=#06b6d4,bold] #S "
set -g status-left-length 30
set -g status-right "#[fg=#a9b1d6] %Y-%m-%d %H:%M "
setw -g window-status-format " #I:#W "
setw -g window-status-current-format "#[fg=#06b6d4,bold] #I:#W* "

Tmux Plugin Manager (tpm) et Plugins Essentiels

Installer tpm

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Ajoutez à la fin de ~/.tmux.conf :

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

run '~/.tmux/plugins/tpm/tpm'

Appuyez sur Ctrl+a I pour installer les plugins.

tmux-resurrect

Sauvegarde et restaure les sessions tmux après les redémarrages du serveur.

# Sauvegarder la session : Ctrl+a Ctrl+s
# Restaurer la session : Ctrl+a Ctrl+r

tmux-continuum

set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'

Scripts tmux

Environnement de Développement à 4 Volets

#!/usr/bin/env bash
# env-dev.sh

SESSION="dev"
tmux has-session -t "$SESSION" 2>/dev/null && tmux attach -t "$SESSION" && exit

tmux new-session -d -s "$SESSION" -n "editeur" -c ~/projets/api
tmux split-window -h -t "$SESSION:editeur" -c ~/projets/api
tmux split-window -v -t "$SESSION:editeur.0" -c ~/projets/api
tmux split-window -v -t "$SESSION:editeur.1" -c ~/projets/api
tmux select-layout -t "$SESSION:editeur" tiled

tmux send-keys -t "$SESSION:editeur.0" "vim ." Enter
tmux send-keys -t "$SESSION:editeur.1" "npm run dev" Enter
tmux send-keys -t "$SESSION:editeur.2" "npm run test -- --watch" Enter
tmux send-keys -t "$SESSION:editeur.3" "git log --oneline -10" Enter

tmux new-window -t "$SESSION" -n "logs" -c ~/projets/api
tmux send-keys -t "$SESSION:logs" "tail -f logs/app.log" Enter

tmux select-window -t "$SESSION:editeur"
tmux select-pane -t "$SESSION:editeur.0"
tmux attach -t "$SESSION"

tmux vs Screen vs Zellij vs Byobu

FonctionnalitétmuxGNU ScreenZellijByobu
Divisions verticalesIntégréesNécessite un patchIntégréesVia tmux/screen
Syntaxe de configurationPropreComplexeYAML/KDLtmux simplifié
Écosystème de pluginsMature (tpm)MinimalCroissantHérite de tmux
Support des scriptsExcellentLimitéModéréLimité
Support de la sourisExcellentLimitéExcellentExcellent
Persistance après redémarrageAvec tmux-resurrectNonNonAvec tmux-resurrect
Développement actifOuiMinimalOui (Rust)Minimal
Meilleur pourUtilisateurs avancés, DevOpsSystèmes héritésNouveaux utilisateursDémarrage rapide

Workflows Pratiques

Déploiement de Longue Durée

ssh deploy@prod-01.exemple.com
tmux new -s migration
./scripts/lancer-migrations.sh
# Se détacher : Ctrl+a d
exit

# Des heures plus tard
ssh deploy@prod-01.exemple.com
tmux attach -t migration

Tableau de Bord de Surveillance

+---------------------------+---------------------------+
|                           |                           |
|   Volet 0: htop           |   Volet 1: df -h (watch)  |
|                           |                           |
+---------------------------+---------------------------+
|                           |                           |
|   Volet 2: tail syslog    |   Volet 3: netstat        |
|                           |                           |
+---------------------------+---------------------------+

Résumé

Tmux résout les deux problèmes fondamentaux du travail sur des serveurs distants : la persistance des sessions et l’organisation du terminal. Points clés :

  • Les sessions survivent aux coupures SSH — détachez-vous avec Ctrl+a d, reconnectez et utilisez tmux attach -t nom
  • Hiérarchie à trois niveaux — les sessions contiennent des fenêtres, les fenêtres contiennent des volets
  • Touche préfixeCtrl+b par défaut, Ctrl+a recommandé dans ~/.tmux.conf
  • Zoom (Ctrl+b z) — maximise temporairement un volet sans perdre la disposition
  • Mode copie (Ctrl+b [) — défilement, recherche et copie sans quitter tmux
  • Plugins tpm — tmux-resurrect sauvegarde les sessions après redémarrage, tmux-continuum sauvegarde automatiquement
  • Automatisez tout — utilisez tmux new-session, split-window, send-keys et select-layout

Articles Connexes