{{indexmenu_n>30}}
# Utiliser tmux pour administrer l'infrastructure
Le but de cette page est de présenter `tmux(1)`, d'expliquer les bases
de son utilisation et d'exposer nos recommandations quant à son
utilisation sur l'infrastructure de Picasoft. Elle ne présentera pas
(du moins pour l'instant) son utilisation avancée et sa personnalisation.
## Présentation
tmux est un multiplexeur de terminaux similaire à GNU Screen, qui permet
également de gérer des sessions. Cela signifie qu'il permet de découper
une même fenêtre de terminal en plusieurs sections et de faire persister
les sessions SSH même en cas de déconnexions, volontaires ou
accidentelles.
`tmux` est exécuté sur l'hôte sur lequel se trouve la session concernée.
Des cas d'usage courants comportent :
- l'utiliser sur un serveur pour stabiliser une session et ne pas
risquer de la perdre ;
- l'utiliser sur un serveur pour avoir accès à plusieurs shells
sans lancer de multiples connexions/utiliser plusieurs fenêtres de
terminaux ;
- l'utiliser en local pour faire persister un processus après avoir
fermé un terminal ;
- l'utiliser en local comme un gestionnaire de fenêtres terminal.
tmux est contrôlé de deux manières : avec des raccourcis et avec des
commandes. Les deux sont équivalents mais leur utilisation peut être
plus ou moins adaptée selon le contexte (e.g. script vs utilisation
interactive). Les raccourcis utilisent un préfixe, similaire en concept
à la touche `` de Vim, qui est par défaut `C-b` (Ctrl-b).
Les commandes tmux peuvent être abrégées tant qu'elles sont
déterminables avec la version raccourcie. Ainsi `tmux a` et `tmux
attach-session` sont équivalents, comme `tmux detach` et `tmux det`.
## Gestion de sessions
Il suffit de lancer `tmux` sur un hôte pour créer une session utilisant
`$SHELL`. Une barre de statut apparaît alors, comportant des
informations sur la session comme son nom, celui du processus courant,
le nom de l'hôte et la date. Si le terminal est fermé, cette session
n'est pas perdue. Pour la récupérer, il suffit de lancer `tmux attach`
sur le même hôte.
Il est également possible de passer explicitement une session en
arrière-plan avec `tmux detach` ou le raccourci `C-b d`. Les processus
de cette session persistent et on peut à nouveau se rattacher à la
session avec `tmux attach`.
Il est possible d'avoir plusieurs sessions en parallèle. Elles sont
alors listables avec `tmux ls` ou `C-b s`. Pour se connecter à une
session en particulier, il suffit d'utiliser `tmux attach -t ` ou
d'utiliser le menu de `C-b s`. L'id d'une session peut-être changé avec
`tmux rename ` ou `C-b $`.
`tmux kill-session` permet de terminer une session.
Il est à noter que la plupart des commandes `tmux` agissent sur la
session courante, mais qu'il est possible d'en cibler une autre avec
l'option `-t` (pour *target*).
## Multiplexage
tmux permet également de présenter à l'utilisateur plusieurs fenêtres et
panneaux dans un même terminal. Une fenêtre est un ensemble de panneaux,
occupant chacun une partie du terminal. On pourrait par exemple avoir au
sein d'une même session :
- une fenêtre avec deux panneaux : un à gauche avec Vim et un droite
avec mutt
- une autre avec trois panneaux : un un gauche avec top, un en haut à
droite avec bash et un en bas à droite avec le tail d'un journal
Il est possible de créer un panneau vertical avec `C-b %`, un horizontal
avec `C-b "`, de changer de panneau avec `C-b o`, d'en supprimer un avec
`C-b x`, de créer une fenêtre avec `C-b c` et d'en changer avec `C-b n`.
## Recommandations
Nous encourageons fortement l'utilisation de tmux au sein des connexions
SSH, surtout lors de l'exécution de commandes ayant un impact important
sur le système ou si la qualité de la connexion est faible. Cela réduit
par exemple le risque de laisser le système dans un état instable si la
connexion SSH tombe pendant une mise à jour.
## Aller plus loin
La page man de tmux contient d'autres commandes et raccourcis permettant
une utilisation plus avancée ainsi que des explications sur sa
configuration. Il est notamment possible d'utiliser des raccoucis par
défaut inspirés par `vi` plutôt qu'Emacs, de configurer la barre de
statut et de personnaliser les différents raccourcis.