Comment utiliser la commande d'écran de Linux
Avec Linux screen
, vous pouvez pousser les applications de terminal en cours d'exécution en arrière-plan et les tirer vers l'avant lorsque vous voulez les voir. Il prend également en charge les affichages sur écran partagé et fonctionne sur les connexions SSH, même après la déconnexion et la reconnexion!
Sommaire
Qu'est-ce que la commande d'écran?
le screen
La commande est un multiplexeur de terminaux, et elle est absolument remplie d'options. Dire que cela peut faire beaucoup est le grand-père des euphémismes. La page de manuel comprend plus de 4 100 lignes.
Voici les cas les plus courants dans lesquels vous utiliseriez le screen
et nous les aborderons plus loin dans cet article:
- L'opération standard consiste à créer une nouvelle fenêtre contenant un shell, à exécuter une commande, puis à pousser la fenêtre en arrière-plan (appelée «détachement»). Lorsque vous voulez voir comment se déroule votre processus, vous pouvez à nouveau tirer la fenêtre au premier plan («rattacher») et la réutiliser. C'est idéal pour les longs processus que vous ne souhaitez pas interrompre accidentellement en fermant la fenêtre du terminal.
- Une fois que vous avez un
screen
session en cours, vous pouvez créer de nouvelles fenêtres et y exécuter d'autres processus. Vous pouvez facilement sauter entre les fenêtres pour suivre leur progression. Vous pouvez également diviser votre fenêtre de terminal en régions verticales ou horizontales et afficher vosscreen
fenêtres dans une seule fenêtre. - Vous pouvez vous connecter à une machine distante, démarrer un
screen
session et lancer un processus. Vous pouvez vous déconnecter de l'hôte distant, vous reconnecter et votre processus sera toujours en cours d'exécution. - Vous pouvez partager un
screen
session entre deux connexions SSH différentes afin que deux personnes puissent voir la même chose, en temps réel.
Écran d'installation
À installer screen
sur ubuntu, utilisez cette commande:
sudo apt-get install screen
À installer screen
sur Manjaro, utilisez la commande suivante:
sudo pacman -Sy screen
Sur Fedora, vous tapez ce qui suit:
sudo dnf install screen
Premiers pas avec l'écran
Commencer screen
, tapez-le simplement comme indiqué ci-dessous et appuyez sur Entrée:
screen
Vous verrez une page d'informations sur la licence. Vous pouvez appuyer sur la barre d'espace pour lire la deuxième page ou sur Entrée pour revenir à l'invite de commande.
Vous êtes laissé à l'invite de commande, et rien ne semble s'être produit. Cependant, vous exécutez maintenant un shell à l'intérieur d'un émulateur de terminal multiplexé. Pourquoi est-ce une bonne chose? Eh bien, commençons un processus qui va prendre beaucoup de temps. Nous allons télécharger le code source du dernier noyau Linux et le rediriger dans un fichier appelé latest_kernel.zip
.
Pour ce faire, nous tapons ce qui suit:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Notre téléchargement commence et le curl
la sortie nous montre les progrès.
Nous ne pouvons pas vous montrer une image du bit suivant, car il s'agit d'une séquence de touches. Vous tapez Ctrl + A, relâchez ces touches, puis appuyez sur d pour détacher l'écran.
Le processus de téléchargement est toujours en cours mais la fenêtre affichant le téléchargement est supprimée. Vous revenez à la fenêtre du terminal à partir de laquelle vous avez lancé le screen
session. Un message vous indique qu'un screen
fenêtre étiquetée 23167.pts-0.howtogeek
a été détaché.
Vous avez besoin du numéro du début du nom de la fenêtre pour le rattacher. Si vous l'oubliez, vous pouvez toujours utiliser le -ls
(list) option, comme indiqué ci-dessous, pour obtenir une liste des fenêtres détachées:
screen -ls
Lorsque vous êtes prêt, vous pouvez utiliser le -r
(rattacher) et le numéro de la session à rattacher, comme ceci:
screen -3 23167
La fenêtre qui fonctionnait en arrière-plan est maintenant ramenée à la fenêtre de votre terminal comme si elle ne l'avait jamais quittée.
Si c'est un processus qui se poursuivra jusqu'à sa conclusion, il finira par se terminer. S'il s'agit d'un processus continu, vous souhaiterez éventuellement y mettre fin. Dans les deux cas, une fois le processus terminé, vous pouvez taper exit
pour sortir du screen
. Alternativement, vous pouvez appuyer sur Ctrl + A, puis sur K pour tuer de force une fenêtre.
Tapez la commande suivante:
exit
Vous revenez à votre fenêtre de terminal précédente, qui affichera toujours la commande que vous avez utilisée pour rattacher la fenêtre. Parce que nous avons fermé notre seule et unique fenêtre détachée, nous obtenons un message screen
se termine.
Utilisation de sessions d'écran nommées
Vous pouvez utiliser le -S
(nom de la session) pour nommer votre screen
session. Si vous utilisez un nom mémorable plutôt que l'identité numérique de la session, il est plus pratique de se reconnecter à une session. Nous tapons ce qui suit pour nommer notre session «bigfile»:
screen -S bigfile
Quand screen
lance notre session, nous voyons une fenêtre vide avec une invite de commande. Nous allons télécharger un gros fichier, nous pouvons donc utiliser un processus de longue haleine comme exemple.
Nous tapons ce qui suit:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Lorsque le téléchargement démarre, nous appuyons sur Ctrl + A, puis sur D pour détacher la session. Nous tapons ce qui suit pour utiliser le -ls
option (liste) avec screen
pour voir les détails de notre session individuelle:
screen -ls
Derrière l'identifiant numérique (23266), on voit le nom de notre session (bigfile). Nous saisissons ce qui suit, y compris le nom de la session, pour le rattacher:
screen -r bigfile
Nous sommes reconnectés à notre fenêtre de téléchargement et constatons que le téléchargement long est toujours en cours.
Une fois le téléchargement terminé, nous tapons exit
pour fermer la fenêtre de session.
Utilisation de l'écran avec plusieurs fenêtres
Jusqu'à présent, nous avons utilisé screen
pour placer un seul processus en arrière-plan dans une fenêtre détachée. cependant, screen
est capable de faire bien plus que cela. Ensuite, nous exécuterons quelques processus qui nous permettront de surveiller certains aspects de notre ordinateur.
Nous tapons ce qui suit pour démarrer une session d'écran appelée «moniteur»:
screen -S monitor
À l'invite de commande de notre nouvelle session de fenêtre, nous lancerons dmesg
et utilisez le -H
(lisible par l'homme) et -w
(attendre les nouveaux messages). Cela affichera les messages de tampon du noyau; de nouveaux messages apparaîtront au fur et à mesure de leur apparition.
Nous tapons ce qui suit:
dmesg -H -w
Les messages existants apparaissent. Nous ne sommes pas revenus à l'invite de commande car dmseg
attend de nouveaux messages et les affichera à leur arrivée.
Nous voulons exécuter une autre application, nous avons donc besoin d'un nouveau screen
la fenêtre. Nous appuyons sur Ctrl + A, puis sur C pour créer une nouvelle fenêtre. Nous allons utiliser watch
pour exécuter à plusieurs reprises vmstat
, nous obtenons donc un affichage fréquemment mis à jour de l'utilisation de la mémoire virtuelle sur notre ordinateur.
À la nouvelle invite de commande, nous tapons ce qui suit:
watch vmstat
le vmstat
la sortie apparaît et se met à jour toutes les deux secondes.
Nos deux processus sont en cours d'exécution. Pour sauter entre les screen
Windows, vous appuyez sur Ctrl + A, et le numéro de la fenêtre. La première que nous avons créée est la fenêtre zéro (0), la suivante est la fenêtre 1, et ainsi de suite. Pour sauter à la première fenêtre (la dmesg
un), nous appuyons sur Ctrl + A et 0.
Si nous appuyons sur Ctrl + A et 1, cela nous ramène au vmstat
la fenêtre.
C’est assez chouette! Nous pouvons appuyer sur Ctrl + A, puis sur D pour nous détacher de cette session; nous pouvons rattacher plus tard. Les deux sessions seront toujours en cours d'exécution. Encore une fois, pour basculer entre les fenêtres, nous appuyons sur Ctrl + A et le numéro (0 ou 1) de la fenêtre vers laquelle nous voulons basculer.
Passons à l'étape suivante et visualisons les deux écrans dans une seule fenêtre. Lorsque vous faites cela, vous étirez votre fenêtre de terminal à une taille qui rend cette étape utile. Nos exemples sont limités à la taille de nos captures d'écran, donc nos fenêtres auront l'air un peu à l'étroit.
Pour ce faire, nous appuyons sur Ctrl + A, puis sur Maj + S (un «S» majuscule est requis).
La fenêtre se divise en deux «régions».
La région supérieure affiche toujours vmstat
et la zone inférieure est vide. Le curseur est mis en évidence dans la capture d'écran ci-dessous. Pour le déplacer vers la région inférieure, nous appuyons sur Ctrl + A, puis sur Tab.
Le curseur se déplace vers la région inférieure, qui n'est en réalité qu'un espace vide. Ce n'est pas un shell, donc nous ne pouvons rien y taper. Pour obtenir un affichage utile, nous appuyons sur Ctrl + A, puis sur «0» pour afficher dmesg
fenêtre dans cette région.
Cela nous donne les deux sorties en direct dans une fenêtre divisée. Si nous appuyons sur Ctrl + A et D pour détacher la fenêtre, puis la rattacher, nous perdrons la vue du volet divisé. Cependant, nous pouvons le restaurer avec les raccourcis clavier suivants:
- Ctrl + A, S: Divisez la fenêtre horizontalement.
- Ctrl + A, Languette: Déplacer vers la région inférieure.
- Ctrl + A, 0: Afficher la fenêtre zéro dans la région inférieure.
Nous pouvons aller encore plus loin. Nous allons maintenant diviser le volet inférieur verticalement et ajouter un troisième processus à l'affichage. Avec le curseur dans la région inférieure, nous appuyons sur Ctrl + A et C pour créer une nouvelle fenêtre avec un shell dedans. La région inférieure affiche la nouvelle fenêtre et nous donne une invite de commande.
Ensuite, nous exécutons le df
commande pour vérifier l'utilisation du système de fichiers:
df
Quand nous voyons df
en cours d'exécution, nous avons frappé Ctrl + A et le caractère de tuyau (|)
. Cela divise la région inférieure verticalement. Nous appuyons sur Ctrl + A et Tab pour passer à la nouvelle région. Ensuite, nous appuyons sur Ctrl + A et 0 pour afficher le dmesg
la fenêtre.
Vous pouvez également vous déplacer d'une région à l'autre et ajouter plus de divisions verticales ou horizontales. Voici quelques combinaisons de touches plus utiles:
- Ctrl + A: Faites des allers-retours entre les régions actuelles et précédentes.
- Ctrl + A, Q: Fermez toutes les régions sauf la région actuelle.
- Ctrl + A, X: Fermez la région actuelle.
Utilisation de l'écran via SSH
Avec screen
, vous pouvez démarrer une session de fenêtre, la détacher pour qu'elle s'exécute toujours en arrière-plan, vous déconnecter ou vous reconnecter, puis rattacher la session.
Faisons une connexion SSH à notre ordinateur à partir d'un autre avec le ssh
commander. Nous devons fournir le nom du compte avec lequel nous allons nous connecter et l'adresse de l'ordinateur distant.
Pour notre exemple, nous tapons ce qui suit:
ssh dave@192.168.4.30
Après nous être authentifiés sur l'ordinateur distant et nous être connectés, nous tapons ce qui suit pour démarrer un screen
session intitulée «ssh-geek»:
screen -S ssh-geek
À des fins de démonstration, nous exécuterons top
dans le screen
mais vous pouvez démarrer n'importe quel processus de longue durée ou sans fin.
Nous tapons ce qui suit:
top
Une fois que top
s'exécute dans la fenêtre, nous avons appuyé sur Ctrl + A, puis sur D pour détacher la fenêtre.
Nous revenons à la fenêtre du terminal distant d'origine.
Si on tape exit
, comme illustré ci-dessous, il déconnecte la session SSH et nous sommes de retour sur notre ordinateur local:
exit
Nous tapons ce qui suit pour vous reconnecter:
ssh dave@192.168.4.30
Après avoir été reconnecté et connecté, nous pouvons saisir ce qui suit pour rattacher le screen
session:
screen -r ssh-geek
Nous sommes maintenant reconnectés à notre instance toujours en cours d'exécution de top
.
C'est très bien si vous souhaitez démarrer un processus sur une machine, puis reprendre là où vous vous êtes arrêté sur une autre.
Partager une session d'écran
Vous pouvez également utiliser un screen
session pour permettre à deux personnes de voir et d'interagir avec la même fenêtre. Supposons que quelqu'un exécutant Fedora sur son ordinateur souhaite se connecter à notre serveur Ubuntu.
Il taperait ce qui suit:
ssh dave@192.168.4.30
Une fois connecté, il démarre une session d'écran appelée «ssh-geek» à l'aide de l'option -S (nom de session). Il utilise également le -d
(détacher) et -m
(création forcée) options pour créer un nouveau screen
session qui est déjà détachée.
Il tape ce qui suit:
screen -d -m -S ssh-geek
Il tape ce qui suit, en utilisant le -X
(mode multi-écran) pour attacher la session:
screen -X ssh-geek
Sur un ordinateur Manjaro, une autre personne se connecte à l'ordinateur Ubuntu avec les mêmes informations d'identification de compte, comme indiqué ci-dessous:
ssh dave@192.168.4.1
Une fois connectée, elle tape le screen
et utilise l'option -X (mode multi-écran) pour rejoindre la même session de fenêtre, comme ceci:
screen -X ssh-geek
Maintenant, tout ce que n'importe quelle personne tape, l'autre le verra. Par exemple, lorsqu'une personne émet la commande date, elles la voient toutes les deux comme elle est tapée, ainsi que sa sortie.
Les deux personnes partagent maintenant un screen
session qui s'exécute sur un ordinateur Ubuntu distant.
Pour un logiciel qui a vu le jour en 1987, screen
emballe toujours un bon coup de productivité. Vous familiariser avec ce sera du temps bien dépensé!