home skills contatti blog
linuxtutorial

Padroneggiare Tmux - Sessioni [1/5]

Introduzione

Per chi lavora spesso con il terminale, Tmux (Terminal multiplexer) (GitHub) rappresenta un ottimo compagno di lavoro, permettendo di creare ed accedere a diversi terminali da un'unica schermata, ma non solo: in questo articolo e nei prossimi andremo ad esplorare alcune funzionalità ed alcune configurazioni che personalmente uso. Il concetto di padroneggiare, come vedete nel titolo, ha per me il senso di avere le nozioni tecniche principali per poter utilizzare fluidamente il programma, conoscendone le caratteristiche chiave. Per chi vuole approfondire in maniera ben più profonda tutte le caratteristiche di Tmux, non c'è miglior risorsa che la Wiki ufficiale.

Questo primo articolo si focalizzerà sull'introduzione al programma e su come iniziare a lavorare con le sessioni.

In generale tendo a non stravolgere troppo le configurazioni dei programmi, cercando di lasciare una situazione il più "pulita" possibile. Nel caso di Tmux ho personalizzato alcuni comportamenti per allinearli il più possibile al mio attuale flusso mentale (sì, sto parlando dei keybindings di Vim), ma li scopriremo nelle prossime puntate.

Tmux dovrebbe essere già presente nei repo della vostra distribuzione, non essendo esattamente una novità, darò quindi per scontato che sia già presente sulla vostra macchina.

Concetti base

Per comprendere meglio il funzionamento di Tmux, è importante chiarire i principali "componenti" che entrano in gioco. In questa fase non posso evitare i termini inglesi, ma sappiate che da qui in poi userò i loro equivalenti italiani, è importante avere chiaro il nome che troverete scritto ovunque.

  • Session: la sessione di Tmux. Immaginiamola come "il lavoro che stiamo facendo"; potremmo avere una sessione dedicata allo sviluppo del nostro sito web, una sessione dedicata alle configurazioni di un determinato prodotto in macchina e così via;
  • Window: in una sessione possiamo avere infinite finestre, ognuna con un nuovo terminale pronto all'uso. Immaginiamola come un tab di un browser;
  • Pane: ogni finestra possiamo suddividerla in più pannelli, ognuno di essi avrà un terminale all'interno.
  • .tmux.conf: il file di configurazione in cui andremo a personalizzare il comportamento di Tmux, rimappando scorciatoie, comportamenti ed estetica.

Sessioni

Nella forma più basilare, per iniziare a lavorare con Tmux, e quindi lanciare una nuova sessione, è sufficiente lanciare il comando tmux.

La barra di stato nella parte inferiore ci mostra alcune indicazioni importanti:

  • [0]: Il nome della sessione: di default Tmux nomina le sessioni con un indice in base 0 incrementando di uno ad ogni nuova sessione;
  • 0:bash: il primo numero (zero in questo caso) rappresenta l'indice, sempre in base 0, della finestra corrente. bash è il nome della finestra, e di default Tmux nomina la finestra con il programma attualmente aperto dentro.
  • Sulla destra invece ci viene indicato il nome della macchina ("mars") e la data.

Per chiudere (e quindi uscire) una sessione è sufficiente chiudere tutti i programmi di tutte le finestre: in questo caso abbiamo una sola finestra con bash aperto, quindi è sufficiente dare un exit: da qui verremo riportati al terminale da cui abbiamo lanciato la nostra sessione di Tmux, come se non fosse successo nulla.

Rilanciamo una sessione, ma questa volta assegniamole un nome: tmux new -s nuova (alias di tmux new-session -s nuova):

Cucù! Abbiamo nominato la nostra attuale sessione in nuova. Ci verrà utile per riconoscere le varie sessioni aperte.

