Cosa succede quando sei connesso a un sistema remoto, utilizzando un programma di lunga durata, e quindi la connessione si interrompe? Le probabilità sono, come minimo, che dovrai riavviare il programma e, nel peggiore dei casi, avrai un danneggiamento dei dati. Per aiutare a aggirare questo problema, alcuni programmi vengono eseguiti in una shell di finestra sul sistema. Un esempio molto semplice di questo è lo screen
programma:
[pgervase@pgervase ~]$ ssh [email protected]
X11 forwarding request failed on channel 0
Last login: Wed Jan 27 12:10:06 2021 from xxxxxxxx.redhat.com
[root@rhel7dev ~]# screen
Questo apre la mia nuova shell su rhel7dev
sistema. Eseguirò il ping
comando di seguito dall'interno di quella sessione:
[root@rhel7dev ~]# ping www.google.com
PING www.google.com (74.125.24.147) 56(84) bytes of data.
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=1 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=2 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=3 ttl=100 time=242 ms
Ora mostrerò come staccare dalla sessione per simulare un'interruzione di rete o semplicemente lasciare qualcosa in esecuzione durante la notte. Per farlo, premo Ctrl , tieni premuto quel tasto, quindi premi A , quindi premi D . Ciò mi riporta al prompt SSH predefinito e sono quindi in grado di eseguire screen -ls
per vedere la mia sessione distaccata:
[root@rhel7dev ~]# screen -x
[detached from 25665.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There is a screen on:
25665.pts-0.rhel7dev (Detached)
1 Socket in /var/run/screen/S-root.
[root@rhel7dev ~]#
[ Potrebbe interessarti anche: Lavorare con le pipe sulla riga di comando di Linux ]
Per riprendere la mia sessione sullo schermo, digito screen -x
perché c'era solo una sessione come opzione. Questo mi ha riportato alla sessione dello schermo in cui il ping
il comando è ancora in esecuzione:
[root@rhel7dev ~]# ping www.google.com
PING www.google.com (74.125.24.147) 56(84) bytes of data.
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=1 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=2 ttl=100 time=242 ms
<snipped>
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=19 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=20 ttl=100 time=242 ms
^C
--- www.google.com ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 20278ms
rtt min/avg/max/mdev = 242.105/242.197/242.727/0.576 ms
[root@rhel7dev ~]#
Posso avere più sessioni di schermo contemporaneamente:
[root@rhel7dev ~]# screen -ls
There is a screen on:
25665.pts-0.rhel7dev (Detached)
1 Socket in /var/run/screen/S-root.
[root@rhel7dev ~]# screen
[detached from 25693.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There are screens on:
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
2 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]# screen
[detached from 25706.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There are screens on:
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
3 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]#
In ciascuna di queste tre sessioni dello schermo, posso avere comandi in esecuzione o semplicemente lasciare una sessione seduta al prompt.
Uno screen -x
predefinito non funzionerà per riprendere una sessione ora a causa delle schermate multiple in esecuzione:
[root@rhel7dev ~]# screen -x
There are several suitable screens on:
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[root@rhel7dev ~]#
Per collegarmi a una delle mie sessioni, devo eseguire screen -x
e aggiungi una quantità sufficiente del nome visualizzato per essere univoco:
[root@rhel7dev ~]# screen -x 257
[detached from 25706.pts-0.rhel7dev]
[root@rhel7dev ~]#
Invece di limitarti a una sola sessione o ricordare cosa è in esecuzione su quale schermo, puoi impostare un nome per la sessione usando il -S
argomento:
[root@rhel7dev ~]# screen -S "db upgrade"
[detached from 25778.db upgrade]
[root@rhel7dev ~]# screen -ls
There are screens on:
25778.db upgrade (Detached)
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
4 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]# screen -x "db upgrade"
[detached from 25778.db upgrade]
[root@rhel7dev ~]#
Per uscire da una sessione dello schermo, puoi digitare exit
oppure premi Ctrl+A e poi D .
Ora che sai come avviare, interrompere ed etichettare screen
sessioni entriamo un po' più in profondità. Per dividere la sessione dello schermo a metà verticalmente, premi Ctrl+A e poi | tasto (Maiusc+Barra rovesciata ). A questo punto, avrai la tua sessione schermo con il prompt a sinistra:
Per passare allo schermo a destra, premi Ctrl+A e poi la scheda chiave. Il cursore si trova ora nella sessione corretta, ma non viene visualizzato alcun messaggio. Per ricevere un messaggio, premi Ctrl+A e poi C . Posso farlo più volte per ottenere più divisioni verticali sullo schermo:
Ora puoi passare avanti e indietro tra i due riquadri dello schermo utilizzando Ctrl+A+Tab .
Cosa succede quando cat
fuori un file più grande di quanto la tua console possa visualizzare e quindi alcuni contenuti scorrono oltre? Per scorrere indietro nel buffer, premi Ctrl+A e poi Esc . Ora potrai usare i tasti cursore per spostarti sullo schermo e tornare indietro nel buffer.
Ci sono altre opzioni per screen
, quindi per vederli, premi Ctrl , quindi A , quindi il punto interrogativo :
[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]
Ulteriori letture possono essere trovate nella pagina man per screen
. Questo articolo è una rapida introduzione all'uso dello screen
comando in modo che una sessione remota disconnessa non finisca per uccidere accidentalmente un processo. Un altro programma simile a screen
è tmux
e puoi leggere su tmux
in questo articolo.