---
title: tmux
description: "Sessions, fenêtres et panneaux persistants : le multiplexeur indispensable en SSH et en pentest."
category: linux
kind: tool
tags: [terminal, multiplexer, sessions, panes, persistence]
level: basic
updated: 2026-11-11
order: 1
aliases: ["terminal multiplexer", "tmux cheat sheet"]
---

## Sessions

```bash
# Créer ou rattacher une session (le réflexe à retenir)
tmux new -A -s ops

# Nouvelle session nommée
tmux new -s recon

# Lister, rattacher, détacher
tmux ls
tmux attach -t recon
tmux attach -d -t recon      # détache les autres clients

# Tuer une session / tout le serveur
tmux kill-session -t recon
tmux kill-server
```

Depuis une session : `Ctrl-b` puis `d` pour détacher. La session continue de tourner après la fermeture du SSH.

> [!TIP]
> Lance un scan long dans tmux **avant** de perdre la connexion : `tmux new -d -s scan 'nmap -sV 10.10.10.0/24; exec bash'`. Tu pourras te rattacher plus tard avec `tmux attach -t scan`.

## Fenêtres

Préfixe par défaut : `Ctrl-b`.

| Touche | Action |
| --- | --- |
| `c` | Nouvelle fenêtre |
| `,` | Renommer |
| `n` / `p` | Fenêtre suivante / précédente |
| `0`…`9` | Aller à la fenêtre numérotée |
| `w` | Liste des fenêtres |
| `&` | Fermer la fenêtre |
| `.` | Déplacer la fenêtre |
| `f` | Chercher une fenêtre |
| `s` | Liste des sessions |
| `$` | Renommer la session |

## Panneaux

```text
Ctrl-b %     split vertical
Ctrl-b "     split horizontal
Ctrl-b ←↑↓→  changer de panneau
Ctrl-b o     panneau suivant
Ctrl-b z     zoom plein écran (toggle)
Ctrl-b x     fermer le panneau
Ctrl-b !     extraire le panneau dans une fenêtre
Ctrl-b { }   échanger avec le panneau précédent / suivant
Ctrl-b space changer de disposition
Ctrl-b q     afficher les numéros
```

Redimensionner : `Ctrl-b` puis `Ctrl` + flèches (ou `Alt` + flèches selon la configuration). Les panneaux conservent leur répertoire courant avec `split-window -c "#{pane_current_path}"`.

## Copier, chercher, scroller

```text
Ctrl-b [     entrer en mode copie
Espace       commencer la sélection
Entrée       copier
Ctrl-b ]     coller
/            chercher vers le bas
?            chercher vers le haut
n / N        résultat suivant / précédent
q            quitter le mode copie
```

```bash
# Activer la souris et le scrollback confortable
tmux set -g mouse on
tmux set -g history-limit 50000

# Mode vi pour la copie
tmux setw -g mode-keys vi
```

> [!TIP]
> En mode copie vi, `v` démarre la sélection, `y` copie et `/` cherche. Utilise `Ctrl-b PageUp` pour remonter directement dans le scrollback.

## Config minimale

```bash
# ~/.tmux.conf
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -g history-limit 50000
set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
set -g escape-time 0
set -g focus-events on
setw -g mode-keys vi

# Thème sobre, proche de sheet.sec
set -g status-style "bg=#050806,fg=#7dffb2"
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b-%y "
set -g window-status-current-style "fg=#050806,bg=#7dffb2"

# Splits dans le répertoire courant
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# Recharger la config avec Ctrl-b r
bind r source-file ~/.tmux.conf \; display-message "tmux: config reloaded"

# Naviguer avec hjkl
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
```

```bash
# Appliquer sans quitter
tmux source-file ~/.tmux.conf
```

## Automatiser un setup d'opération

```bash
# Créer une session avec trois panneaux prêts à l'emploi
tmux new -d -s op
tmux split-window -h -t op
tmux split-window -v -t op:0.1
tmux send-keys -t op:0.0 'nc -lvnp 4444' C-m
tmux send-keys -t op:0.1 'ffuf -u https://target/FUZZ -w words.txt' C-m
tmux send-keys -t op:0.2 'tail -f ~/notes/op.log' C-m
tmux attach -t op
```

```bash
# Envoyer une commande dans un panneau sans s'attacher
tmux send-keys -t op:0.0 'whoami' C-m

# Capturer l'écran ou tout le scrollback
tmux capture-pane -p -t op:0 > screen.txt
tmux capture-pane -pS -5000 -t op:0 > scrollback.txt

# Journaliser tout ce qui passe dans un panneau
tmux pipe-pane -o -t op:0 'cat >> ~/notes/op.log'
tmux pipe-pane -t op:0        # arrêter
```

```bash
# Suivre les panneaux actifs de toutes les sessions
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_current_command}'
```

## Persistance et reprise

```bash
# Sauvegarder / restaurer l'état des sessions
# Avec TPM + tmux-resurrect + tmux-continuum
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
```

```bash
# ~/.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'
set -g @continuum-restore 'on'
run '~/.tmux/plugins/tpm/tpm'
```

```text
Ctrl-b I     installer les plugins
Ctrl-b Ctrl-s sauvegarder la session (resurrect)
Ctrl-b Ctrl-r restaurer
```

## Sessions partagées et sockets

```bash
# Un serveur tmux séparé pour un lab ou un client
tmux -L lab new -s ops

# Socket explicite (contrôle des permissions)
tmux -S /tmp/ops.sock new -s ops
chmod 700 /tmp/ops.sock
tmux -S /tmp/ops.sock attach -t ops
```

> [!WARNING]
> Un socket tmux accessible à d'autres utilisateurs expose tout le contenu des sessions, y compris les commandes et les secrets affichés. Garde le socket dans un répertoire `700` et ne partage une session qu'avec des personnes de confiance.

## Dépannage

```bash
tmux ls
tmux attach -t ops
tmux detach-client -s ops
tmux kill-session -t ops

# Connaître les touches et options effectives
tmux list-keys
tmux show-options -g
tmux list-commands
```

- `no server running` : aucune session active, lance `tmux new -s ops`.
- `session not found` : `tmux ls` pour retrouver le bon nom.
- Couleurs cassées : vérifie `TERM` (`echo $TERM`) et `default-terminal`.
- `protocol version mismatch` : le client et le serveur tmux n'ont pas la même version.
- Terminal figé : `Ctrl-b d`, puis `tmux attach -d -t ops` depuis un autre shell.
