La commande “écran” pour émuler plusieurs sessions shell
Aujourd'hui, nous voyons comment utiliser screen
.
J'ai récemment dû exécuter des commandes qui s'attendaient à une très longue durée sur un serveur distant. Dans mon dernier article, par exemple,, J'ai décrit comment transférer des données entre un ancien NAS et un NAS moderne via FTP. Dans ce cas j'ai utilisé wget
avec le sujet -b
mettre le processus en arrière-plan afin que je puisse déconnecter la session ssh et que le processus se poursuive jusqu'à la fin.
Pour mettre même un processus très long en arrière-plan, ajoutez simplement un &
à la fin de la commande. Malheureusement, je suis très négligent et je m'attends souvent à ce que la commande renvoie la sortie dans un court laps de temps, alors qu'en réalité je me rends compte que j'aurais gagné du temps en mettant le caractère maudit en bas de la commande. Un exemple?
~# updatedb &
Au lieu de cela, nous voulons parler des fois où nous avons exécuté le même type de commande, mais ensuite la connexion s'est effondrée pour les causes les plus disparates? Qui n'a pas?
Heureusement ça existe screen
qui fait ça et bien plus encore… et maintenant nous verrons.
Screen est capable de gérer une infinité de fenêtres de terminaux virtuels en une seule session. Cela signifie qu'ayant à exécuter plusieurs commandes sur une machine distante, nous n'aurons pas à ouvrir une connexion SSH pour chaque commande que nous exécutons. En une session, nous avons des possibilités infinies “les fenêtres” sessions virtuelles et sans fin.

Les processus d'écran restent actifs même lorsque nous fermons la session principale, sauf si nous les résilions volontairement. Cela signifie qu'en cas de déconnexion accidentelle, le processus se poursuivra jusqu'à la fin et nous pourrons nous reconnecter à la session abandonnée sans douleur..
L'installation
Screen est préinstallé sur toutes les principales distributions. Vérifiez que vous l'avez dans vos colis.
~# screen --version
Screen version 4.08.00 (GNU) 05-Feb-20
Pour les architectures basées sur apt
:
~# apt install screen
Pour les architectures basées sur rpm
:
~# yum install screen
Écran de démarrage
Pour démarrer une session d'écran, tapez simplement screen dans une console.
~$ screen
Cette commande créera une session d'écran, créera une nouvelle fenêtre virtuelle dans la session et démarrera un shell dans cette fenêtre.
Maintenant que nous avons démarré la session, nous pouvons trouver une liste de commandes en tapant: Ctrl + a
?
.
Ed Ecco l'sortie:
Command key: ^A Literal ^A: a
break ^B b license , removebuf =
clear C lockscreen ^X x reset Z
colon : log H screen ^C c
copy ^[ [ login L select '
detach ^D d meta a silence _
digraph ^V monitor M split S
displays * next ^@ ^N sp n suspend ^Z z
dumptermcap . number N time ^T t
fit F only Q title A
flow ^F f other ^A vbell ^G
focus ^I pow_break B version v
hardcopy h pow_detach D width W
help ? prev ^H ^P p ^? windows ^W w
history { } quit \ wrap ^R r
info i readbuf < writebuf >
kill K k redisplay ^L l xoff ^S s
lastmsg ^M m remove X xon ^Q q
^] paste .
" windowlist -b
- select -
0 select 0
1 select 1
2 select 2
3 select 3
4 select 4
5 select 5
6 select 6
7 select 7
8 select 8
9 select 9
I login on
O login off
] paste .
| split -v
:kB: focus prev
Donner un nom à une session
Une session renommée est pratique lorsque nous devons la rappeler. Par exemple en renommant une session “wget_debian” nous saurons d'un coup d'œil en regardant la liste des sessions actives que dans cette session nous avons lancé le téléchargement ISO de Debian.
~$ screen -S wget_debian
Familiarisez-vous avec les fenêtres d'écran
Lorsque vous démarrez une session screen crée une fenêtre virtuelle avec un shell à l'intérieur.
Les fenêtres d'écran ne doivent pas être confondues avec les sessions. Une fenêtre (toutes les fenêtres que vous voulez) est contenu dans une session, à partir duquel vous pouvez vous déconnecter sans que cela ne mette fin aux processus contenus.
Vous pouvez avoir plusieurs fenêtres dans une session d'écran.
Pour créer un nouveau type de fenêtre virtuelle Ctrl+a
c
et le premier numéro de 0 une 9 sera attribué.
Voici quelques-unes des commandes les plus courantes pour gérer les fenêtres d'écran:
Ctrl + a
c
Créer une nouvelle fenêtreCtrl + a
"
Afficher une liste de fenêtresCtrl + a
0
(zéro) Passer à la fenêtre “0” (remplaçant “0” avec le numéro relatif à la fenêtre souhaitéeCtrl + a
A
Renommer la fenêtre couranteCtrl + a
S
Divise la partie de l'écran horizontalementCtrl + a
|
Divise la partie de l'écran verticalementCtrl + a
tab
Déplacer le focus vers la région suivanteCtrl + a
Ctrl + a
Passer de la fenêtre précédente à la suivanteCtrl + a
Q
Fermer toutes les régionsCtrl + a
X
Fermer la région actuelle
Débrancher (détacher) votre terminal depuis la session en cours
Un plus, comme déjà dit, est de pouvoir continuer à travailler en laissant les sessions d'écran fonctionner en arrière-plan, tandis que l'utilisateur peut travailler sur autre chose.
Ctrl + a
d
Se reconnecter (CV) votre terminal à une session
Pour rétablir la connexion avec une session abandonnée:
~$ screen -r
S'il y a plusieurs sessions sur une seule machine, vous devrez également ajouter l'ID de session après l'argument -r
.
Pour trouver l'ID de la session à laquelle se reconnecter, utilisez la commande suivante:
~$ screen -ls
There are screens on:
13871.pts-3.joe-toshiba (29/11/2022 11:59:39) (Detached)
13836.pts-3.joe-toshiba (29/11/2022 11:59:20) (Detached)
13811.pts-3.joe-toshiba (29/11/2022 11:58:49) (Detached)
3 Sockets in /run/screen/S-joe.
Si nous voulons revenir à la session 13836.pts-3
nous tapons la commande:
~$ screen -r 13836
Conclusions
Aujourd'hui, nous avons appris à utiliser l'écran pour créer plusieurs fenêtres à partir d'une seule session, naviguer entre les fenêtres et se déconnecter et se reconnecter aux différentes sessions… mais il y a beaucoup plus à apprendre mon écran.
0 commentaires