Aller au contenu principal

Tmux en pratique

Tmux est un multiplexeur de terminal. Il lance un serveur tmux sur la machine distante et organise le travail en session → fenêtre → panneau. Par exemple, une session vps-maintenance peut contenir une fenêtre avec un shell et journalctl, et une autre avec watch ou docker stats pour la supervision.

Si la connexion SSH est interrompue, la session tmux reste sur le VPS. Après une nouvelle connexion SSH, vous pouvez vous y rattacher. Tmux est utile pour les mises à jour, les builds, le suivi des journaux et les migrations longues. Il ne remplace ni une sauvegarde ni une seconde voie d’accès SSH.

Retenir la touche de préfixe​

Le préfixe par défaut est Ctrl-b. La plupart des raccourcis se saisissent en plusieurs temps, sans appuyer sur trois touches à la fois :

  1. Maintenir Ctrl et appuyer brièvement sur b.
  2. Relâcher les deux touches.
  3. Appuyer sur la touche de commande, par exemple d.

La notation utilisée ci-dessous est Ctrl-b d.

Une procédure minimale​

[REMOTE: VPS]
# Créer une session nommée
tmux new -s maintenance

# Travailler normalement dans tmux
sudo apt update

# Ctrl-b d : se détacher ; les tâches continuent

# Lister les sessions et se rattacher depuis un shell ordinaire
tmux ls
tmux attach -t maintenance

Une commande d’entrée idempotente particulièrement pratique :

tmux new-session -A -s maintenance

Elle se rattache à la session si elle existe, sinon elle la crée.

Fenêtres et panneaux​

RaccourciAction
Ctrl-b cCréer une fenêtre
Ctrl-b ,Renommer la fenêtre courante
Ctrl-b n / pFenêtre suivante / précédente
Ctrl-b 0..9Aller à une fenêtre numérotée
Ctrl-b %Diviser en panneaux côte à côte
Ctrl-b "Diviser en panneaux superposés
Ctrl-b + flècheChanger de panneau
Ctrl-b zAgrandir temporairement le panneau courant ; appuyer à nouveau pour restaurer
Ctrl-b xFermer le panneau courant, après confirmation
Ctrl-b dSe détacher de la session sans arrêter ses tâches

Nommez les fenêtres selon leur usage, par exemple deploy, logs et monitor, plutôt que d’en ouvrir sept toutes nommées bash.

Consulter l’historique des sorties​

Dans tmux, la molette du terminal ne permet pas toujours de parcourir directement l’historique. Appuyer sur :

Ctrl-b [

Cela ouvre le mode copie. Les flèches, Page Up/Page Down ou les touches de type Vim permettent de se déplacer ; q permet de quitter. Pour consulter rapidement des journaux, vous pouvez aussi laisser l’outil limiter sa propre sortie :

journalctl -u docker -n 200 --no-pager
docker compose logs --tail 200

Distinguer Ctrl-Z, le détachement et la sortie​

ActionEffet
Ctrl-ZLe shell envoie un signal de suspension au processus au premier plan, qui devient une tâche suspendue
bgRelance en arrière-plan une tâche suspendue dans le shell courant
fgRamène une tâche au premier plan
Ctrl-b dLe client tmux se détache, mais les programmes de la session continuent normalement
exitQuitte le shell courant ; la session se termine lorsque son dernier panneau se ferme

Après un Ctrl-Z accidentel, vérifiez d’abord :

jobs -l
fg %1 # Reprendre la tâche 1 au premier plan
# Ou bg %1 # Continuer en arrière-plan ; journaux et cycle de vie restent liés à ce shell

Pour une tâche longue, commencez dans tmux plutôt que de compter ensuite sur bg.

Une organisation pour le travail quotidien sur le VPS​

tmux new -s ops
  • Fenêtre deploy : entrer dans /srv/<service> et utiliser Compose.
  • Fenêtre logs : docker compose logs -f --tail 100.
  • Fenêtre health : watch -n 2 'docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'.

Il n’est pas nécessaire de conserver toutes les fenêtres indéfiniment. Une session centrée sur la tâche en cours est plus utile qu’un grenier rempli de terminaux.

Problèmes courants​

  • no sessions : la session est terminée ou n’a jamais été créée. Utiliser tmux new -s <name>.
  • sessions should be nested with care : tmux a été lancé depuis tmux. Vérifier $TMUX ; l’imbrication est généralement inutile.
  • Le rattachement signale une connexion existante : tmux attach -d -t <name> détache l’ancien client puis rattache celui-ci.
  • Une tâche disparaît après un redémarrage : tmux résiste aux coupures SSH, pas au redémarrage du VPS. Les services permanents relèvent d’une politique de redémarrage Docker ou de systemd.
  • Vous ne savez plus où vous êtes : tmux display-message -p '#S:#I.#P' affiche la session, la fenêtre et le panneau.

Terminer une session​

Arrêtez de préférence les programmes proprement dans chaque panneau, puis saisissez exit. Pour terminer délibérément une session entière :

tmux kill-session -t maintenance

Cette commande termine les processus de la session ; vérifiez donc son nom avant de l’exécuter.

Explorer les liensOuvrir le réseau