103.5 Leçon 2
Certification : |
LPIC-1 |
---|---|
Version : |
5.0 |
Thème : |
103 Commandes GNU et Unix |
Objectif : |
103.5 Créer, surveiller et arrêter des processus |
Leçon : |
2 sur 2 |
Introduction
Les outils et programmes abordés dans la leçon précédente sont très utiles pour la surveillance des processus au sens large. Cependant, un administrateur système peut avoir besoin d’aller plus loin. Dans cette leçon, nous allons parler du concept de multiplexeur de terminal et découvrir GNU Screen et tmux. Même si les émulateurs de terminal actuels sont modernes et performants, les multiplexeurs conservent des fonctionnalités intéressantes et puissantes pour un administrateur système productif.
Caractéristiques des multiplexeurs de terminal
En électronique, un multiplexeur (ou mux) est un dispositif qui permet de connecter plusieurs entrées à une seule sortie. Par conséquent, un multiplexeur de terminal nous permet de passer d’une entrée à l’autre selon les besoins. Bien qu’ils ne soient pas tout à fait identiques, screen
et tmux
partagent une série de caractéristiques communes :
-
Toute invocation valide aboutit au moins à une session qui, à son tour, comprend au moins une fenêtre. Les fenêtres contiennent des programmes.
-
Les fenêtres peuvent être subdivisées en régions ou en volets, ce qui peut améliorer la productivité lorsque l’on travaille avec plusieurs programmes en même temps.
-
Facilité d’utilisation : pour exécuter la plupart des commandes, il suffit d’utiliser une combinaison de touches appelée préfixe de commande ou touche de commande suivie d’un autre caractère.
-
Les sessions peuvent être détachées de leur terminal en cours (c’est-à-dire que les programmes sont envoyés en arrière-plan et continuent à s’exécuter). Cela garantit l’exécution complète des programmes, même si nous fermons accidentellement un terminal, si le terminal reste ponctuellement bloqué ou si la connexion à distance est perdue.
-
Connexion par socket.
-
Mode copier/coller.
-
Les deux sont hautement configurables.
GNU Screen
Dans les débuts d’Unix (années 70-80), les ordinateurs étaient principalement constitués de terminaux connectés à un ordinateur central. C’était tout, pas de fenêtres multiples ni d’onglets. C’est la raison pour laquelle GNU Screen a été créé en 1987 : émuler plusieurs écrans VT100 indépendants sur un seul terminal physique.
Les fenêtres
GNU Screen est invoqué en tapant simplement screen
dans le terminal. Vous verrez alors un message de bienvenue :
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Appuyez sur Espace ou Entrée pour fermer le message et vous vous retrouverez face à une invite de commande :
$
On pourrait croire que rien ne s’est passé, mais en fait, screen
a déjà créé et gère sa première session et sa première fenêtre. Le préfixe de commande de Screen est Ctrl+a. Pour voir toutes les fenêtres en bas de l’écran du terminal, tapez Ctrl+a-w :
0*$ bash
La voilà, notre seule et unique fenêtre pour le moment ! Notez que le compteur commence à 0. Pour créer une autre fenêtre, tapez Ctrl+a-c. Vous verrez apparaître une nouvelle invite de commande. Lancez ps
dans cette nouvelle fenêtre :
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
et tapez à nouveau Ctrl+a-w :
0-$ bash 1*$ bash
Voilà nos deux fenêtres (notez l’astérisque indiquant la fenêtre qui s’affiche actuellement). Cependant, comme elles ont été lancées avec Bash, elles portent toutes les deux le même nom. Puisque nous avons invoqué ps
dans notre fenêtre actuelle, renommons-la avec ce même nom. Pour ce faire, vous devez taper Ctrl+a-A et saisir le nouveau nom de la fenêtre (ps
) à l’invite :
Set window's title to: ps
Maintenant, nous allons créer une autre fenêtre en lui attribuant un nom dès le départ : yetanotherwindow
. Cela se fait en invoquant screen
avec l’option -t
:
$ screen -t yetanotherwindow
Vous avez plusieurs possibilités pour passer d’une fenêtre à l’autre :
-
En utilisant Ctrl+a-n (next - aller à la fenêtre suivante) et Ctrl+a-p (previous - aller à la fenêtre précédente).
-
En utilisant Ctrl+a-num (aller à la fenêtre numéro num).
-
En utilisant Ctrl+a-" pour afficher une liste de toutes les fenêtres. Vous pouvez vous déplacer vers le haut et vers le bas en utilisant les touches fléchées et sélectionner celle que vous voulez avec la touche Entrée :
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Lorsque vous travaillez avec des fenêtres, il est important de garder en tête quelques principes de base :
-
Les fenêtres exécutent leurs programmes de manière totalement indépendante les unes des autres.
-
Les programmes continuent à s’exécuter même si leur fenêtre n’est pas visible (y compris lorsque la session de Screen est détachée, comme nous allons le voir).
Pour supprimer une fenêtre, il suffit de terminer le programme qui s’y trouve (une fois la dernière fenêtre supprimée, screen
se terminera lui-même). Vous pouvez également utiliser Ctrl+a-k lorsque vous êtes dans la fenêtre que vous voulez supprimer ; un message de confirmation s’affichera à l’écran :
Really kill this window [y/n] Window 0 (bash) killed.
Les régions
screen
permet de segmenter l’écran d’un terminal en plusieurs régions dans lesquelles on peut placer des fenêtres. Ces subdivisions peuvent être horizontales (Ctrl+a-S) ou verticales (Ctrl+a-|).
La seule chose qui s’affichera dans la nouvelle région sera un simple --
en bas, ce qui veut dire qu’elle est vide :
1 ps --
Pour vous déplacer vers la nouvelle région, tapez Ctrl+a-Tab. Vous pouvez maintenant insérer une fenêtre par l’une des méthodes que nous avons déjà vues, par exemple : Ctrl+a-2. Le --
devrait maintenant se transformer en 2 yetanotherwindow
:
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
Voici quelques points importants qu’il faut garder à l’esprit lorsqu’on utilise les régions :
-
Vous vous déplacez entre les régions en tapant Ctrl+a-Tab.
-
Vous pouvez faire disparaître toutes les régions à l’exception de celle qui est en cours avec Ctrl+a-Q.
-
Vous pouvez faire disparaître la région en cours avec Ctrl+a-X.
-
La fermeture d’une région n’entraîne pas la fermeture de la fenêtre qui lui est associée.
Les sessions
Pour l’instant, nous avons manipulé les fenêtres et les régions, qui appartenaient toutes à la même et unique session. Il est temps de commencer à jouer avec les sessions. Pour afficher la liste de toutes les sessions, tapez screen -list
ou screen -ls
:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
C’est notre seule session pour l’instant :
- PID
-
1037
- Nom
-
pts-0.debian
(indiquant le terminal — dans notre cas un pseudo-terminal secondaire — et le nom de l’hôte). - État
-
Attached
(attachée)
Nous allons créer une nouvelle session en lui donnant un nom plus parlant :
$ screen -S "second session"
L’écran du terminal s’efface et une nouvelle invite s’affiche. Vous pouvez à nouveau vérifier les sessions :
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
Pour supprimer une session, quittez toutes ses fenêtres ou tapez simplement la commande screen -S SESSION-PID -X quit
(alternativement vous pouvez fournir le nom de la session). Débarrassons-nous de notre première session :
$ screen -S 1037 -X quit
Vous serez renvoyé à l’invite de votre terminal en dehors de screen
. Mais n’oubliez pas que notre deuxième session est toujours active :
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
En revanche, comme nous avons tué la session parent, une nouvelle étiquette lui a été attribuée : Detached
(détachée).
Détacher une session
Vous pouvez être amené à détacher une session de screen
de son terminal pour plusieurs raisons :
-
Pour laisser votre ordinateur au travail faire ce qu’il a à faire et vous reconnecter à distance plus tard depuis chez vous.
-
Pour partager une session avec d’autres utilisateurs.
Vous détachez une session avec la combinaison de touches Ctrl+a-d. Vous revenez alors dans votre terminal :
[detached from 1090.second session] $
Pour vous rattacher à la session, vous utilisez la commande screen -r SESSION-PID
(PID de la session). Alternativement, vous pouvez utiliser le SESSION-NAME
(nom de la session) comme nous l’avons vu plus haut. S’il n’y a qu’une seule session détachée, aucun des deux arguments n’est obligatoire :
$ screen -r
Cette commande suffit pour nous rattacher à notre deuxième session :
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Voici quelques options importantes pour rattacher une session :
-d -r
-
Rattacher une session et — si nécessaire — la détacher au préalable.
-d -R
-
Identique à
-d -r
maisscreen
va même créer la session auparavant si elle n’existe pas. -d -RR
-
Identique à
-d -R
. En revanche, si plusieurs sessions sont disponibles, c’est la première qui sera utilisée. -D -r
-
Rattacher une session. En cas de besoin, détachez-la et déconnectez-vous à distance dans un premier temps.
-D -R
-
Si une session est en cours, rattachez-la (détachez-la et déconnectez-vous d’abord à distance si nécessaire). Si elle n’était pas active, créez-la et affichez une notification à l’utilisateur.
-D -RR
-
Identique à
-D -R
— mais en insistant davantage. -d -m
-
Démarre
screen
en mode détaché. Cela permet de créer une nouvelle session sans s’y attacher. Cette option est utile pour les scripts de démarrage du système. -D -m
-
Identique à
-d -m
, mais ne crée pas de nouveau processus. La commande se termine dès que la session se termine.
Lisez les pages du manuel de screen
pour en savoir plus sur les autres options.
Copier & Coller : le mode défilement
GNU Screen dispose d’un mode copie ou défilement (scrollback). Une fois activé, vous pouvez déplacer le curseur dans la fenêtre actuelle et dans son historique à l’aide des touches fléchées. Vous pouvez marquer du texte et le copier d’une fenêtre à l’autre. Voici les étapes à suivre :
-
Activez le mode copie/défilement : Ctrl+a-[.
-
Déplacez le curseur au début du texte à copier à l’aide des touches fléchées.
-
Marquez le début du texte à copier : Espace.
-
Déplacez le curseur à la fin du texte à copier à l’aide des touches fléchées.
-
Marquez la fin du texte à copier : Espace.
-
Basculez vers la fenêtre de votre choix et collez le bout de texte : Ctrl+a-].
Personnalisation de screen
Le fichier de configuration système pour screen est /etc/screenrc
. Alternativement, un fichier de configuration utilisateur ~/.screenrc
peut être utilisé. Le fichier comprend quatre sections de configuration principales :
SCREEN SETTINGS
-
Vous pouvez définir des paramètres globaux en spécifiant la directive suivie d’une espace et de la valeur, comme dans l’exemple suivant :
defscrollback 1024
. SCREEN KEYBINDINGS
-
Cette section est assez intéressante puisqu’elle vous permet de redéfinir les combinaisons de touches qui peuvent interférer avec votre utilisation quotidienne du terminal. Utilisez le mot-clé
bind
suivi d’une espace, du caractère à utiliser après le préfixe de la commande, d’un autre espace et de la commande, comme dans :bind l kill
(ce paramètre changera la façon par défaut de tuer une fenêtre en Ctrl+a-l).Pour afficher tous les raccourcis clavier de screen, tapez Ctrl+a-? ou consultez la page de manuel en ligne.
TipBien entendu, vous pouvez également modifier le préfixe de la commande lui-même. Par exemple, pour passer de Ctrl+a à Ctrl+b, il suffit d’ajouter cette ligne :
escape ^Bb
. TERMINAL SETTINGS
-
Cette section comprend les paramètres relatifs à la taille des fenêtres du terminal et à la mémoire tampon, entre autres. Pour activer le mode non-bloquant afin de mieux gérer les connexions SSH instables, par exemple, la configuration suivante est utilisée :
defnonblock 5
. STARTUP SCREENS
-
Vous pouvez inclure des commandes pour faire tourner certains programmes au démarrage de
screen
; par exemple :screen -t top top
(screen ouvrira une fenêtre nomméetop
avec le programmetop
à l’intérieur).
tmux
tmux
a été publié en 2007. Bien que très similaire à screen
, il comporte néanmoins quelques différences notables :
-
Modèle client-serveur : le serveur fournit une série de sessions, chacune d’entre elles pouvant être associée à un certain nombre de fenêtres qui peuvent, à leur tour, être partagées par différents clients.
-
Sélection interactive des sessions, des fenêtres et des clients via des menus.
-
Une même fenêtre peut être liée à plusieurs sessions.
-
Dispositions clavier pour vim et Emacs.
-
Prise en charge des terminaux UTF-8 et 256 couleurs.
Les fenêtres
tmux
peut être invoqué en tapant simplement tmux
à l’invite de commande. Vous verrez apparaître une invite de commande et une barre d’état en bas de la fenêtre :
[0] 0:bash* "debian" 18:53 27-Aug-19
Outre le nom d’hôte, l’heure et la date, la barre d’état fournit les informations suivantes :
- Nom de la session
-
[0]
- Numéro de la fenêtre
-
0:
- Nom de la fenêtre
-
bash*
. Dans la configuration par défaut, il s’agit du nom du programme qui s’exécute dans la fenêtre et — contrairement àscreen
—tmux
le mettra automatiquement à jour pour refléter le programme en cours d’exécution. Notez l’astérisque indiquant qu’il s’agit de la fenêtre active et visible.
Vous pouvez affecter un nom de session et un nom de fenêtre lorsque vous invoquez tmux
:
$ tmux new -s "LPI" -n "Window zero"
La barre d’état sera modifiée en conséquence :
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
Le préfixe de commande de tmux est Ctrl+b. Pour créer une nouvelle fenêtre, il suffit de taper Ctrl+b-c ; vous verrez apparaître une nouvelle invite et la barre d’état indiquera la nouvelle fenêtre :
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Étant donné que Bash est l’interpréteur de commandes utilisé, la nouvelle fenêtre recevra ce nom par défaut. Lancez top
et observez comment le nom se transforme en top
:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
Dans tous les cas, vous pouvez renommer une fenêtre avec Ctrl+b-,. À l’invite, renseignez le nouveau nom et confirmez en appuyant sur la touche Entrée :
(rename-window) Window one
Vous pouvez afficher toutes les fenêtres pour une sélection avec Ctrl+b-w (utilisez les touches fléchées pour vous déplacer vers le haut et vers le bas et la touche Entrée pour faire la sélection) :
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
De la même manière que pour screen
, nous pouvons passer d’une fenêtre à l’autre avec :
- Ctrl+b-n
-
passer à la fenêtre suivante.
- Ctrl+b-p
-
passer à la fenêtre précédente.
- Ctrl+b-num
-
passer à la fenêtre numéro num.
Pour vous débarrasser d’une fenêtre, utilisez Ctrl+b-&. Il vous sera demandé de confirmer :
kill-window Window one? (y/n)
D’autres commandes de fenêtres intéressantes sont disponibles :
- Ctrl+b-f
-
rechercher une fenêtre par son nom.
- Ctrl+b-.
-
modifier le numéro d’index de la fenêtre.
Pour connaître la liste complète des commandes, consultez la page du manuel.
Les panneaux
La possibilité de diviser les fenêtres de screen
est également présente dans tmux
. Les subdivisions résultantes ne sont pas appelées régions mais panneaux, cependant. La principale différence entre les régions et les panneaux est que ces derniers sont des pseudo-terminaux à part entière liés à une fenêtre. Ce qui signifie que tuer un panneau va également tuer son pseudo-terminal ainsi que tous les programmes associés qui s’exécutent à l’intérieur.
Pour diviser une fenêtre horizontalement, nous utilisons Ctrl+b-" :
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Pour la diviser verticalement, utilisez Ctrl+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Pour détruire le panneau actif (ainsi que le pseudo-terminal qui s’y trouve et tous les programmes associés), utilisez Ctrl+b-x. La barre d’état vous demandera de confirmer cette opération :
kill-pane 1? (y/n)
Quelques commandes importantes pour manipuler les panneaux :
- Ctrl+b-↑,↓,←,→
-
se déplacer d’un panneau à l’autre.
- Ctrl+b-;
-
revenir vers le dernier panneau actif.
- Ctrl+b-Ctrl+touche fléchée
-
redimensionner le panneau d’une ligne.
- Ctrl+b-Alt+touche fléchée
-
redimensionner le panneau de cinq lignes.
- Ctrl+b-{
-
permuter les panneaux (actuel vers précédent).
- Ctrl+b-}
-
permuter les panneaux (actuel vers suivant).
- Ctrl+b-z
-
zoomer/dézoomer le panneau.
- Ctrl+b-t
-
tmux
affiche une horloge fantaisiste à l’intérieur du panneau (supprimez-la en appuyant surq
). - Ctrl+b-!
-
transformer le panneau en fenêtre.
Pour connaître la liste complète des commandes, consultez la page du manuel.
Les sessions
Pour lister les sessions dans tmux
, vous pouvez utiliser Ctrl+b-s:
(0) + LPI: 2 windows (attached)
Alternativement, vous pouvez utiliser la commande tmux ls
:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
Il n’y a qu’une seule session (LPI
) qui comprend deux fenêtres. Créez une nouvelle session depuis la session actuelle. Pour ce faire, utilisez Ctrl+b, tapez :new
à l’invite, puis appuyez sur Entrée. Vous serez redirigé vers la nouvelle session, comme en témoigne la barre d’état :
[2] 0:bash* "debian" 19:15 27-Aug-19
Par défaut, tmux
a nommé la session 2
. Pour la renommer, utilisez Ctrl+b-$. À l’invite, fournissez le nouveau nom et appuyez sur Entrée :
(rename-session) Second Session
Vous pouvez basculer entre les sessions avec Ctrl+b-s (utilisez les touches fléchées et la touche Entrée) :
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Pour tuer une session, vous pouvez utiliser la commande tmux kill-session -t NOM-SESSION
. Si vous tapez la commande depuis la session en cours, vous sortirez de tmux
pour revenir dans votre session de terminal initiale :
$ tmux kill-session -t "Second Session" [exited] $
Détacher une session
En tuant Second Session
, nous avons été éjectés de tmux
. En revanche, nous avons toujours une session active. Demandez à tmux
une liste des sessions et vous la retrouverez sûrement :
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Cependant, cette session est détachée de son terminal. Nous pouvons la rattacher avec tmux attach -t SESSION-NAME
(attach
peut être remplacé par at
ou — plus simplement — a
). Lorsqu’il n’y a qu’une seule session, la spécification du nom est optionnelle :
$ tmux a
Vous voilà de retour dans votre session ; pour vous en détacher, appuyez sur Ctrl+b-d :
[detached (from session LPI)] $
Tip
|
La même session peut être attachée à plus d’un terminal. Si vous voulez attacher une session en vous assurant qu’elle est d’abord détachée de tous les autres terminaux, utilisez l’option |
Commandes importantes pour attacher ou détacher une session :
- Ctrl+b-D
-
sélectionner le client à détacher.
- Ctrl+b-r
-
rafraîchir le terminal du client.
Pour connaître la liste complète des commandes, consultez la page du manuel.
Copier & Coller : le mode défilement
tmux
propose également un mode copie qui fonctionne pratiquement pareil que celui de screen
(songez à utiliser le préfixe de commande de tmux
et non pas celui de screen
!) La seule différence au niveau des commandes, c’est que vous utiliserez Ctrl + Espace pour marquer le début de la sélection et Alt+w pour copier le texte sélectionné.
Personnalisation de tmux
Les fichiers de configuration de tmux
se trouvent typiquement dans /etc/tmux.conf
et dans ~/.tmux.conf
. Lors du lancement, tmux
recherche ces fichiers s’ils existent. Vous pouvez également lancer tmux
avec l’option -f
pour fournir un fichier de configuration alternatif. Un exemple de fichier de configuration tmux
se trouve dans /usr/share/doc/tmux/example_tmux.conf
. Le niveau de personnalisation que vous pouvez atteindre est considérable. Parmi les choses que vous pouvez faire, on peut citer :
-
Changer le préfixe de commande
# Changer le raccourci préfixe en C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Définir des raccourcis clavier supplémentaires pour les fenêtres au-delà de 9
# Raccourcis clavier pour sélectionner les fenêtres à numérotation plus élevée bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Pour obtenir une liste complète de tous les raccourcis clavier, tapez Ctrl+b-? (appuyez sur q
pour quitter) ou consultez la page du manuel.
Exercices guidés
-
Indiquez si les affirmations/caractéristiques suivantes correspondent à GNU Screen, à tmux ou aux deux :
Affirmation/Caractéristique GNU Screen tmux Le préfixe de commande par défaut est Ctrl+a
Modèle client-serveur
Les panneaux sont des pseudo-terminaux
La suppression d’une région n’entraîne pas la suppression de la (des) fenêtre(s) associée(s)
Les sessions comprennent des fenêtres
Les sessions peuvent être détachées
-
Installez GNU Screen sur votre ordinateur (nom du paquet :
screen
) et effectuez les tâches suivantes :-
Lancez le programme. Quelle commande utilisez-vous ?
-
Lancez
top
: -
En utilisant le préfixe clavier de screen, ouvrez une nouvelle fenêtre ; ensuite, ouvrez
/etc/screenrc
avecvi
: -
Affichez la liste des fenêtres en bas de l’écran :
-
Renommez la fenêtre active en
vi
: -
Renommez la fenêtre restante en
top
. Pour ce faire, affichez d’abord une liste de toutes les fenêtres afin de pouvoir vous déplacer vers le haut et vers le bas et sélectionnez la bonne : -
Vérifiez si les noms ont bien changé en affichant à nouveau les noms des fenêtres en bas de l’écran :
-
Maintenant, détachez la session et demandez à
screen
d’en créer une autre nomméessh
: -
Détachez-vous de la session
ssh
et demandez àscreen
d’afficher la liste des sessions : -
Maintenant, attachez-vous à la première session en utilisant son PID :
-
Vous devriez être revenu à la fenêtre qui affiche
top
. Partagez la fenêtre horizontalement et déplacez-vous vers la nouvelle région vide : -
Demandez à
screen
de lister toutes les fenêtres et sélectionnezvi
pour l’afficher dans la nouvelle région vide : -
Maintenant, scindez la région actuelle dans le sens vertical, déplacez-vous vers la région vide nouvellement créée et associez-la à une toute nouvelle fenêtre :
-
Terminez toutes les régions à l’exception de la région actuelle (rappelez-vous que même si vous supprimez les régions, les fenêtres sont toujours actives). Ensuite, quittez toutes les fenêtres de la session en cours jusqu’à ce que la session elle-même soit terminée :
-
Enfin, demandez à
screen
de lister ses sessions une dernière fois, tuez la sessionssh
restante par son PID et vérifiez qu’il n’y a effectivement plus de sessions :
-
-
Installez
tmux
sur votre ordinateur (nom du paquet :tmux
) et effectuez les tâches suivantes :-
Lancez le programme. Quelle commande utilisez-vous ?
-
Lancez
top
(notez comment — au bout de quelques secondes — le nom de la fenêtre est remplacé partop
dans la barre d’état) : -
En utilisant le préfixe clavier de tmux, ouvrez une nouvelle fenêtre ; puis, créez
~/.tmux.conf
en utilisantnano
: -
Scindez la fenêtre verticalement et réduisez à plusieurs reprises la taille du panneau nouvellement créé :
-
Maintenant, changez le nom de la fenêtre courante en
text editing
; ensuite, demandez àtmux
d’afficher une liste de toutes ses sessions : -
Passez à la fenêtre où se trouve
top
et revenez à la fenêtre actuelle en utilisant la même combinaison de touches : -
Détachez-vous de la session en cours et créez-en une nouvelle nommée
ssh
avec une fenêtressh window
: -
Détachez-vous également de la session
ssh
et demandez àtmux
de réafficher la liste des sessions :NoteA partir de là, l’exercice requiert l’utilisation d’une machine distante pour les connexions
ssh
à votre hôte local (une machine virtuelle est parfaitement valide et peut s’avérer très pratique). Assurez-vous queopenssh-server
est installé et fonctionne sur votre machine locale et qu’au minimumopenssh-client
est installé sur la machine distante. -
Maintenant, démarrez une machine distante et connectez-vous via
ssh
à votre hôte local. Une fois la connexion établie, vérifiez la présence de sessionstmux
: -
Sur l’hôte distant, attachez-vous à la session
ssh
par le nom : -
De retour sur votre machine locale, attachez-vous à la session
ssh
par le nom en vous assurant que la connexion à l’hôte distant est terminée au préalable : -
Affichez la sélection de toutes les sessions et allez à la première session (
[0]
). Une fois que vous y êtes, tuez la sessionssh
par le nom : -
Enfin, détachez-vous de la session en cours et tuez-la par le nom :
-
Exercices d’approfondissement
-
screen
ettmux
peuvent tous deux entrer en mode commande par le biais du préfixe de commande + : (nous avons déjà vu un bref exemple avectmux
). Faites quelques recherches et effectuez les tâches suivantes en mode commande :-
Faites passer
screen
en mode copie : -
Renommez la fenêtre en cours avec
tmux
: -
Fermez toutes les fenêtres de
screen
et terminez la session : -
Scindez un panneau en deux avec
tmux
: -
Tuez la fenêtre active avec
tmux
:
-
-
Lorsque vous activez le mode copie dans
screen
, vous pouvez non seulement utiliser les touches fléchées et PageHaut ou PageBas pour naviguer dans la fenêtre courante et la mémoire tampon de défilement. Il est également possible d’utiliser un éditeur plein écran de typevi
. En utilisant cet éditeur, effectuez les tâches suivantes :-
Affichez
supercalifragilisticexpialidocious
dans votre terminalscreen
: -
Maintenant, copiez cinq caractères consécutifs (de gauche à droite) dans la ligne située juste au-dessus de votre curseur :
-
Pour finir, on colle la sélection (
stice
) à l’invite de commande :
-
-
Admettons que vous voulez partager une session
tmux
(our_session
) avec un autre utilisateur. Vous avez créé le socket (/tmp/our_socket
) avec les bonnes permissions pour que vous et l’autre utilisateur puissiez lire et écrire. Quelles sont les deux autres conditions qui doivent être remplies pour que le second utilisateur puisse attacher avec succès la session par le biais detmux -S /tmp/our_socket a -t our_session
?
Résumé
Dans cette leçon, vous avez découvert les multiplexeurs de terminaux en général et GNU Screen et tmux en particulier. Voici les concepts importants à retenir :
-
Préfixe de commande :
screen
utilise Ctrl+a + caractère ;tmux
utilise Ctrl+b + caractère. -
Structure des sessions, des fenêtres et des subdivisions de fenêtres (régions ou panneaux).
-
Mode copier/coller.
-
Détachement de session : l’une des fonctionnalités les plus puissantes des multiplexeurs.
Les commandes suivantes ont été abordées dans cette leçon :
screen
-
Démarrer une session
screen
. tmux
-
Démarrer une session
tmux
.
Réponses aux exercices guidés
-
Indiquez si les affirmations/caractéristiques suivantes correspondent à GNU Screen, à tmux ou aux deux :
Affirmation/Caractéristique GNU Screen tmux Le préfixe de commande par défaut est Ctrl+a
x
Modèle client-serveur
x
Les panneaux sont des pseudo-terminaux
x
La suppression d’une région n’entraîne pas la suppression de la (des) fenêtre(s) associée(s)
x
Les sessions comprennent des fenêtres
x
x
Les sessions peuvent être détachées
x
x
-
Installez GNU Screen sur votre ordinateur (nom du paquet :
screen
) et effectuez les tâches suivantes :-
Lancez le programme. Quelle commande utilisez-vous ?
screen
-
Lancez
top
:top
-
En utilisant le préfixe clavier de screen, ouvrez une nouvelle fenêtre ; ensuite, ouvrez
/etc/screenrc
avecvi
:Ctrl+a-c
sudo vi /etc/screenrc
-
Affichez la liste des fenêtres en bas de l’écran :
Ctrl+a-w
-
Renommez la fenêtre active en
vi
:Ctrl+a-A. Ensuite, il faut taper
vi
et appuyer sur Entrée. -
Renommez la fenêtre restante en
top
. Pour ce faire, affichez d’abord une liste de toutes les fenêtres afin de pouvoir vous déplacer vers le haut et vers le bas et sélectionnez la bonne :Tout d’abord, nous tapons Ctrl+a-". Ensuite, nous utilisons les touches fléchées pour marquer la fenêtre qui correspond à
0 bash
et nous appuyons sur Entrée. Enfin, nous tapons Ctrl+a-A, nous taponstop
et nous appuyons sur Entrée. -
Vérifiez si les noms ont bien changé en affichant à nouveau les noms des fenêtres en bas de l’écran :
Ctrl+a-w
-
Maintenant, détachez la session et demandez à
screen
d’en créer une autre nomméessh
:Ctrl+a-d
screen -S "ssh"
et appuyez sur Entrée. -
Détachez-vous de la session
ssh
et demandez àscreen
d’afficher la liste des sessions :Ctrl+a-d
screen -list
ouscreen -ls
. -
Maintenant, attachez-vous à la première session en utilisant son PID :
screen -r PID-SESSION
-
Vous devriez être revenu à la fenêtre qui affiche
top
. Partagez la fenêtre horizontalement et déplacez-vous vers la nouvelle région vide :Ctrl+a-S
Ctrl+a-Tab
-
Demandez à
screen
de lister toutes les fenêtres et sélectionnezvi
pour l’afficher dans la nouvelle région vide :Nous utilisons Ctrl+a-" pour afficher toutes les fenêtres à sélectionner, marquer
vi
et appuyer sur Entrée. -
Maintenant, scindez la région actuelle dans le sens vertical, déplacez-vous vers la région vide nouvellement créée et associez-la à une toute nouvelle fenêtre :
Ctrl+a-|
Ctrl+a-Tab
Ctrl+a-c
-
Terminez toutes les régions à l’exception de la région actuelle (rappelez-vous que même si vous supprimez les régions, les fenêtres sont toujours actives). Ensuite, quittez toutes les fenêtres de la session en cours jusqu’à ce que la session elle-même soit terminée :
Ctrl+a-Q.
exit
(pour quitter Bash). Maj+ :, puis nous taponsquit
et appuyons sur Entrée (pour quittervi
). Ensuite, nous taponsexit
(pour quitter le shell Bash en cours) etq
(pour terminertop
) ; puis nous taponsexit
(pour quitter le shell Bash en cours). -
Enfin, demandez à
screen
de lister ses sessions une dernière fois, tuez la sessionssh
restante par son PID et vérifiez qu’il n’y a effectivement plus de sessions :screen -list
ouscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
orscreen -ls
-
-
Installez
tmux
sur votre ordinateur (nom du paquet :tmux
) et effectuez les tâches suivantes :-
Lancez le programme. Quelle commande utilisez-vous ?
tmux
-
Lancez
top
(notez comment — au bout de quelques secondes — le nom de la fenêtre est remplacé partop
dans la barre d’état) :top
-
En utilisant le préfixe clavier de tmux, ouvrez une nouvelle fenêtre ; puis, créez
~/.tmux.conf
en utilisantnano
:Ctrl+b-c
nano ~/.tmux.conf
-
Scindez la fenêtre verticalement et réduisez à plusieurs reprises la taille du panneau nouvellement créé :
Ctrl+b-"
Ctrl+b-Ctrl+↓
-
Maintenant, changez le nom de la fenêtre courante en
text editing
; ensuite, demandez àtmux
d’afficher une liste de toutes ses sessions :Ctrl+b-,. Ensuite, nous fournissons le nouveau nom et nous appuyons sur Entrée. Ctrl+b-s ou
tmux ls
. -
Passez à la fenêtre où se trouve
top
et revenez à la fenêtre actuelle en utilisant la même combinaison de touches :Ctrl+b-n ou Ctrl+b-p
-
Détachez-vous de la session en cours et créez-en une nouvelle nommée
ssh
avec une fenêtressh window
:Ctrl+b-d
tmux new -s "ssh" -n "ssh window"
-
Détachez-vous également de la session
ssh
et demandez àtmux
de réafficher la liste des sessions :Ctrl+b-d
tmux ls
NoteA partir de là, l’exercice requiert l’utilisation d’une machine distante pour les connexions
ssh
à votre hôte local (une machine virtuelle est parfaitement valide et peut s’avérer très pratique). Assurez-vous queopenssh-server
est installé et fonctionne sur votre machine locale et qu’au minimumopenssh-client
est installé sur la machine distante. -
Maintenant, démarrez une machine distante et connectez-vous via
ssh
à votre hôte local. Une fois la connexion établie, vérifiez la présence de sessionstmux
:Sur l’hôte distant :
ssh utilisateur-local@adresse-ip-locale
. Une fois connecté à la machine locale :tmux ls
. -
Sur l’hôte distant, attachez-vous à la session
ssh
par le nom :tmux a -t ssh
(a
peut être remplacé parat
ouattach
). -
De retour sur votre machine locale, attachez-vous à la session
ssh
par le nom en vous assurant que la connexion à l’hôte distant est terminée au préalable :tmux a -d -t ssh
(a
peut être remplacé parat
ouattach
). -
Affichez la sélection de toutes les sessions et allez à la première session (
[0]
). Une fois que vous y êtes, tuez la sessionssh
par le nom :Tapez Ctrl+b-s, utilisez les touches fléchées pour marquer la session
0
et appuyez sur Entréetmux kill-session -t ssh
. -
Enfin, détachez-vous de la session en cours et tuez-la par le nom :
Ctrl+b-d
tmux kill-session -t 0
.
-
Réponses aux exercices d’approfondissement
-
screen
ettmux
peuvent tous deux entrer en mode commande par le biais du préfixe de commande + : (nous avons déjà vu un bref exemple avectmux
). Faites quelques recherches et effectuez les tâches suivantes en mode commande :-
Faites passer
screen
en mode copie :Ctrl+a-: — ensuite on tape
copy
. -
Renommez la fenêtre en cours avec
tmux
:Ctrl+b-: — ensuite on tape
rename-window
. -
Fermez toutes les fenêtres de
screen
et terminez la session :Ctrl+a-: — ensuite on tape
quit
. -
Scindez un panneau en deux avec
tmux
:Ctrl+b-: — ensuite on tape
split-window
. -
Tuez la fenêtre active avec
tmux
:Ctrl+b-: — ensuite on tape
kill-window
.
-
-
Lorsque vous activez le mode copie dans
screen
, vous pouvez non seulement utiliser les touches fléchées et PageHaut ou PageBas pour naviguer dans la fenêtre courante et la mémoire tampon de défilement. Il est également possible d’utiliser un éditeur plein écran de typevi
. En utilisant cet éditeur, effectuez les tâches suivantes :-
Affichez
supercalifragilisticexpialidocious
dans votre terminalscreen
:echo supercalifragilisticexpialidocious
-
Maintenant, copiez cinq caractères consécutifs (de gauche à droite) dans la ligne située juste au-dessus de votre curseur :
On active le mode copie : Ctrl+a-[ ou Ctrl+a-: puis on tape
copy
. Ensuite, on se déplace vers la ligne supérieure en utilisantk
et on appuie sur la touche Espace pour marquer le début de la sélection. Enfin, on avance de quatre caractères en utilisantl
et on appuie à nouveau sur Espace pour marquer la fin de la sélection. -
Pour finir, on colle la sélection (
stice
) à l’invite de commande :Ctrl+a-]
-
-
Admettons que vous voulez partager une session
tmux
(our_session
) avec un autre utilisateur. Vous avez créé le socket (/tmp/our_socket
) avec les bonnes permissions pour que vous et l’autre utilisateur puissiez lire et écrire. Quelles sont les deux autres conditions qui doivent être remplies pour que le second utilisateur puisse attacher avec succès la session par le biais detmux -S /tmp/our_socket a -t our_session
?Les deux utilisateurs doivent avoir un groupe en commun, par exemple
multiplexer
. Ensuite, nous devons également attribuer le socket à ce groupe :chgrp multiplexer /tmp/our_socket
.