103.5 Lezione 2
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
103 Comandi GNU e Unix |
Obiettivo: |
103.5 Creare, controllare e terminare i processi |
Lezione: |
2 di 2 |
Introduzione
Gli strumenti e le utilità visti nella lezione precedente sono molto utili per il monitoraggio dei processi in generale. Tuttavia, un amministratore di sistema potrebbe dover fare un ulteriore passo avanti. In questa lezione discuteremo il concetto di multiplexer di terminale e impareremo a conoscere GNU Screen e tmux poiché — nonostante i moderni e ottimi emulatori di terminale di oggi — i multiplexer conservano ancora alcune funzionalità interessanti e potenti per un amministratore di sistema produttivo.
Caratteristiche dei Terminali Multiplexer
In elettronica, un multiplexer (o mux) è un dispositivo che consente di collegare più ingressi a una singola uscita. Pertanto, un multiplexer di terminale ci dà la possibilità di passare tra diversi ingressi come richiesto. Sebbene non siano esattamente la stessa cosa, screen
e tmux
condividono una serie di caratteristiche comuni:
-
Qualsiasi invocazione riuscita risulterà in almeno una sessione che, a sua volta, includerà almeno una finestra. Le finestre contengono programmi.
-
Le finestre possono essere suddivise in regioni o riquadri, il che può aumentare la produttività quando si lavora con vari programmi contemporaneamente.
-
Facilità di controllo: per eseguire la maggior parte dei comandi, usano una combinazione di tasti - il cosiddetto command prefix o command key — seguito da un altro carattere.
-
Le sessioni possono essere scollegate dal terminale corrente (ovvero, i programmi vengono inviati in background e continuano a essere eseguiti). Ciò garantisce l’esecuzione completa dei programmi, indipendentemente dal fatto che chiudiamo accidentalmente un terminale, si verifichi un blocco occasionale del terminale o persino la perdita di connessione remota.
-
Connessioni via socket.
-
Modalità copia.
-
Sono altamente personalizzabili.
GNU Screen
All’inizio di Unix (anni '70 -'80) i computer erano fondamentalmente costituiti da terminali collegati a un computer centrale. Questo era tutto, niente finestre o schede. E questo è stato il motivo alla base della creazione di GNU Screen nel 1987: emulare più schermi VT100 indipendenti su un singolo terminale fisico.
Finestre
GNU Screen viene richiamato semplicemente digitando screen
nel terminale. Prima vedrai un messaggio di benvenuto:
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Premi Spazio o Invio per chiudere il messaggio e ti verrà mostrato un prompt dei comandi:
$
Può sembrare che non sia successo nulla, ma il fatto è che screen
ha già creato e gestisce la sua prima sessione. Il prefisso del comando dello schermo è Ctrl+a. Per vedere tutte le finestre nella parte inferiore del display del terminale, digita Ctrl+a-w:
0*$ bash
Eccola, la nostra unica finestra fino ad ora! Nota che il conteggio inizia da 0. Per creare un’altra finestra, digita Ctrl+a-c. Vedrai un nuovo messaggio. Iniziamo con ps
in questa nuova finestra:
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
e digita Ctrl+a-w di nuovo:
0-$ bash 1*$ bash
Abbiamo ora le nostre due finestre (nota l’asterisco che indica quella che viene mostrata al momento). Tuttavia, poiché sono stati avviati con Bash, entrambi hanno lo stesso nome. Dato che abbiamo invocato ps
nella finestra corrente, rinominiamola con lo stesso nome. Per questo, devi digitare Ctrl+a-A e scrivere il nome della nuova finestra (ps
) quando richiesto:
Set window's title to: ps
Ora, creiamo un’altra finestra ma diamo un nome dall’inizio: yetanotherwindow
. Questo viene fatto invocando screen
con l’opzione -t
:
$ screen -t yetanotherwindow
Puoi spostarti tra le finestre in diversi modi:
-
Utilizzando Ctrl+a-n (vai alla finestra successiva) e Ctrl+a-p (vai alla finestra precedente).
-
Utilizzando Ctrl+a-_ number_ (vai alla finestra numero number).
-
Usando Ctrl+a-" per vedere un elenco di tutte le finestre. Puoi muoverti su e giù con i tasti freccia e selezionare quella che vuoi con Invio:
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Mentre si lavora con le finestre è importante ricordare quanto segue:
-
Le finestre eseguono i propri programmi in modo completamente indipendente le une dalle altre.
-
I programmi continueranno a funzionare anche se la loro finestra non è visibile (anche quando la sessione dello schermo è staccata come vedremo a breve).
Per rimuovere una finestra, è sufficiente terminare il programma in esecuzione in essa (una volta rimossa l’ultima finestra, screen
terminerà automaticamente). In alternativa, usa Ctrl+a-k mentre sei nella finestra che vuoi rimuovere; ti verrà chiesta conferma:
Really kill this window [y/n] Window 0 (bash) killed.
Regioni
screen
può dividere lo schermo di un terminale in più regioni in cui ospitare le finestre. Queste divisioni possono essere orizzontali (Ctrl+a-S) o verticali (Ctrl+a-|).
L’unica cosa che la nuova regione mostrerà è solo --
in basso, il che significa che è vuota:
1 ps --
Per passare alla nuova regione, digita Ctrl+a-Tab. Ora puoi aggiungere una finestra con uno qualsiasi dei metodi che abbiamo già visto, per esempio: Ctrl+a-2. Ora il --
dovrebbe essere diventato 2 yetanotherwindow
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
Aspetti importanti da tenere a mente quando si lavora con le regioni sono:
-
Ci si sposta tra le regioni digitando Ctrl+a-Tab.
-
Puoi terminare tutte le regioni tranne quella corrente con Ctrl+a-Q.
-
Puoi terminare la regione corrente con Ctrl+a-X.
-
La chiusura di una regione non termina la sua finestra associata.
Sessioni
Finora abbiamo giocato con poche finestre e regioni, ma tutte appartenenti alla stessa e unica sessione. È ora di iniziare a giocare con le sessioni. Per vedere un elenco di tutte le sessioni, digita screen -list
o screen -ls
:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
Al momento, questa è la nostra unica sessione:
- PID
-
1037
- Name
-
pts-0.debian
(indica il terminale — nel nostro caso uno pseudo terminale — e l’hostname). - Status
-
Attached
Creiamo una nuova sessione dandole un nome più descrittivo:
$ screen -S "second session"
Il terminale verrà ripulito e verrà visualizzato un nuovo prompt. Puoi controllare ancora una volta le sessioni:
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
Per terminare una sessione, esci da tutte le sue finestre o digita semplicemente il comando screen -S SESSION-PID -X quit
(puoi anche fornire il nome della sessione). Liberiamoci della nostra prima sessione:
$ screen -S 1037 -X quit
Verrai rimandato al prompt del tuo terminale al di fuori di screen
. Ma ricorda, la nostra seconda sessione è ancora operativa:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
Tuttavia, poiché abbiamo terminato la sua sessione padre, viene assegnata una nuova etichetta: Detached
.
Distacco della Sessione
Per una serie di motivi potresti voler scollegare una sessione dello schermo dal suo terminale:
-
Per lasciare che il tuo computer al lavoro prosegua nelle sue attività e connettersi in seguito da remoto.
-
Per condividere una sessione con altri utenti.
Scollega una sessione con la combinazione di tasti Ctrl+a-d. Verrai reindirizzato al tuo terminale:
[detached from 1090.second session] $
Per collegarti di nuovo alla sessione, usa il comando screen -r SESSION-PID
. In alternativa, puoi usare SESSION-NAME
come abbiamo visto sopra. Se c’è solo una sessione distaccata, nessuna delle due è obbligatoria:
$ screen -r
Questo comando è sufficiente per ricollegarsi alla nostra seconda sessione:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Opzioni importanti per il ricollegamento della sessione:
-d -r
-
Ricollegare una sessione e — se necessario — scollegarla prima.
-d -R
-
Come
-d -r
mascreen
creerà prima la sessione se non esiste. -d -RR
-
Uguale a
-d -R
. Tuttavia, utilizza la prima sessione se più di una è disponibile. -D -r
-
Ricollega una sessione. Se necessario, scollegandola e disconnettendola prima da remoto.
-D -R
-
Se una sessione è in esecuzione, ricollega (scollegandola e disconnettendola da remoto se necessario). Se non era in esecuzione, ne crea una nuova e avvisa l’utente.
-D -RR
-
Come per
-D -R
-d -m
-
Avvia
screen
in detached mode. Questo crea una nuova sessione ma non si collega ad essa. Questo è utile per gli script di avvio del sistema. -D -m
-
Uguale a
-d -m
, ma non esegue il fork di un nuovo processo. Il comando termina se la sessione termina.
Leggi le pagine di manuale di screen
per scoprire altre opzioni.
Copia e Incolla: Scrollback Mode
GNU Screen implementa una funzionalità di copia o scrollback mode. Una volta attivata, puoi spostare il cursore nella finestra corrente e muoverti nel testo con i tasti freccia. Puoi contrassegnare il testo e copiarlo tra le finestre. I passaggi da seguire sono:
-
Accedi alla copia/scrollback mode: Ctrl+a-[.
-
Spostati all’inizio della parte di testo che desideri copiare utilizzando i tasti freccia.
-
Segna l’inizio della parte di testo che desideri copiare: Premi la barra spaziatrice.
-
Spostati alla fine della parte di testo che desideri copiare utilizzando i tasti freccia.
-
Contrassegna la fine del pezzo di testo che desideri copiare: Premi la barra spaziatrice.
-
Vai alla finestra di tua scelta e incolla quanto precedentemente copiato: Ctrl+a-].
Personalizzazione di screen
Il file di configurazione a livello di sistema per screen è /etc/screenrc
. In alternativa, può essere usato a livello utente ~/.screenrc
. Il file include quattro sezioni di configurazione principali:
SCREEN SETTINGS
-
Puoi definire le impostazioni generali specificando la direttiva seguita da uno spazio e il valore come in:
defscrollback 1024
. SCREEN KEYBINDINGS
-
Questa sezione è piuttosto interessante in quanto consente di ridefinire le associazioni di tasti che forse interferiscono con l’uso quotidiano del terminale. Usa la parola chiave
bind
seguita da uno spazio, il carattere da usare dopo il prefisso del comando, un altro spazio e il comando come in:bind l kill
(questa impostazione cambierà il modo predefinito di terminare una finestra in Ctrl+a-l).Per visualizzare tutti i collegamenti dello schermo, digita Ctrl+a-? oppure consulta la pagina di manuale.
TipOvviamente puoi anche modificare il prefisso del comando stesso. Per esempio, per passare da Ctrl+a a kbd: [Ctrl+b], aggiungi semplicemente questa riga:
escape ^ Bb
. TERMINAL SETTINGS
-
Questa sezione include le impostazioni relative alle dimensioni della finestra del terminale e ai buffer. Per abilitare la non-blocking mode per gestire meglio le connessioni ssh instabili, per esempio, viene utilizzata la seguente configurazione:
defnonblock 5
. STARTUP SCREENS
-
Puoi includere comandi per avere vari programmi in esecuzione all’avvio di
screen
; per esempio:screen -t top top
(lo schermo aprirà una finestra chiamatatop
contop
all’interno).
tmux
tmux
è stato rilasciato nel 2007. Sebbene molto simile a screen
, include alcune differenze:
-
Modello client-server: il server fornisce una serie di sessioni, ciascuna delle quali può avere un numero di finestre a essa collegate che possono, a loro volta, essere condivise da diversi client.
-
Selezione interattiva delle sessioni, finestre e client tramite menu.
-
La stessa finestra può essere collegata a più sessioni.
-
Disponibilità dei layout dei tasti vim e Emacs.
-
Supporto terminale a UTF-8 e 256 colori.
Finestre
tmux
può essere invocato semplicemente digitando tmux
al prompt dei comandi. Ti verrà mostrato un prompt della shell e una barra di stato nella parte inferiore della finestra:
[0] 0:bash* "debian" 18:53 27-Aug-19
Oltre all' hostname
, l’ora e la data, la barra di stato fornisce le seguenti informazioni:
- Nome della sessione
-
[0]
- Numero della finestra
-
0:
- Window name
-
bash *
. Di default questo è il nome del programma in esecuzione all’interno della finestra e, a differenza discreen
,tmux
lo aggiornerà automaticamente per riflettere il programma in esecuzione. Notare l’asterisco che indica che questa è la finestra visibile corrente.
È possibile assegnare nomi di sessioni e finestre quando si invoca tmux
:
$ tmux new -s "LPI" -n "Window zero"
La barra di stato cambierà di conseguenza:
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
Il prefisso del comando di tmux è Ctrl+b. Per creare una nuova finestra, digita semplicemente Ctrl+b-c; verrai reindirizzato a un nuovo prompt e la barra di stato rifletterà la nuova finestra:
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Poiché Bash è la shell sottostante, alla nuova finestra viene assegnato quel nome per impostazione predefinita. Avvia top
e guarda come il nome cambia in top
:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
In ogni caso, puoi rinominare una finestra con Ctrl+b-,. Quando richiesto, fornire il nuovo nome e premere Invio:
(rename-window) Window one
È possibile visualizzare tutte le finestre, per selezionarne una, con Ctrl+b-w (utilizzare i tasti freccia per spostarsi su e giù e invio per sceglierne una):
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
In modo simile a screen
, possiamo muoverci da una finestra all’altra con:
- Ctrl+b-n
-
vai alla finestra successiva.
- Ctrl+b-p
-
vai alla finestra precedente.
- Ctrl+b-number
-
vai alla finestra numero number..
Per sbarazzarti di una finestra, usa Ctrl+b-&. Ti verrà chiesta conferma:
kill-window Window one? (y/n)
Altri comandi di finestra interessanti includono:
- Ctrl+b-f
-
trova la finestra per nome.
- Ctrl+b-.
-
cambia il numero di indice della finestra.
Per leggere l’intera lista dei comandi, consultare la pagina di manuale.
Riquadri
La funzione di suddivisione della finestra di screen
è presente anche in tmux
. Tuttavia, le divisioni risultanti non sono chiamate regioni (regions) ma riquadri (panes). La differenza più importante tra regioni e riquadri è che questi ultimi sono pseudo-terminali completi collegati a una finestra. Ciò significa che terminare un riquadro terminerà anche il suo pseudo-terminale e tutti i programmi associati in esecuzione all’interno.
Per dividere una finestra orizzontalmente, usiamo Ctrl+b-":
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Per dividerlo verticalmente, usa Ctrl+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Per eliminare il riquadro corrente (insieme al suo pseudo-terminale in esecuzione al suo interno, insieme a tutti i programmi associati), usa Ctrl+b-x. Ti verrà richiesta una conferma nella barra di stato:
kill-pane 1? (y/n)
Comandi importanti del riquadro:
- Ctrl+b-↑,↓,←,→
-
spostarsi tra riquadri.
- Ctrl+b-;
-
spostarsi nell’ultimo riquadro attivo.
- Ctrl+b-Ctrl+arrow key
-
ridimensionare il riquadro di una riga.
- Ctrl+b-Alt+arrow key
-
ridimensionare il riquadro di cinque righe.
- Ctrl+b-{
-
Scambia i riquadri (dal corrente al precedente).
- Ctrl+b-}
-
Scambia i riquadri (dal corrente al successivo).
- Ctrl+b-z
-
zoom in/out del riquadro.
- Ctrl+b-t
-
tmux
mostra un orologio all’interno del riquadro (terminalo premendoq
). - Ctrl+b-!
-
trasforma il riquadro in una finestra.
Per leggere l’intera lista dei comandi, consultare la pagina di manuale.
Sessioni
Per elencare le sessioni in tmux
puoi usare Ctrl+b-s:
(0) + LPI: 2 windows (attached)
In alternativa, puoi usare il comando tmux ls
:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
C’è solo una sessione (LPI
) che include due finestre. Creiamo una nuova sessione dall’interno della nostra sessione corrente. Questo può essere ottenuto usando Ctrl+b, digita :new
al prompt, quindi premi Invio. Verrai indirizzato alla nuova sessione come si può osservare nella barra di stato:
[2] 0:bash* "debian" 19:15 27-Aug-19
Per impostazione predefinita, tmux
ha chiamato la sessione 2
. Per rinominarlo, usa Ctrl+b-$. Quando richiesto, fornire il nuovo nome e premere Invio:
(rename-session) Second Session
Puoi cambiare sessione con Ctrl+b-s (usa i tasti freccia e enter):
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Per terminare una sessione, puoi usare il comando tmux kill-session -t SESSION-NAME
. Se digiti il comando dall’interno della sessione corrente, verrai portato fuori da tmux
e tornerai alla sessione iniziale del terminale:
$ tmux kill-session -t "Second Session" [exited] $
Sganciamento dalla Sessione
Terminando Second Session
siamo stati buttati fuori da tmux
. Tuttavia, abbiamo ancora una sessione attiva. Chiedi a tmux
un elenco di sessioni e lo troverai sicuramente lì:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Tuttavia questa sessione è scollegata dal suo terminale. Possiamo collegarlo con tmux attach -t SESSION-NAME
(attach
può essere sostituito da at
o — semplicemente — a
). Quando è presente una sola sessione, la specifica del nome è facoltativa:
$ tmux a
Ora sei tornato nella tua sessione; per sganciarti da essa, premi Ctrl+b-d:
[detached (from session LPI)] $
Tip
|
La stessa sessione può essere collegata a più di un terminale. Se vuoi allegare una sessione assicurandoti che sia prima scollegata da qualsiasi altro terminale, usa l’opzione |
Comandi importanti per il collegamento/scollegamento della sessione:
- Ctrl+b-D
-
seleziona quale client scollegare.
- Ctrl+b-r
-
aggiorna il terminale del client.
Per leggere l’intera lista dei comandi, consultare la pagina di manuale.
Copia e Incolla: Scrollback Mode
Anche tmux
dispone della modalità di copia fondamentalmente allo stesso modo di screen
(ricorda di usare il prefisso del comando di tmux e non quello di screen!). L’unica differenza dal punto di vista dei comandi è che usi Ctrl+Space per contrassegnare l’inizio della selezione e Alt+w per copiare il testo selezionato.
Personalizzazione di tmux
I file di configurazione per tmux
si trovano tipicamente in /etc/tmux.conf
e ~/.tmux.conf
. Quando viene avviato, tmux
fa riferimento a questi file se esistono. C’è anche la possibilità di avviare tmux
con l’opzione -f
per fornire un file di configurazione alternativo. Puoi trovare un esempio di file di configurazione tmux
situato in /usr/share/doc/tmux/example_tmux.conf
. Il livello di personalizzazione che puoi ottenere è davvero alto. Alcune delle cose che puoi fare includono:
-
Cambia la chiave del prefisso
# Change the prefix key to C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Imposta associazioni di tasti aggiuntive per finestre superiori a 9
# Some extra key bindings to select higher numbered windows bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Per un elenco completo di tutte le associazioni, digita Ctrl+b-? (Premi q
per uscire) o consulta la pagina di manuale.
Esercizi Guidati
-
Indica se le seguenti affermazioni/caratteristiche corrispondono a GNU Screen, tmux o a entrambi:
Affermazione/Caratteristica GNU Screen tmux Il prefisso del comando predefinito è Ctrl+a
Modello Client-Server
I riquadri sono pseudo-terminali
La terminazione di una regione non termina le finestre associate
Le sessioni includono le finestre
Le sessioni possono essere scollegate
-
Installa GNU Screen sul tuo computer (nome del pacchetto:
screen
) e completa le seguenti attività:-
Avvia il programma. Che comando usi?
-
Avvia
top
: -
Utilizzando il prefisso chiave di screen, apri una nuova finestra; quindi, apri
/etc/screenrc
usandovi
: -
Elenca le finestre nella parte inferiore dello schermo:
-
Cambia il nome della finestra corrente in
vi
: -
Cambia il nome della finestra rimanente in
top
. Per fare ciò, prima visualizza un elenco di tutte le finestre in modo da poterti spostare su e giù e selezionare quella giusta: -
Verifica che i nomi siano cambiati visualizzando nuovamente i nomi delle finestre nella parte inferiore dello schermo:
-
Ora, scollega la sessione e chiedi a
screen
di crearne una nuova chiamatassh
: -
Scollegati anche da
ssh
e fai visualizzare ascreen
l’elenco delle sessioni: -
Ora, collega alla prima sessione usando il suo PID:
-
Dovresti essere di nuovo alla finestra che mostra
top
. Dividi la finestra orizzontalmente e passa alla nuova regione vuota: -
Fai in modo che
screen
elenchi tutte le finestre e selezionavi
da visualizzare nella nuova regione vuota: -
Ora, dividi la regione corrente verticalmente, spostati nella regione vuota appena creata e associala a una nuova finestra:
-
Termina tutte le regioni tranne quella attuale (ricorda, anche se termini le regioni, le finestre sono ancora attive). Quindi, esci da tutte le finestre della sessione corrente fino a quando la sessione stessa non viene terminata:
-
Infine, fai in modo che
screen
elenchi le sue sessioni ancora una volta, termina la restante sessionessh
tramite PID e controlla che non ci siano effettivamente sessioni rimaste:
-
-
Installa
tmux
sul tuo computer (nome del pacchetto:tmux
) e completa le seguenti attività:-
Avvia il programma. Che comando usi?
-
Avvia
top
(nota come — in un paio di secondi — il nome della finestra cambia intop
nella barra di stato): -
Usando i comandi di tmux, apri una nuova finestra; quindi, crea
~/.tmux.conf
usandonano
: -
Dividi la finestra verticalmente e riduci alcune volte le dimensioni del riquadro appena creato:
-
Ora cambia il nome della finestra corrente in
text editing
; quindi, fai visualizzare atmux
un elenco con tutte le sue sessioni: -
Passa alla finestra che esegue
top
e torna a quella corrente utilizzando la stessa combinazione di tasti: -
Scollegati dalla sessione corrente e creane una nuova il cui nome è
ssh
e il nome della sua finestra èssh window
: -
Scollegati anche dalla sessione
ssh
e fai visualizzare nuovamente atmux
l’elenco delle sessioni:NoteDa questo punto in poi l’esercizio richiede che tu usi una macchina remota per le connessioni
ssh
al tuo host locale (una macchina virtuale è perfettamente valida e può rivelarsi davvero pratica). Assicurati di avereopenssh-server
installato e in esecuzione sulla tua macchina locale e che almenoopenssh-client
sia installato sulla macchina remota. -
Ora, avvia una macchina remota e connettiti tramite
ssh
al tuo host locale. Una volta stabilita la connessione, controlla le sessionitmux
: -
Sull’host remoto, agganciati alla sessione denominata
ssh
: -
Tornati sulla macchina locale, connettiti alla sessione
ssh
assicurandoti che la connessione all’host remoto sia terminata prima: -
Visualizza tutte le sessioni per la selezione e vai alla tua prima sessione (
[0]
). Una volta lì, termina la sessionessh
: -
Infine, scollegati dalla sessione corrente e terminala attraverso il suo nome:
-
Esercizi Esplorativi
-
Sia
screen
chetmux
possono entrare in modalità riga di comando tramite command prefix + : (abbiamo già visto un breve esempio contmux
). Esegui alcune ricerche e le seguenti attività in modalità riga di comando:-
Fai in modo che
screen
entri in modalità copia: -
Fai in modo che
tmux
rinomini la finestra corrente: -
Fai in modo che
screen
chiuda tutte le finestre e termini la sessione: -
Fai in modo che
tmux
divida un riquadro in due: -
Fai in modo che
tmux
termini la finestra corrente:
-
-
Quando entri in modalità copia in
screen
non solo puoi usare i tasti freccia e PgUP o PgDown per navigare nella finestra corrente e nel buffer di scorrimento. C’è anche la possibilità di utilizzare un editor a schermo intero simile avi
. Utilizzando questo editor, eseguire le seguenti attività:-
Echo
supercalifragilisticexpialidocious
nel tuo terminalescreen
: -
Ora, copia i cinque caratteri consecutivi (da sinistra a destra) nella riga sopra il cursore:
-
Infine, incolla la selezione (
stice
) al prompt dei comandi:
-
-
Supponi di voler condividere una sessione
tmux
(our_session
) con un altro utente. Hai creato il socket (/tmp/our_socket
) con i permessi giusti in modo che, sia tu sia l’altro utente, possiate leggere e scrivere. Quali altre due condizioni dovrebbero essere soddisfatte affinché il secondo utente possa allegare con successo la sessione tramitetmux -S /tmp/our_socket a -t our_session
?
Sommario
In questa lezione hai imparato a conoscere in generale i terminali multiplexer e GNU Screen e tmux in particolare. I concetti importanti da ricordare includono:
-
Prefisso del comando:
screen
usa Ctrl+a + character;tmux
, Ctrl+b + character. -
Struttura di sessioni, finestre e divisioni di finestre (regioni o riquadri).
-
Modalità copia.
-
Distacco di sessione: una delle caratteristiche più potenti dei multiplexer.
Commandi utilizzati in questa lezione:
screen
-
Avvia una sessione
screen
. tmux
-
Avvia una sessione
tmux
.
Risposte agli Esercizi Guidati
-
Indica se le seguenti affermazioni/caratteristiche corrispondono a GNU Screen, tmux o a entrambi:
Affermazione/Caratteristica GNU Screen tmux Il prefisso del comando predefinito è Ctrl+a
x
Modello Client-Server
x
I riquadri sono pseudo-terminali
x
La terminazione di una regione non termina le finestre associate
x
Le sessioni includono le finestre
x
x
Le sessioni possono essere scollegate
x
x
-
Installa GNU Screen sul tuo computer (nome del pacchetto:
screen
) e completa le seguenti attività:-
Avvia il programma. Che comando usi?
screen
-
Avvia
top
:top
-
Utilizzando il prefisso chiave di screen, apri una nuova finestra; quindi, apri
/etc/screenrc
usandovi
:Ctrl+a-c
sudo vi /etc/screenrc
-
Elenca le finestre nella parte inferiore dello schermo:
Ctrl+a-w
-
Cambia il nome della finestra corrente in
vi
:Ctrl+a-A. Then we have to type
vi
and press enter. -
Cambia il nome della finestra rimanente in
top
. Per fare ciò, prima visualizza un elenco di tutte le finestre in modo da poterti spostare su e giù e selezionare quella giusta:Per prima cosa digitiamo Ctrl+a-". Quindi usiamo i tasti freccia per contrassegnare quello che indica
0 bash
e premiamo enter. Infine, digitiamo Ctrl+a-A, digitatop
e premi enter. -
Verifica che i nomi siano cambiati visualizzando nuovamente i nomi delle finestre nella parte inferiore dello schermo:
Ctrl+a-w
-
Ora, scollega la sessione e chiedi a
screen
di crearne una nuova chiamatassh
:Ctrl+a-d
screen -S "ssh"
e premi enter. -
Scollegati anche da
ssh
e fai visualizzare ascreen
l’elenco delle sessioni:Ctrl+a-d
screen -list
oscreen -ls
. -
Ora, collega alla prima sessione usando il suo PID:
screen -r PID-OF-SESSION
-
Dovresti essere di nuovo alla finestra che mostra
top
. Dividi la finestra orizzontalmente e passa alla nuova regione vuota:Ctrl+a-S
Ctrl+a-Tab
-
Fai in modo che
screen
elenchi tutte le finestre e selezionavi
da visualizzare nella nuova regione vuota:Usiamo Ctrl+a-" per visualizzare tutte le finestre per la selezione, contrassegnare
vi
e premere enter. -
Ora, dividi la regione corrente verticalmente, spostati nella regione vuota appena creata e associala a una nuova finestra:
Ctrl+a-|
Ctrl+a-Tab
Ctrl+a-c
-
Termina tutte le regioni tranne quella attuale (ricorda, anche se termini le regioni, le finestre sono ancora attive). Quindi, esci da tutte le finestre della sessione corrente fino a quando la sessione stessa non viene terminata:
Ctrl+a-Q.
Exit
(per uscire da Bash). Shift+:, quindi digitiamoquit
e premiamo enter (per uscire davi
). Dopodiché, digitiamoexit
(per uscire dalla shell Bash sottostante)q
(per terminaretop
); quindi digitiamoexit
(per uscire dalla shell Bash sottostante). -
Infine, fai in modo che
screen
elenchi le sue sessioni ancora una volta, termina la restante sessionessh
tramite PID e controlla che non ci siano effettivamente sessioni rimaste:screen -list
oscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
oscreen -ls
-
-
Installa
tmux
sul tuo computer (nome del pacchetto:tmux
) e completa le seguenti attività:-
Avvia il programma. Che comando usi?
tmux
-
Avvia
top
(nota come — in un paio di secondi — il nome della finestra cambia intop
nella barra di stato):top
-
Usando i comandi di tmux, apri una nuova finestra; quindi, crea
~/.tmux.conf
usandonano
:Ctrl+b-c
nano ~/.tmux.conf
-
Dividi la finestra verticalmente e riduci alcune volte le dimensioni del riquadro appena creato:
Ctrl+b-"
Ctrl+b-Ctrl+↓
-
Ora cambia il nome della finestra corrente in
text editing
; quindi, fai visualizzare atmux
un elenco con tutte le sue sessioni:Ctrl+b-,. Poi forniamo il nuovo nome e premiamo enter. Ctrl+b-s o
tmux ls
. -
Passa alla finestra che esegue
top
e torna a quella corrente utilizzando la stessa combinazione di tasti:Ctrl+b-n o Ctrl+b-p
-
Scollega dalla sessione corrente e creane una nuova il cui nome è
ssh
e il nome della sua finestra èssh window
:Ctrl+b-d
tmux new -s "ssh" -n "ssh window"
-
Scollegati anche dalla sessione
ssh
e fai visualizzare nuovamente atmux
l’elenco delle sessioni:Ctrl+b-d
tmux ls
NoteDa questo punto in poi l’esercizio richiede che tu usi una macchina remota per le connessioni
ssh
al tuo host locale (una macchina virtuale è perfettamente valida e può rivelarsi davvero pratica). Assicurati di avereopenssh-server
installato e in esecuzione sulla tua macchina locale e che almenoopenssh-client
sia installato sulla macchina remota. -
Ora, avvia una macchina remota e connettiti tramite
ssh
al tuo host locale. Una volta stabilita la connessione, controlla le sessionitmux
:Sull’host remoto:
ssh local-username@local-ipaddress
. Una volta connesso al sistema locale:tmux ls
. -
Sull’host remoto, agganciati alla sessione denominata
ssh
:tmux a -t ssh
(a
può essere sostituito daat
oattach
). -
Tornati sulla macchina locale, connettiti alla sessione
ssh
assicurandoti che la connessione all’host remoto sia terminata prima:tmux a -d -t ssh
(a
può essere sostituito daat
oattach
). -
Visualizza tutte le sessioni per la selezione e vai alla tua prima sessione (
[0]
). Una volta lì, termina la sessionessh
:Digitiamo Ctrl+b-s, utilizza le frecce per selezionare la sessione
0
e premi entertmux kill-session -t ssh
. -
Infine, scollegati dalla sessione corrente e terminala attraverso il suo nome:
Ctrl+b-d
tmux kill-session -t 0
.
-
Risposte agli Esercizi Esplorativi
-
Sia
screen
chetmux
possono entrare in modalità riga di comando tramite command prefix + : (abbiamo già visto un breve esempio contmux
). Esegui alcune ricerche e le seguenti attività in modalità riga di comando:-
Fai in modo che
screen
entri in modalità copia:Ctrl+a-: — quindi, digita
copy
. -
Fai in modo che
tmux
rinomini la finestra corrente:Ctrl+b-: — quindi, digita
rename-window
. -
Fai in modo che
screen
chiuda tutte le finestre e termini la sessione:Ctrl+a-: — quindi, digita
quit
. -
Fai in modo che
tmux
divida un riquadro in due:Ctrl+b-: — quindi, digita
split-window
. -
Fai in modo che
tmux
termini la finestra corrente:Ctrl+b-: — quindi, digita
kill-window
.
-
-
Quando entri in modalità copia in
screen
non solo puoi usare i tasti freccia e PgUP o PgDown per navigare nella finestra corrente e nel buffer di scorrimento. C’è anche la possibilità di utilizzare un editor a schermo intero simile avi
. Utilizzando questo editor, esegui le seguenti attività:-
Echo
supercalifragilisticexpialidocious
nel tuo terminalescreen
:echo supercalifragilisticexpialidocious
-
Ora, copia i cinque caratteri consecutivi (da sinistra a destra) nella riga sopra il cursore:
Entra in modalità copia: Ctrl+a-[ o Ctrl+a-: e poi digita
copy
. Quindi spostati sulla riga sopra usandok
e premi enter per contrassegnare l’inizio della selezione. Infine, avanza di quattro caratteri usandol
e premi di nuovo enter per contrassegnare la fine della selezione. -
Infine, incolla la selezione (
stice
) al prompt dei comandi:Ctrl+a-]
-
-
Supponi di voler condividere una sessione
tmux
(our_session
) con un altro utente. Hai creato il socket (/tmp/our_socket
) con i permessi giusti in modo che, sia tu sia l’altro utente, possiate leggere e scrivere. Quali altre due condizioni dovrebbero essere soddisfatte affinché il secondo utente possa allegare con successo la sessione tramitetmux -S /tmp/our_socket a -t our_session
?Entrambi gli utenti devono avere un gruppo in comune, per esempio
multiplexer
. Quindi, dobbiamo cambiare anche il socket in quel gruppo:chgrp multiplexer /tmp/our_socket
.