Linux pour les devs - 22 - tmux : le multiplexeur de terminal

Sessions, fenêtres, panneaux, raccourcis et configuration : maîtriser tmux pour ne plus jamais perdre ton travail.

  1. 01 Linux pour les devs - 00 - Pourquoi Linux meme si tu codes sur Mac ou Windows
  2. 02 Linux pour les devs - 01 - Le terminal, bash et zsh
  3. 03 Linux pour les devs - 02 - Fichiers et répertoires
  4. 04 Linux pour les devs - 03 - Permissions et droits d'acces
  5. 05 Linux pour les devs - 04 - Utilisateurs, groupes et sudo
  6. 06 Linux pour les devs - 05 - nano, vim, sed et awk
  7. 07 Linux pour les devs - 06 - Pipes et redirections
  8. 08 Linux pour les devs - 07 - grep et find en profondeur
  9. 09 Linux pour les devs - 08 - Les processus : comprendre ce qui tourne sur ta machine
  10. 10 Linux pour les devs - 09 - systemd : gerer tes services comme un pro
  11. 11 Linux pour les devs - 10 - Le réseau : comprendre ce qui passe par le fil
  12. 12 Linux pour les devs - 11 - Le firewall : contrôler qui entre et qui sort
  13. 13 Linux pour les devs - 12 - SSH : l'acces distant sécurisé
  14. 14 Linux pour les devs - 13 - Les variables d'environnement : configurer sans hardcoder
  15. 15 Linux pour les devs - 14 - Scripts bash : automatiser pour ne plus se répéter
  16. 16 Linux pour les devs - 15 - cron : les taches planifiees
  17. 17 Linux pour les devs - 16 - Les logs : lire, filtrer, comprendre
  18. 18 Linux pour les devs - 17 - Stockage et disques
  19. 19 Linux pour les devs - 18 - Les gestionnaires de paquets
  20. 20 Linux pour les devs - 19 - Les conteneurs sans Docker
  21. 21 Linux pour les devs - 20 - Securiser un serveur Linux
  22. 22 Linux pour les devs - 21 - Performance et diagnostic
  23. 23 Linux pour les devs - 22 - tmux : le multiplexeur de terminal
  24. 24 Linux pour les devs - 23 - Glossaire Linux

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 :

  1. Persistance : ta session survit a une deconnexion SSH. Tu te reconnectes et tu retrouves tout exactement comme avant.
  2. Multiplexage : plusieurs terminaux dans une seule fenêtre. Pas besoin de 6 onglets SSH.
  3. 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 nom pour créer, tmux attach -t nom pour rattacher
  • Ctrl+b d pour detacher, Ctrl+b c pour une fenêtre, Ctrl+b % et " pour diviser
  • Ctrl+b z pour zoomer sur un panneau
  • Configure ~/.tmux.conf avec 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

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.