Skip to main content
  1. Comandi/

tmux

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Terminal multiplexer — gestisce sessioni, finestre e pannelli in un solo terminale. Le sessioni restano vive anche dopo aver chiuso il terminale o disconnesso SSH. Fondamentale per Bandit e per lavoro su server remoti.

Gerarchia
#

# tmux ha tre livelli:
# sessione  contiene finestre
#   finestra  contiene pannelli
#     pannello  e' il terminale vero

# Esempio:
# Session "lavoro"
#   Window 0: "ctf"
#     Pane 0 (sinistra)   nc -l -p 5555
#     Pane 1 (destra)     ./suconnect 5555
#   Window 1: "note"
#     Pane 0              vim

Prefisso
#

Tutti i comandi tmux iniziano con il prefisso Ctrl+b. Prima premi Ctrl+b, rilasci, poi premi il tasto del comando.

# Cambiare prefisso in ~/.tmux.conf (molti usano Ctrl+a come screen):
# set -g prefix C-a
# Il prefisso default su Bandit e' sempre Ctrl+b

Sessioni
#

# Avviare
tmux                          # nuova sessione senza nome
tmux new -s nome              # -s = session name

# Detach / Attach
# Ctrl+b  d                   # d = detach — sessione resta viva in background
tmux ls                       # ls = list sessions
tmux attach -t nome           # -t = target, rientra per nome
tmux attach -t 0              # rientra per numero
tmux kill-session -t nome     # chiude una sessione
tmux kill-server              # chiude tutto

Finestre (Windows)
#

Una finestra occupa tutto lo schermo — come un tab del browser.

# Ctrl+b  c          c = create  nuova finestra
# Ctrl+b  ,          rinomina finestra corrente
# Ctrl+b  n          n = next  finestra successiva
# Ctrl+b  p          p = previous  finestra precedente
# Ctrl+b  0-9        vai alla finestra per numero
# Ctrl+b  w          w = window list  lista finestre interattiva
# Ctrl+b  &          & = kill (come kill in shell)  chiudi finestra (conferma)

Pannelli (Panes)
#

Un pannello divide la finestra — puoi avere piu terminali nella stessa schermata.

# Ctrl+b  %          % = split verticale (due colonne)
# Ctrl+b  "          " = split orizzontale (due righe)
# Ctrl+b  space      cambia direzione, da split verticale a orizzontale e viceversa
# Ctrl+b  freccia    sposta tra pannelli nella direzione
# Ctrl+b  o          o = other  passa al pannello successivo
# Ctrl+b  ;          torna al pannello usato prima
# Ctrl+b  x          x = exit/kill  chiudi pannello corrente (conferma)
# Ctrl+b  z          z = zoom  toggle fullscreen sul pannello corrente
# Ctrl+b  q          q = quit numbering  mostra numeri pannelli,
#                        premi il numero per saltarci
# Ctrl+b  {          sposta pannello a sinistra
# Ctrl+b  }          sposta pannello a destra
# Ctrl+b  Ctrl+freccia  ridimensiona pannello in piccoli step

Scroll e copia
#

Su Mac non hai PgUp fisica — usa Fn+Freccia Su oppure entra in modalita copia con Ctrl+b [.

# Ctrl+b  [          entra in modalita copia / scroll
#                    [ = apre il buffer di scrollback
#   frecce           scorrono riga per riga
#   Fn+Freccia Su    scorre pagina per pagina (Mac)
#   q                esce dalla modalita copia
#   Space            inizia selezione testo
#   Enter            copia selezione nel buffer tmux

# Ctrl+b  ]          incolla il testo copiato dal buffer tmux

Comandi da riga di comando
#

# Eseguire un comando in una sessione esistente senza entrarci
tmux send-keys -t nome:finestra "comando" Enter

# Creare una finestra con nome specifico
tmux new-window -t nome -n "titolo"

# Dividere un pannello da riga di comando
tmux split-window -h -t nome    # -h = horizontal split (due colonne)
tmux split-window -v -t nome    # -v = vertical split (due righe)

Flag principali
#

FlagSignificatoEsempio
-ssession nametmux new -s ctf
-ttargettmux attach -t ctf
-ddetach dopo il comandotmux new -s nome -d
-hhorizontal splittmux split-window -h
-vvertical splittmux split-window -v
-xlarghezza finestratmux new -s nome -x 220
-yaltezza finestratmux new -s nome -y 50

Scenario Reale
#

# Bandit 20 — split verticale per nc + suconnect nella stessa finestra
tmux new -s bandit20
# Ctrl+b %                              split verticale
# pannello sinistro:
echo PASSWORD | nc -l -p 5555 &
# Ctrl+b freccia destra                 vai al pannello destro
./suconnect 5555
# Server remoto — sessione persistente che sopravvive alla disconnessione
ssh utente@server
tmux new -s lavoro                      # crea sessione
# ... lavori ...
# Ctrl+b d                              detach
# connessione SSH si chiude
# il processo continua sul server
ssh utente@server                       # riconnetti
tmux attach -t lavoro                   # rientra esattamente dove eri
Tip

Su server remoti, apri sempre tmux subito dopo il login SSH. Se la connessione cade, il tuo lavoro e' ancora li quando torni.

Note

-h e -v in split-window sembrano invertiti rispetto all'intuizione: -h = horizontal = divide in due colonne (split verticale visivo) -v = vertical = divide in due righe (split orizzontale visivo) Il parametro indica la direzione della linea di divisione, non delle colonne.


Dove l'ho usato
#

  • bandit-20 — due pannelli per nc in ascolto e suconnect in parallelo

Collegato a
#

  • ssh — tmux e' essenziale nelle sessioni SSH remote
  • shell-interattiva — tmux crea shell interattive in ogni pannello
  • system — categoria

Related