tmux — Guida ai fondamentali

tmux è un terminal multiplexer: permette di gestire più sessioni, finestre e pannelli in un unico terminale, e di lasciare processi in esecuzione anche dopo aver chiuso la connessione SSH.


Concetti fondamentali

Server tmux
└── Sessione (session)
    └── Finestra (window)        ← come tab nel browser
        └── Pannello (pane)      ← split della finestra

Ogni comando tmux si attiva premendo prima il prefix (Ctrl+b), poi il tasto dell'azione.


Installazione

# Fedora / RHEL
sudo dnf install tmux

# Debian / Ubuntu
sudo apt install tmux

# macOS (Homebrew)
brew install tmux

# verifica versione
tmux -V

Sessioni

Le sessioni sono il cuore di tmux: permettono di lasciare lavoro in esecuzione in background e riprenderlo in qualsiasi momento.

tmux                          # nuova sessione senza nome
tmux new -s lavoro            # nuova sessione con nome
tmux ls                       # elenca sessioni attive
tmux attach -t lavoro         # riprendi sessione per nome
tmux attach                   # riprendi l'ultima sessione
tmux kill-session -t lavoro   # termina sessione
tmux kill-server              # termina tutte le sessioni

Dentro tmux, con il prefix:

Tasto Azione
Ctrl+b d detach — lascia la sessione attiva in background
Ctrl+b $ rinomina la sessione corrente
Ctrl+b s elenco interattivo delle sessioni
Ctrl+b ( passa alla sessione precedente
Ctrl+b ) passa alla sessione successiva

Finestre

Le finestre funzionano come tab: ogni finestra è uno spazio di lavoro separato dentro la stessa sessione.

Tasto Azione
Ctrl+b c crea nuova finestra
Ctrl+b , rinomina la finestra corrente
Ctrl+b w elenco interattivo delle finestre
Ctrl+b n prossima finestra
Ctrl+b p finestra precedente
Ctrl+b 09 vai alla finestra per numero
Ctrl+b & chiudi finestra corrente (chiede conferma)
Ctrl+b f cerca finestra per nome

Pannelli (split)

I pannelli dividono una finestra in più terminali visibili contemporaneamente.

Tasto Azione
Ctrl+b % split verticale (affiancati)
Ctrl+b " split orizzontale (uno sopra l'altro)
Ctrl+b freccia sposta focus al pannello nella direzione
Ctrl+b o cicla tra i pannelli
Ctrl+b q mostra i numeri dei pannelli
Ctrl+b q 09 vai al pannello per numero
Ctrl+b z zoom — ingrandisci/riduci il pannello corrente
Ctrl+b { sposta pannello a sinistra
Ctrl+b } sposta pannello a destra
Ctrl+b Spazio cicla tra i layout predefiniti
Ctrl+b x chiudi pannello corrente (chiede conferma)

Ridimensionare i pannelli:

Ctrl+b  :resize-pane -D 5    # espandi verso il basso di 5 righe
Ctrl+b  :resize-pane -U 5    # su
Ctrl+b  :resize-pane -L 10   # sinistra
Ctrl+b  :resize-pane -R 10   # destra

Oppure tieni premuto Ctrl+b e usa le frecce (in alcune configurazioni).


Modalità copia (copy mode)

Permette di scorrere il buffer, selezionare e copiare testo senza mouse.

Tasto Azione
Ctrl+b [ entra in copy mode
q o Esc esci dalla copy mode
frecce / PgUp PgDn scorri il buffer
Ctrl+s cerca testo (forward)
Ctrl+r cerca testo (backward)

In copy mode con tasti vi (se configurato):

v        # inizia selezione
y        # copia selezione
/        # cerca
n / N    # prossimo / precedente risultato
Tasto Azione
Ctrl+b ] incolla il testo copiato

Configurazione — ~/.tmux.conf

Il file di configurazione viene caricato all'avvio. Ricaricalo senza riavviare con:

tmux source-file ~/.tmux.conf
# oppure dall'interno di tmux:
Ctrl+b  :source-file ~/.tmux.conf

Configurazione consigliata per iniziare:

# cambia prefix da Ctrl+b a Ctrl+a (stile screen)
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# ricarica config con prefix + r
bind r source-file ~/.tmux.conf \; display "Config ricaricata."

# numerazione finestre da 1 invece di 0
set -g base-index 1
setw -g pane-base-index 1

# split con tasti più intuitivi
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# navigazione pannelli con Alt+freccia (senza prefix)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# mouse abilitato
set -g mouse on

# storia del buffer più lunga
set -g history-limit 10000

# colori 256
set -g default-terminal "screen-256color"

# barra di stato minimale
set -g status-bg colour235
set -g status-fg colour136
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b"

Comandi dalla riga di comando

Puoi eseguire comandi tmux direttamente dalla shell (utile negli script):

tmux new-session -d -s analisi          # crea sessione in background
tmux send-keys -t analisi "python script.py" Enter   # invia comando
tmux split-window -t analisi -h         # split nella sessione
tmux select-layout -t analisi tiled     # applica layout
tmux kill-session -t analisi

Plugin — TPM (Tmux Plugin Manager)

# installa TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Aggiungi in fondo a ~/.tmux.conf:

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'   # salva/ripristina sessioni

run '~/.tmux/plugins/tpm/tpm'

Gestione plugin dentro tmux:

Tasto Azione
prefix I installa i plugin elencati
prefix U aggiorna i plugin
prefix alt+u rimuovi plugin non elencati

tmux-resurrect è particolarmente utile: salva l'intera struttura di sessioni, finestre e pannelli e la ripristina dopo un reboot con prefix + Ctrl+r.


Workflow tipico

Scenario: sessione di analisi neuroimaging sul server GEEKOM che deve continuare anche dopo la disconnessione SSH.

# sul server remoto, crea sessione nominata
tmux new -s neuroimaging

# apri tre pannelli: codice | log | monitor
Ctrl+b %          # split verticale
Ctrl+b "          # split orizzontale nel pannello di destra

# lancia i processi in ogni pannello
# pannello 1: script Python / FreeSurfer
# pannello 2: tail -f del log
# pannello 3: htop

# disconnettiti lasciando tutto in esecuzione
Ctrl+b d

# --- ore dopo, riconnettiti via SSH ---
tmux attach -t neuroimaging

Cheatsheet

# Sessioni
tmux new -s <nome>
tmux ls
tmux attach -t <nome>
tmux kill-session -t <nome>

prefix + d      detach
prefix + s      elenco sessioni
prefix + $      rinomina sessione

# Finestre
prefix + c      nuova finestra
prefix + ,      rinomina finestra
prefix + w      elenco finestre
prefix + n/p    prossima / precedente
prefix + 0-9    vai a numero

# Pannelli
prefix + %      split verticale
prefix + "      split orizzontale
prefix + frecce naviga
prefix + z      zoom
prefix + x      chiudi

# Utility
prefix + [      copy mode
prefix + ]      incolla
prefix + ?      elenco tutti i tasti
prefix + :      prompt comandi tmux

Suggerimento: prefix + ? mostra tutti i key binding attivi nella sessione corrente. È il riferimento più affidabile dopo aver personalizzato .tmux.conf.


Guida ai fondamentali di tmux — terminale multiplexer per sessioni persistenti e workflow paralleli.