Quante volte hai lanciato un aggiornamento lungo su un server remoto, la connessione SSH è caduta e con essa anche il processo? tmux risolve il problema alla radice: crea sessioni terminali che vivono sul server, indipendenti dalla tua connessione. Ti disconnetti, il lavoro continua; ti riconnetti, ritrovi tutto esattamente come l'avevi lasciato.
Installazione
È già nei repository ufficiali di quasi tutte le distribuzioni.
sudo apt install tmux # Debian/Ubuntu
sudo dnf install tmux # Fedora/RHEL
sudo pacman -S tmux # Arch
Il concetto chiave: sessioni che sopravvivono
Quando lanci tmux senza argomenti crei una nuova sessione. Da lì lavori come in un terminale normale, ma con un vantaggio enorme: puoi "staccarti" (detach) senza chiudere nulla.
tmux new -s deploy
Il flag -s assegna un nome alla sessione: molto meglio dei numeri progressivi di default quando ne tieni aperte diverse in parallelo.
Per staccarti senza uccidere la sessione, dentro tmux premi:
Ctrl+b poi d
La combinazione Ctrl+b è il "prefix" di tmux: quasi ogni comando comincia da lì. Una volta staccato, il processo continua a girare sul server. Puoi chiudere il terminale, spegnere il portatile, cambiare rete: la sessione resta viva finché il server è acceso.
Riattaccarsi alla sessione
Per elencare le sessioni attive:
tmux ls
Per rientrare in una sessione specifica:
tmux attach -t deploy
Se ne hai una sola aperta basta tmux attach. Questo comando è il motivo per cui tmux è diventato uno standard de facto per chi amministra server via SSH: niente più nohup o disown improvvisati, niente più processi persi per una disconnessione di rete.
Finestre: più schede nella stessa sessione
Dentro una sessione puoi aprire più "finestre" (window), come le tab di un browser.
Ctrl+b c— crea una nuova finestraCtrl+b n— passa alla finestra successivaCtrl+b p— torna alla finestra precedenteCtrl+b 0..9— vai direttamente alla finestra numero NCtrl+b ,— rinomina la finestra corrente
Pannelli: dividere lo schermo
Qui tmux mostra il suo vero valore per il lavoro quotidiano: puoi dividere una finestra in più pannelli (pane) e vedere in contemporanea, ad esempio, i log applicativi, l'output di htop e la shell dove lanci i comandi.
Ctrl+b %— split verticale (due pannelli affiancati)Ctrl+b "— split orizzontale (uno sopra, uno sotto)Ctrl+b+ frecce — spostati tra i pannelliCtrl+b z— ingrandisci il pannello corrente a schermo intero (stesso comando per tornare indietro)Ctrl+b x— chiudi il pannello corrente
Un layout tipico durante un deploy: pannello principale con la shell operativa, split orizzontale sotto con journalctl -f sul servizio, e un pannello laterale con watch -n2 systemctl status app. Tutto dentro una singola finestra SSH.
Copy mode: scorrere l'output
Per scorrere l'output passato (utile se un comando ha prodotto molte righe) entra in copy mode:
Ctrl+b [
Da lì ti muovi con le frecce, selezioni testo con Spazio e copi con Invio. Per uscire senza copiare nulla premi q.
Un file di configurazione minimo ma utile
tmux legge ~/.tmux.conf all'avvio. Alcune modifiche che semplificano la vita da subito:
# Split più intuitivi
bind | split-window -h
bind - split-window -v
# Mouse abilitato: click per cambiare pannello, drag per ridimensionare
set -g mouse on
# Cronologia più lunga
set -g history-limit 10000
# Ricarica la config senza riavviare tmux
bind r source-file ~/.tmux.conf
Dopo aver salvato il file, applica le modifiche a una sessione già aperta con tmux source-file ~/.tmux.conf.
Screen: l'alternativa storica
screen fa più o meno lo stesso lavoro ed è ancora preinstallato su molti sistemi minimali. I comandi essenziali sono analoghi:
screen -S deploy # crea sessione
Ctrl+a d # detach
screen -r deploy # riattacca
screen -ls # elenca sessioni
tmux ha però una gestione dei pannelli più moderna e una configurazione più leggibile, motivo per cui oggi è la scelta di default in quasi tutti i workflow da terminale.
Un caso d'uso reale
Immagina di dover lanciare una migrazione di database che richiede venti minuti, su un server raggiunto da un portatile con una connessione Wi-Fi ballerina. Senza tmux, ogni disconnessione significherebbe ricominciare da capo o affidarsi a nohup comando & e sperare bene. Con tmux basta:
tmux new -s migrazione
./run_migration.sh
# Ctrl+b d per staccarsi, torni domani con:
tmux attach -t migrazione
Nessuna sorpresa, nessun processo perso: è probabilmente lo strumento con il miglior rapporto tra tempo di apprendimento e beneficio quotidiano per chi lavora su server remoti.