Il comando “screen” per emulare sessioni shell multiple
Attenzione
Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.
Oggi vediamo come usare screen
.
Di recente mi è capitato di dover lanciare dei comandi che prevedessero una durata molto lunga su un server remoto. Nel mio ultimo articolo, ad esempio, ho descritto come trasferire dati fra un vecchio NAS e un NAS moderno tramite FTP. In quel caso ho usato wget
con l’argomento -b
mettendo il processo in background così ho potuto scollegare la sessione SSH e il processo è continuato fino alla fine.
Per mettere in background un processo anche molto lungo è sufficiente aggiungere una &
alla fine del comando. Purtroppo io sono molto sbadato e spesso mi aspetto che il comando restituisca un output in breve tempo, mentre nella realtà mi rendo conto che avrei risparmiato il mio tempo mettendo il carattere maledetto in fondo al comando. Un esempio?
~# updatedb &
Vogliamo parlare invece delle volte in cui abbiamo lanciato lo stesso tipo di comando, ma poi la connessione è caduta per le cause più disparate? A chi non è successo?
Per fortuna esiste screen
che fa questo e molto altro… e ora lo vedremo.
Screen è in grado di gestire infinite finestre virtuali di terminali in una unica sessione. Ciò vuol dire che dovendo lanciare diversi comandi su una macchina remota non dovremo aprire una connessione SSH per ogni comando che lanciamo. In una sessione abbiamo la possibilità di infinite “finestre” virtuali e di infinite sessioni.
I processi di screen rimangono attivi anche quando chiudiamo la sessione principale, a meno che non li terminiamo volontariamente. Ciò significa che in caso di disconnessioni accidentali il processo andrà avanti fino alla fine e potremo riagganciarci alla sessione abbandonata senza dolori.
L’installazione
Screen è preinstallato su tutte le maggiori distribuzioni. Controlla di averlo fra i tuoi pacchetti.
~# screen --version
Screen version 4.08.00 (GNU) 05-Feb-20
Per architetture basate su apt
:
~# apt install screen
Per architetture basate su rpm
:
~# yum install screen
Avviare screen
Per avviare una sessione di screen basta scrivere screen in una console.
~$ screen
Questo comando creerà una sessione di screen, creerà una nuova finestra virtuale all’interno della sessione e avvierà una shell in quella finestra.
Ora che abbiamo avviato la sessione possiamo trovare una lista dei comandi digitando: Ctrl + a
?
.
Ed ecco l’output:
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
Dare un nome a una sessione
Una sessione rinominata è comoda quando dovremo richiamarla. Ad esempio rinominando una sessione “wget_debian” sapremo a colpo d’occhio guardando la lista delle sessioni attive che in quella sessione abbiamo lanciato il dowload della ISO di Debian.
~$ screen -S wget_debian
Familiarizzare con le finestre di screen
Quando avvii una sessione screen crea una finestra virtuale con una shell contenuta.
Puoi avere svariate finestre in una sessione di screen.
Per creare una nuova finestra virtuale digita Ctrl+a
c
e il primo numero da 0 a 9 verrà assegnato.
Di seguito alcuni dei comandi più comuni per gestire le finestre di screen:
Ctrl + a
c
Crea una nuova finestraCtrl + a
"
Mostra una lista delle finestreCtrl + a
0
(zero) Passa alla finestra “0” (sostituire “0” con il numero relativo alla finestra volutaCtrl + a
A
Rinomina la finestra correnteCtrl + a
S
Divide la porzione di schermo in orizzontaleCtrl + a
|
Divide la porzione di schermo in verticaleCtrl + a
tab
Sposta il focus sulla regione successivaCtrl + a
Ctrl + a
Passa dalla finestra precedente alla seguenteCtrl + a
Q
Chiude tutte le regioniCtrl + a
X
Chiude la regione corrente
Scollegare (detach) il proprio terminale dalla sessione corrente
Uno dei vantaggi, come già detto, è di poter continuare a lavorare lasciando che le sessioni di screen lavorino in background, mentre l’utente può lavorare su altro.
Ctrl + a
d
Ricollegare (resume) il proprio terminale a una sessione
Per ripristinare il collegamento con una sessione abbandonata:
~$ screen -r
Qualora ci fossero più sessioni su un’unica macchina sarà necessario aggiungere anche l’ID della sessione dopo l’argomento -r
.
Per trovare l’ID della sessione a cui ricollegarsi si usa il comando seguente:
~$ 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.
Se vogliamo tornare alla sessione 13836.pts-3
digitiamo il comando:
~$ screen -r 13836
Conclusioni
Oggi abbiamo imparato a usare screen per creare finestre multiple da una singola sessione, navigare fra le finestra e per scollegarci e ricollegarci con le varie sessioni… ma c’è molto altro da imparare su screen.
0 commenti