home skills contatti blog
linuxtutorial

Padroneggiare Tmux - Comandi [4/5]

Introduzione

Se siete arrivati fin qui, avete ormai dimestichezza con la componentistica chiave di Tmux. A completare quanto ci siamo detti, andiamo ad esplorare alcuni comandi da impartire al programma sia da dentro la sessione, sia come opzioni e parametri al comando tmux.

Prompt comandi

Siete dentro ad una sessione, volete creare una seconda finestra chiamandola "lavoro". Come abbiamo visto, l'unica strada che per ora conosciamo sarebbe quella di creare una nuova finestra (il nostro amico C-b c) e rinominarla successivamente (C-b , ricordate?).

Esiste un'altra strada, e qui scopriamo una nuova modalità per interagire con Tmux: il prompt dei comandi. Da questa modalità è possibile impartire al programma tutte le istruzioni che abbiamo visto fino ad ora, solo in maniera più "testuale".

Premendo C-b : (due punti) da dentro una sessione, Tmux rimarrà in attesa di un nostro comando, come potrete vedere dalla barra di stato:

Proviamo quindi a creare la nostra nuova finestra digitando

new-window -n lavoro

e dando Invio. Come avrete notato, l'opzione -n serve a specificarne il nome, ma per creare una nuova finestra senza specificarne il nome, si può omettere (ma a quel punto tanto vale creare la finestra con la scorciatoia da tastiera come abbiamo sempre fatto, no?). Importante anche notare come anche nella digitazione dei comandi, l'autocompletamento con Tab è comunque funzionante.

Bene, a questo punto abbiamo la nostra nuova finestra con già il giusto nome, e per completare la beltà della nostra sessione, rinominiamo questa in "base", quindi, di nuovo in modalità prompt:

rename-session base

Ora siete pronti a lavorare nella vostra bella finestra all'interno di una sessione rinominata, siete felici ma non lo sapete ancora. All'improvviso sentite di nuovo l'impulso di controllare lo stato della vostra macchina con top, ma non volete creare un pannello, né tantomeno sporcare l'attuale finestra, perché magari siete in un punto delicato della modifica di un file.

Tmux ci viene incontro con display-popup, un comando molto carino che si preoccupa di lanciare un comando di nostra scelta, mostrarcelo in un piccolo (o meno piccolo, dipende come lo configurate) riquadrino sopra la finestra corrente, e chiuderlo nel momento in cui non ci serve più. Proviamolo con top! Sempre in modalità prompt

display-popup -E "top"

Cosa stiamo dicendogli? Lancia il comando top e fammelo vedere in un popup, con -E stiamo semplicemente dicendogli di chiudere il popup nel momento in cui top finisce la sua esecuzione (altrimenti dovremmo ripremere noi un tasto qualsiasi per chiuderlo). Il risultato base dovrebbe essere qualcosa del genere:

Bello, ma in questo specifico caso top mi sembra un po' sacrificato! Aumentiamo larghezza (e volendo anche altezza) del popup mostrato:

display-popup -E -w 90% -h 70% "top"

Molto meglio! con -w specifichiamo in percentuale quanto vogliamo sia largo (width), mentre con -h (height) quanto alto.

Bene, a questo punto vi sentite forti e coraggiosi, e non vedete l'ora di vedere tutti e 4 i vostri server in 4 pannelli all'interno della stessa finestra. Con

select-pane -t 2

Andiamo a selezionare il secondo pannello (perché i metodi di navigazione visti qui non ci piacciono più?) e aggiorniamo i repo del nostro server con un apt update. Ma che noia, dobbiamo farlo per tutti i nostri server e iterare su tutti i pannelli non mi va. Fortunatamente c'è una soluzione molto potente (e pericolosa). Diamo il comando

set-option synchronize-panes on

Come per magia, vedremo che ciò che scriviamo in un pannello verrà replicato su tutti e 4 i pannelli della nostra finestra! In questo modo riusciamo, con un singolo comando, ad aggiornare i nostri 4 server.

Ricordatevi sempre di ripristinare la situazione "normale" con set-option synchronize-panes off!

L'ultimo comando che vado a mostrarvi afferma la vostra ormai normalità nell'avere a che fare con sessioni / finestre / pannelli.

Siete in una situazione in cui avete 2 sessioni aperte:

  • "Casa", con all'interno 1 finestra con 3 pannelli, ognuno dei quali con una sessione SSH aperta verso i PC di casa vostra;
  • "Lavoro", stessa situazione (1 finestra, 3 pannelli) ma con sessioni SSH aperte verso i vostri server.