Per lavorare con Tmux è necessario anteporre un prefisso alle scorciatoie da tastiera: di default questo prefisso è C-b (troverete questa "nomenclatura" d'ora in poi), ovvero il tasto CTRL + b. Proviamoci subito sganciandoci dall'attuale sessione aperta, ma prima lanciamo da dentro la sessione un top, ci servirà per capire meglio il concetto. Sempre da dentro la sessione, con top aperto, diamo un C-b d, ovvero CTRL + b, molliamo il tasto CTRL e premiamo d.

Cosa è successo? Ci siamo "sganciati" (detached) dall'attuale sessione, ritornando al terminale principale. Sganciare non significa uccidere la sessione, infatti, se proviamo a dare un tmux ls...

La nostra sessione nuova non solo è ancora lì, ma la ritroveremo ancora nello stesso stato in cui l'abbiamo lasciata! Ritroviamola:

bash
tmux attach -t nuova

Cucù! La nostra sessione è ancora viva e con ancora top avviato. Per comodità, sappiate che nel caso di un'unica sessione disponibile, il solo tmux attach porta allo stesso risultato, collegandosi alla prima sessione disponibile.

Se è la prima volta che scoprite questo concetto di Tmux, fermatevi un attimo a comprenderne l'effettiva utilità nel mondo reale: vi collegate ad un server in ssh, lanciate Tmux, lavorate e lanciate magari un operazione molto lunga o che necessita del tempo. Non ho voglia di rimanere in attesa della sua fine, mi sgancio dalla sessione (magari ne apro un'altra, o comunque continuo a lavorare), chiudo la connessione ssh, vado a farmi una doccia. Quando ritorno, mi ricollego al server, tmux attach e sono di nuovo proiettato nel lavoro che stavo facendo prima.

Bene, sganciamoci nuovamente dalla nostra sessione nuova. Siamo nuovamente nel terminale principale della nostra macchina. Apriamo una nuova sessione, chiamiamola altra, ma dato che non sappiamo se altra esiste già, la creiamo così:

bash
tmux new -A -s altra

Cosa fa di diverso questo comando? Qui stiamo dicendo di creare una nuova sessione chiamata altra, ma con -A stiamo dicendo a Tmux che se questa sessione esiste già, ci agganci ad essa piuttosto che crearne una nuova.

Ok! Ora siamo dentro alla nostra sessione nominata altra, nella quale possiamo iniziare a lavorare dedicandoci ad altri scopi. Ci potremmo iniziare a chiedere come tenere traccia delle sessioni attualmente lanciate in macchina, e magari come saltare da una all'altra. La risposta è: C-b s

Tmux ci mostra qui la lista di tutte le sessioni attualmente attive in macchina. Spostandoci con le frecce direzionali (o con il keybinding di Vim se siete fighi) e dando invio, potremo spostarci facilmente da una sessione all'altra.

Ok, ma io ne ho poche e voglio saltare da una all'altra facilmente. C-b ) ci porta alla sessione successiva, mentre C-b ( a quella precedente.

Spesso, quando ci sganciamo da una sessione Tmux e ci rendiamo conto che questa non ci serve più, non abbiamo particolare voglia di riagganciarci ad essa e chiudere ciò che stava facendo: per questo, kill-session ci viene utile. Proviamo a chiudere la nostra sessione altra:

bash
tmux kill-session -t altra

Come avrete forse intuito, il flag -t lo incontreremo altre volte: ci server per indicare il target a cui è riferito il comando, ovvero il nostro nome di sessione.

Come prima introduzione ci fermiamo qui, integreremo man mano che scopriremo nuovi concetti nei prossimi articoli.

Ci vediamo alla prossima puntata, dove parleremo di finestre.

Comandi / scorciatoie viste

  • tmux: lancia una nuova sessione;
  • tmux new -s mionome o tmux new-session -s mionome: lancia una nuova sessione denominata mionome. Se usiamo il flag -A ci agganceremo alla sessione mionome se esiste già, altrimenti verrà creata nuova;
  • tmux ls: elenca le sessioni attive sulla macchina;
  • tmux attach: ci aggancia alla prima sessione trovata;
  • tmux attach -t mionome: ci aggancia alla sessione mionome;
  • C-b d: sgancia l'attuale sessione lasciandola comunque viva;
  • C-b s: elenca le sessioni attive e ci permette di saltare da una sessione all'altra;
  • C-b ( e C-b ): salta alla sessione precedente o successiva in ordine.
#linux#tutorial