- Dave McKay
@TheGurkha
- March 27, 2020, 8:00am EDT
Con il comando Linux screen
, è possibile spingere le applicazioni del terminale in esecuzione sullo sfondo e tirarle avanti quando si vuole vederle. Supporta anche la visualizzazione a schermo diviso e funziona su connessioni SSH, anche dopo essersi disconnessi e riconnessi!
Cos’è il comando schermo?
Il comando screen
è un multiplexer di terminale, ed è assolutamente pieno di opzioni. Dire che può fare molto è il nonno degli eufemismi. La pagina man supera le 4.100 righe.
Questi sono i casi più comuni in cui si usa il comando screen
, e li tratteremo ulteriormente in questo articolo:
- L’operazione standard è quella di creare una nuova finestra con una shell in essa, eseguire un comando, e poi spingere la finestra sullo sfondo (chiamato “distacco”). Quando volete vedere come sta andando il vostro processo, potete tirare di nuovo la finestra in primo piano (“riattaccare”) e usarla di nuovo. Questo è ottimo per processi lunghi che non vuoi terminare accidentalmente chiudendo la finestra del terminale.
- Una volta che hai una sessione
screen
in esecuzione, puoi creare nuove finestre ed eseguire altri processi in esse. Si può facilmente passare da una finestra all’altra per monitorare i loro progressi. Si può anche dividere la finestra del terminale in regioni verticali o orizzontali, e visualizzare le variescreen
finestre in una finestra. - È possibile connettersi a una macchina remota, avviare una sessione
screen
e lanciare un processo. Puoi disconnetterti dall’host remoto, riconnetterti, e il tuo processo sarà ancora in esecuzione. - Puoi condividere una sessione
screen
tra due diverse connessioni SSH così due persone possono vedere la stessa cosa, in tempo reale.
Installazione di screen
Per installare screen
su ubuntu, usate questo comando:
sudo apt-get install screen
Per installare screen
su Manjaro, utilizzare il seguente comando:
sudo pacman -Sy screen
Su Fedora, si digita quanto segue:
sudo dnf install screen
Iniziare con screen
Per iniziare screen
, basta digitare come mostrato di seguito e premere Invio:
screen
Vedrai una pagina di informazioni sulla licenza. Puoi premere la barra spaziatrice per leggere la seconda pagina o Invio per tornare al prompt dei comandi.
Sei rimasto al prompt dei comandi, e non sembra essere successo molto. Tuttavia, ora state eseguendo una shell all’interno di un emulatore di terminale multiplo. Perché questa è una buona cosa? Beh, iniziamo un processo che richiederà molto tempo per essere completato. Scaricheremo il codice sorgente dell’ultimo kernel Linux e lo reindirizzeremo in un file chiamato latest_kernel.zip
.
Per farlo, digitiamo quanto segue:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Il nostro download inizia, e l’output curl
ci mostra il progresso.
Non possiamo mostrarvi un’immagine del prossimo pezzo, perché è una sequenza di tasti. Si digita Ctrl+A, si rilasciano quei tasti, e poi si preme d per staccare lo schermo.
Il processo di download è ancora in corso ma la finestra che mostra il download viene rimossa. Sei tornato alla finestra del terminale da cui hai lanciato la sessione screen
. Un messaggio vi dice che una finestra screen
etichettata 23167.pts-0.howtogeek
è stata staccata.
Avete bisogno del numero dall’inizio del nome della finestra per riattaccarla. Se lo dimenticate, potete sempre usare l’opzione -ls
(elenco), come mostrato qui sotto, per ottenere un elenco delle finestre staccate:
screen -ls
Quando sei pronto, puoi usare l’opzione -r
(reattach) e il numero della sessione per riattaccarla, così:
screen -r 23167
La finestra che ha lavorato in background è ora riportata alla finestra del terminale come se non fosse mai uscita.
Se è un processo che sta andando avanti fino alla sua conclusione alla fine si completerà. Se è un processo continuo, alla fine vorrai terminarlo. In entrambi i casi, quando il processo finisce, potete digitare exit
per uscire dal screen
. In alternativa, si può premere Ctrl+A, e poi K per uccidere forzatamente una finestra.
Digitare il seguente comando:
exit
Si ritorna alla precedente finestra del terminale, che mostrerà ancora il comando usato per riattaccare la finestra. Poiché abbiamo chiuso la nostra unica finestra staccata, otteniamo un messaggio che screen
sta terminando.
RELATO: Come usare curl per scaricare file dalla riga di comando di Linux
Usare sessioni di schermo con nome
Puoi usare l’opzione -S
(nome della sessione) per dare un nome alla tua sessione screen
. Se si usa un nome memorabile piuttosto che l’identità numerica della sessione, è più conveniente riconnettersi a una sessione. Digitiamo quanto segue per nominare la nostra sessione “bigfile”:
screen -S bigfile
Quando screen
lancia la nostra sessione, vediamo una finestra vuota con un prompt dei comandi. Stiamo per scaricare un grosso file, quindi possiamo usare un processo di lunga durata come esempio.
Scriviamo quanto segue:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Quando il download inizia, premiamo Ctrl+A, e poi premiamo D per staccare la sessione. Digitiamo quanto segue per usare l’opzione -ls
(lista) con screen
per vedere i dettagli della nostra sessione staccata:
screen -ls
Dietro l’identificatore numerico (23266), vediamo il nome della nostra sessione (bigfile). Digitiamo quanto segue, compreso il nome della sessione, per riattaccarla:
screen -r bigfile
Siamo ricollegati alla nostra finestra di download e vediamo che il lungo download è ancora in corso.
Quando il download è completo, digitiamo exit
per chiudere la finestra della sessione.
Usare lo schermo con più finestre
Finora abbiamo usato screen
per mettere un singolo processo in background in una finestra staccata. Tuttavia, screen
è in grado di fare molto di più. Successivamente, eseguiremo alcuni processi che ci permettono di monitorare alcuni aspetti del nostro computer.
Scriviamo quanto segue per avviare una sessione di schermo chiamata “monitor”:
screen -S monitor
Al prompt dei comandi nella nostra nuova finestra di sessione, lanceremo dmesg
e useremo le opzioni -H
(leggibile dall’uomo) e -w
(aspetta nuovi messaggi). Questo visualizzerà i messaggi del buffer del kernel; i nuovi messaggi appariranno man mano che si presentano.
Scriviamo quanto segue:
dmesg -H -w
I messaggi esistenti appaiono. Non veniamo riportati al prompt dei comandi perché dmseg
è in attesa di nuovi messaggi, e li mostrerà man mano che arrivano.
RELATO: Come usare il comando dmesg su Linux
Vogliamo eseguire un’altra applicazione, quindi abbiamo bisogno di una nuova finestra screen
. Premiamo Ctrl+A, e poi C per creare una nuova finestra. Useremo watch
per eseguire ripetutamente vmstat
, in modo da ottenere una visualizzazione frequentemente aggiornata dell’utilizzo della memoria virtuale sul nostro computer.
Al nuovo prompt dei comandi, digitiamo quanto segue:
watch vmstat
L’output vmstat
appare e si aggiorna ogni due secondi.
I nostri due processi sono ora in esecuzione. Per passare da una finestra all’altra screen
, si preme Ctrl+A, e il numero della finestra. La prima che abbiamo creato è la finestra zero (0), la successiva è la finestra 1, e così via. Per passare alla prima finestra (quella dmesg
), si preme Ctrl+A e 0.
Se premiamo Ctrl+A e 1, ci riporta alla vmstat
finestra.
Questo è piuttosto ingegnoso! Possiamo premere Ctrl+A, e poi D per staccarci da questa sessione; possiamo riattaccarci più tardi. Entrambe le sessioni saranno ancora in esecuzione. Di nuovo, per passare da una finestra all’altra, premiamo Ctrl+A e il numero (0 o 1) della finestra a cui vogliamo passare.
Passiamo al passo successivo e visualizziamo entrambe le schermate in una finestra. Quando fai questo, allungherai la finestra del tuo terminale ad una dimensione che rende utile questo passo. I nostri esempi sono limitati alle dimensioni dei nostri screenshot, quindi le nostre finestre sembreranno un po’ strette.
Per fare questo, premiamo Ctrl+A, e poi Shift+S (la “S” maiuscola è necessaria).
La finestra si divide in due “regioni.”
La regione superiore mostra ancora vmstat
, e la regione inferiore è vuota. Il cursore è evidenziato nello screenshot qui sotto. Per spostarlo nella regione inferiore, premiamo Ctrl+A, e poi Tab.
Il cursore si sposta nella regione inferiore, che in realtà è solo uno spazio vuoto. Non è una shell, quindi non possiamo scriverci nulla. Per ottenere una visualizzazione utile, premiamo Ctrl+A, e poi premiamo “0” per visualizzare la finestra dmesg
in questa regione.
Questo ci dà entrambi gli output live in una finestra divisa. Se premiamo Ctrl+A e D per staccare la finestra, e poi la riattacchiamo, perderemo la vista split-pane. Tuttavia, possiamo ripristinarla con le seguenti scorciatoie da tastiera:
- Ctrl+A, S: divide la finestra orizzontalmente.
- Ctrl+A, Tab: Spostati nella regione inferiore.
- Ctrl+A, 0: Visualizza la finestra zero nella regione inferiore.
Possiamo fare un ulteriore passo avanti. Ora divideremo il pannello inferiore verticalmente, e aggiungeremo un terzo processo alla visualizzazione. Con il cursore nella regione inferiore, premiamo Ctrl+A e C per creare una nuova finestra con una shell al suo interno. La regione inferiore visualizza la nuova finestra e ci dà un prompt dei comandi.
Prossimo, eseguiamo il comando df
per controllare l’uso del file system:
df
Quando vediamo df
in esecuzione, premiamo Ctrl+A e il carattere pipe (|)
. Questo divide verticalmente la regione inferiore. Premiamo Ctrl+A e Tab per spostarci nella nuova regione. Successivamente, premiamo Ctrl+A e 0 per visualizzare la finestra dmesg
.
Si può anche passare da una regione all’altra, e aggiungere altre suddivisioni verticali o orizzontali. Ecco alcune combinazioni di tasti più utili:
- Ctrl+A: Salta avanti e indietro tra la regione corrente e quella precedente.
- Ctrl+A, Q: Chiudi tutte le regioni tranne quella corrente.
- Ctrl+A, X: Chiudi la regione corrente.
Utilizzare lo schermo su SSH
Con screen
, è possibile avviare una sessione in finestra, staccarla in modo che sia ancora in esecuzione in background, disconnettersi o rientrare, e riattaccare la sessione.
Facciamo una connessione SSH al nostro computer da un altro con il comando ssh
. Dobbiamo fornire il nome dell’account con cui ci connetteremo e l’indirizzo del computer remoto.
Per il nostro esempio, digitiamo quanto segue:
ssh [email protected]
Dopo esserci autenticati sul computer remoto e aver fatto il login, digitiamo quanto segue per avviare una sessione screen
chiamata “ssh-geek”:
screen -S ssh-geek
A scopo dimostrativo, eseguiremo top
nella finestra screen
, ma si può avviare qualsiasi processo di lunga durata o senza fine.
Scriviamo quanto segue:
top
Una volta che top
è in esecuzione nella finestra, premiamo Ctrl+A, e poi D per staccare la finestra.
Siamo tornati alla finestra originale del terminale remoto.
Se digitiamo exit
, come mostrato sotto, si disconnette la sessione SSH e siamo di nuovo sul nostro computer locale:
exit
Digitiamo quanto segue per riconnetterci:
ssh [email protected]
Dopo esserci riconnessi e aver fatto il login, possiamo digitare quanto segue per riattaccare la screen
sessione:
screen -r ssh-geek
Siamo ora ricollegati alla nostra istanza ancora in esecuzione di top
.
Questo è ottimo se vuoi iniziare un processo su una macchina, e poi riprendere da dove hai lasciato su un’altra.
RELATO: Come creare e installare chiavi SSH dalla shell di Linux
Condividere una sessione dello schermo
Puoi anche usare una sessione screen
per permettere a due persone di vedere e interagire con la stessa finestra. Supponiamo che qualcuno con Fedora sul suo computer voglia connettersi al nostro server Ubuntu.
Dovrebbe digitare quanto segue:
ssh [email protected]
Dopo che si è connesso, inizia una sessione a schermo chiamata “ssh-geek” usando l’opzione -S (nome della sessione). Usa anche le opzioni -d
(distacco) e -m
(creazione forzata) per creare una nuova sessione screen
già distaccata.
Si digita quanto segue:
screen -d -m -S ssh-geek
Digita quanto segue, usando l’opzione -X
(modalità multischermo) per collegare la sessione:
screen -X ssh-geek
Su un computer Manjaro, un’altra persona si connette al computer Ubuntu con le stesse credenziali di account, come mostrato di seguito:
ssh [email protected]
Una volta connessa, digita il comando screen
e usa l’opzione -X (modalità multischermo) per unirsi alla stessa sessione in finestra, così:
screen -X ssh-geek
Ora, qualsiasi cosa una delle due persone digiti, l’altra la vedrà. Per esempio, quando una persona emette il comando “date”, entrambi lo vedono mentre viene digitato, così come il suo output.
Entrambe le persone stanno ora condividendo una sessione screen
in esecuzione su un computer Ubuntu remoto.
Per essere un software che ha visto la luce per la prima volta nel 1987, screen
ha ancora una buona produttività. Familiarizzare con esso sarà tempo ben speso!
RELATO: 37 Comandi Linux importanti da conoscere
Dave McKay ha usato i computer per la prima volta quando il nastro di carta perforato era in voga, e da allora ha sempre programmato. Dopo oltre 30 anni nell’industria IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, come manager di un team internazionale di sviluppo software, come project manager di servizi IT e, più recentemente, come Data Protection Officer. Dave è un evangelista di Linux e un sostenitore dell’open source.Read Full Bio ”