Un momento... Ma voi avete solo 2 pc a casa ma 4 server! I conti non tornano! Avete aperto un pannello nella sessione sbagliata. Rimediamo subito: sappiamo che il pannello "incriminato" è quello con indice 2, spostiamolo dalla sessione "Casa" a "Lavoro":

join-pane -v -s casa:0.2 -t lavoro:0.2

A prima vista questa sintassi potrebbe spaesare, ma nulla di complesso. Andiamo ad analizzare punto per punto:

  • join-pane indica a Tmux che vogliamo spostare un pannello;
  • -v indica che il pannello dovrà essere messo sotto al pannello di destinazione (altrimenti avremmo utilizzato -h);
  • -s indica la sessione sorgente;
  • casa:0.2: sessione casa, prima finestra (indice 0), terzo pannello (sempre partendo da 0);
  • -t indica la sessione target
  • lavoro:0.2: sessione lavoro, prima finestra, sotto al terzo pannello.

Et voilà! Abbiamo imparato anche a spostare pannelli tra diverse sessioni.


Questo chiude la breve (ma intensa) sezione sui comandi prompt che possiamo dare a Tmux. Per brevità e per evitare vi addormentiate leggendo, ho riportato qui quelli per me più utili, ma considerate che ogni operazione è possibile impartendo il giusto comando. Per ulteriori approfondimenti, come sempre, vi suggerisco di fare un giro nella wiki ufficiale!

Comandi

Per comandi intendo i parametri e opzioni date al comando principe tmux, quando ancora dobbiamo lanciarlo la prima volta. Esistono infatti alcune configurazioni che possiamo dare a Tmux prima ancora di lanciare una sessione, di modo da creare già un ambiente pronto all'uso senza doverlo configurare ogni volta, oppure per modificarne la struttura successivamente.

Iniziamo creando una sessione chiamata "config", con una finestra "main":

tmux new -s config -n main -d

Con il -d finale stiamo di fatto sganciando la sessione lasciandola attiva in background.

Ok, dividiamo la finestra appena creata in verticale:

tmux split-window -v -t config:0

"Dividi la prima finestra (indice 0) della sessione config in verticale".

Volete aggiungere una nuova finestra chiamata top?

tmux new-window -n top -t config

Ultimo ma non ultimo, impostiamo questa nuova finestra come finestra attiva nella nostra sessione config:

tmux select-window -t config:1

Abbiamo imparato le basi di aggiunta / modifica / selezione di finestre e pannelli. Questi comandi si possono concatenare in uno script in modo da configurare un ambiente completo e pronto già al primo utilizzo.

Chiudo questa sezione con un altro comando a mio avviso molto utile: nella nostra finestra top, chiaramente vorremo vedere top in esecuzione:

tmux send-keys -t config:1 'top' C-m

La sintassi dovrebbe esservi famigliare, tranne il C-m, che simula la pressione del tasto Invio per lanciare effettivamente top.


Ovviamente Tmux conta innumerevoli altri comandi, se volete dare un'occhiata per poi approfondirli: tmux list-commands.

Ora che abbiamo imparato che ogni scorciatoia vista fino ad ora può corrispondere ad un comando, siamo pronti per cucire Tmux sui nostri gusti e comodità. Nella prossima puntata plasmeremo il nostro .tmux.conf per personalizzare il programma come meglio preferiamo.

Comandi / scorciatoie viste

  • new-window -n <nome>: crea una nuova finestra con il nome specificato;
  • rename-session <nome>: rinomina una sessione con il nome specificato;
  • display-popup -E -w <perclarghezza> -h <percaltezza> "<comando>": mostra un popup con dimensioni specificate sopra la finestra corrente con il risultato di un comando specificato;
  • set-option synchronize-panes <on|off>: inoltra i comandi digitati in un pannello, su tutti i pannelli della finestra;
  • join-pane -<v|h> -s <nomesessione>:<indicefinestra>.<indicepannello> -t <nomesessione><:indicefinestra>.<indicepannello>: sposta un pannello da una sessione / finestra sorgente ad una sessione / finestra di destinazione, specificandone la direzione di divisione;
  • tmux split-window -<v|h> -t <nomesessione>:<nomefinestra>: dividi verticalmente o orizzontalmente la sessione / finestra specificata;
  • tmux new-window -n <nomefinestra> -t <nomesessione>: aggiunge una finestra all'interno della sessione specificata;
  • tmux select-window -t <nomesessione>:<indicefinestra>: rende attiva la finestra specificata della sessione specificata;
  • tmux send-keys -t <nomesessione>:<indicefinestra> '<comando>' C-m: lancia un comando nella finestra di una sessione specifica.
#linux#tutorial