Guida Tmux: il terminale multiplexer più comodo che proverai mai!

0xbro

Super Moderatore
24 Febbraio 2017
4,464
179
3,755
1,825
[SOTTOTITOLO]Cos'è tmux?[/SOTTOTITOLO]
Da definizione:
tmux is a terminal multiplexer.
In poche parole è un tool (attenzione, NON è nè una shell nè un terminale!) eseguibile all'interno di qualunque terminale, che ne estende le funzionalità, la proficuità e la gestione dei contenuti.

[SOTTOTITOLO]Quali funzionalità offre?[/SOTTOTITOLO]
tmux permette di switchare velocemente tra più programmi all'interno di un terminale, dividere il terminale in più parti, ridimensionarle, eseguire ricerche di testo all'interno dei contenuti di questi ultimi, eseguire il detach e reattach in terminali diversi ecc... Inoltre permette di mantenere stabili le connessioni verso host remoti, senza perderne la sessione in caso l'host venga spento o la connessione cada.
Tutto qusto tramite short-cut in stile vi, configurabili al 100% e liberamente espandibili.
Per un maggiore dettaglio delle molteplici potenzialità di questo prodotto vi invito a leggere il Getting-Started ufficiale.

[SOTTOTITOLO]Come si presenta?[/SOTTOTITOLO]
Senza configurazioni particolari tmux si presenta nella seguente maniera
Screenshot-from-2017-02-04-12-54-41.png

e a terminali divisi in questo modo
1593595764661.png

dove
- evidenziato in rosso potete vedere le windows aperte in tmux (funzionano come i tab dei browser)
- evidenziato in giallo potete vedere i vari panes (sono i molteplici terminali aperti all'interno di una stessa window)
- evidenziato in verde potete vedere il nome assegnato alla sessione in corso

Di seguito un'ulteriore immagine esplicativa
1593596222663.png


[SOTTOTITOLO]Come funzionano le shortcut?[/SOTTOTITOLO]
Come per vi, vim e compagnia, esistono due modalità per operare dentro tmux: la modalità in inserimento (quindi in poche parole la modalità che permette la scrittura all'interno dei terminali) e in comando (la modalità che permette di eseguire azioni come la divisione dei terminali, la ricerca, la creazione di una nuova windows ecc.).
Di default dentro tmux ci si trova sempre in modalità inserimento. Per switchare alla modalità comando bisogna premere ciò che viene chiamato il prefix key, cioè quell'insieme di tasti che faranno attendere il programma finchè non ricevera un tasto short-cut.
La prefix key di default è Ctrl-b, ma può essere liberamente sostituita all'interno del file di conf (molto spesso viene utilizzato il tasto CapsLock oppure Ctrl-f).
Una volta premuta la prefix key si dovrà premere successivamente una nuova combinazione di tasti che effettui l'azione desiderata, come per esempio la suddivione del terminate in due.
Esempio: Premo la prefix key C-b (abbreviazione di Ctrl-b) e subito dopo C-h (Ctrl-h) per dividere il terminale in orizzontale.
tmux mi dividerà il terminale in due panes e tornerà in modalità inserimento.
Esistono centinaia di shortcut e funzionalità, tutte personalizzabili al 100%. Per vedere l'elenco intero vi invito a leggere la documentazione ufficiale. Gran parte delle shortcut personalmente le ho modificate secondo le mie esigenze... vi consiglio di fare lo stesso!
Ma come si fa? Lo scopriamo subito!

[SOTTOTITOLO]Come configuro il tool?[/SOTTOTITOLO]
tmux permette di editare la propria configurazione tramite due file differenti, presi in considerazione gerarchicamente.
Il primo file è /etc/tmux.conf, contenente la configurazione globale del tool, mentre il secondo è ~/.tmux.conf, contenente invece la configurazione specifica per l'utente in corso.
Per configurare al meglio il proprio tool consiglio di leggere la documentazione di arch e il sito ufficiale, ma soprattutto cercare delle configurazioni già fatte da cui prendere spunto, in modo da poter fare le dovute prove.
Questa è la mia configurazione attuale:
Codice:
# set prefix to control-f
set -g prefix C-f

#unbind system defined prefix
unbind C-b

# helps in faster key repetition
set -sg escape-time 0

# source .tmux.conf file
bind r source-file /etc/tmux.conf \; display "Configuration Reloaded!"

# dont mess up with other ctrl-a options by pressing ctrl-a twice
bind C-f send-prefix

# vertical split
bind | split-window -h -c '#{pane_current_path}'

# horizontal split
bind - split-window -v -c '#{pane_current_path}'

# switch windows using Alt+Pag without prefix
bind -n M-PPage previous-window
bind -n M-NPage next-window

# don't allow tmux to rename the window based on commands running
set-window-option -g allow-rename off

# switch panes using Alt-arrow without 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

# Enable names for panes
set -g pane-border-status top
set -g default-command '                      \
function renamePane () {                      \
  read -p "Enter Pane Name: " pane_name;      \
  printf "\033]2;%s\033\\r:" "${pane_name}";  \
};                                            \
export -f renamePane;                         \
bash -i'
set -g pane-border-status top
set -g pane-border-format "#{pane_index} #T #{pane_current_command}"
bind-key -T prefix R send-keys "renamePane" C-m

# Enable mouse
set -g mouse on        #For tmux version 2.1 and up
Per il resto... Try Harder! =P

[SOTTOTITOLO]tmux vs world[/SOTTOTITOLO]
Perchè tmux e non Terminator, screen o altro?
Semplice: tmux incorpora dentro di sè sia le funzionalità di ognuno di loro, è semplice da installare, offre un layout minimale ma elegante ed è completamente personalizzabile. E' molto utile, permette di gestire più sessioni, fare l'attach e il detach in locale e remoto e tante altre belle cose; inoltre può girare dentro terminator, poichè questi è un terminale a tutti gli effetti mentre tmux un tool che gira all'interno di un terminale (anche se non vedo l'utilità di usarli entrambi).
I file di configurazione sono facilmente portabili tra i vari sistemi su cui si lavora, tmux integra le funzioni di screen, tmux do tmux things.
Provare per credere! ;)
Inoltre, essendo un tool molto rinomato, dispone anche di una forte "presenza" sul web, con una comunity molto attiva e con tantissimi template e personalizzazioni pubbliche!

[SOTTOTITOLO]Use cases[/SOTTOTITOLO]
Abbiamo parlato di quasi tutto ciò che riguarda il tool, ma quali sono gli effettivi casi d'uso? Ve li mostrerò in questo paragrafo, secondo le mie necessità giornaliere.

Partiamo dal presupposto che durante le attività di Penetration Test e durante le CTF occorre avere uno strumento che permetta di aprire, chiudere e switchare terminali velocemente. Con tmux è questione di pochi comandi:
Avvio una nuova sessione tmux con tmux new -s PT e avvio subito una scansione nmap. Nel mentre però ho bisogno di leggere due file, e li voglio avere uno vicino all'altro...
C-f --> c e ho aperto una nuova finestra... Ora la voglio dividere a metà: C-f --> | e ho due terminali divisi uno davanti all'altro. In ognuno di loro eseguo il cat del file che mi interessa.
Chissà se la scansione nmap ha finito... Alt+PagSu per tornare alla finestra precedente. Ok ha finito. Ho visto che c'è ftp aperto. Mi collego ma è ora della pausa pranzo... C-f --> d per detachare la sessione e sospendo la macchina. Torno dopo pranzo, tmux attach PT e sono ancora dentro FTP, anche se il WiFi è stato sospeso o la macchina riavviata.
Insomma, sono piuttosto dinamico e veloce no?

Un' altra casistica: inizio una CTF, arrivo a metà ma non riesco più a proseguire. Anzichè chiudere tutto e perdere ogni cosa fatta, faccio il detach della sessione e creo una nuova sessione per un'altra macchina. Ottengo la user e trovo la password per proseguire nella prima CTF. Otimo, posso fare il detach di questa sessione, aprire la prima sessione e trovare tutto come lo avevo lasciato: terminali, output, comandi dati, connessione VPN. Tutto. Posso proseguire senza perdere tempo a rifare le cose già fatte per mettermi in pari.

Ma come faccio a ricordarmi tutte le sessioni aperte?
tmux ls e il risultato sarà qualcosa tipo...
1593604798769.png

Comodo no?!?

[SOTTOTITOLO]Video esplicativi[/SOTTOTITOLO]
Visto che vedere un tool all'opera vale 100 volte tutte le descrizioni di sto mondo, ecco a voi un po' di tutorial validi che vi mostrano il funzionamento di tmux e come si presenta all'occhio umano:






Ovviamente tools potenti come questo sono sempre in evoluzione e presentano sempre funzionalità ignote che attendono solo di essere scoperte. Per questo motivo vi esorto a dare un'occhiata alla documentazione ufficiale, allo scopo di comprendere e imparare a usare il tool al 99% :p

Grazie per la lettura e buon divertimento con il vostro nuovo giochino!

Download
 

Allegati

  • Screenshot-from-2017-02-04-12-54-59.png
    Screenshot-from-2017-02-04-12-54-59.png
    24.4 KB · Visualizzazioni: 10
  • 1593595466260.png
    1593595466260.png
    54.9 KB · Visualizzazioni: 10
i tiling wm sbaglio o non gestiscono le sessioni?
Per quello esiste pure il fucile a due canne dvtm+abduco, ma credo che Tmux abbia più feature... in sintesi, principalmente non viene scelto solo per il session management. D'altra parte dipende molto dal tuo workflow, e per come la vedo io mi cambia poco:

1593699579_1619_02.07.2020_1920x1080.png


vs

1593700153_1629_02.07.2020_1920x1080.png


TL;DR: Tmux gestisce le sessioni SSH/Mosh in modo davvero efficiente e questa è una giusta ragione per cui viene principalmente scelto.
 
  • Mi piace
Reazioni: 0xbro
[SOTTOTITOLO]Cos'è tmux?[/SOTTOTITOLO]
Da definizione:
In poche parole è un tool (attenzione, NON è nè una shell nè un terminale!) eseguibile all'interno di qualunque terminale, che ne estende le funzionalità, la proficuità e la gestione dei contenuti.

[SOTTOTITOLO]Quali funzionalità offre?[/SOTTOTITOLO]
tmux permette di switchare velocemente tra più programmi all'interno di un terminale, dividere il terminale in più parti, ridimensionarle, eseguire ricerche di testo all'interno dei contenuti di questi ultimi, eseguire il detach e reattach in terminali diversi ecc... Inoltre permette di mantenere stabili le connessioni verso host remoti, senza perderne la sessione in caso l'host venga spento o la connessione cada.
Tutto qusto tramite short-cut in stile vi, configurabili al 100% e liberamente espandibili.
Per un maggiore dettaglio delle molteplici potenzialità di questo prodotto vi invito a leggere il Getting-Started ufficiale.

[SOTTOTITOLO]Come si presenta?[/SOTTOTITOLO]
Senza configurazioni particolari tmux si presenta nella seguente maniera
Visualizza allegato 43978
e a terminali divisi in questo modo
Visualizza allegato 43981
dove
- evidenziato in rosso potete vedere le windows aperte in tmux (funzionano come i tab dei browser)
- evidenziato in giallo potete vedere i vari panes (sono i molteplici terminali aperti all'interno di una stessa window)
- evidenziato in verde potete vedere il nome assegnato alla sessione in corso

Di seguito un'ulteriore immagine esplicativa
Visualizza allegato 43982

[SOTTOTITOLO]Come funzionano le shortcut?[/SOTTOTITOLO]
Come per vi, vim e compagnia, esistono due modalità per operare dentro tmux: la modalità in inserimento (quindi in poche parole la modalità che permette la scrittura all'interno dei terminali) e in comando (la modalità che permette di eseguire azioni come la divisione dei terminali, la ricerca, la creazione di una nuova windows ecc.).
Di default dentro tmux ci si trova sempre in modalità inserimento. Per switchare alla modalità comando bisogna premere ciò che viene chiamato il prefix key, cioè quell'insieme di tasti che faranno attendere il programma finchè non ricevera un tasto short-cut.
La prefix key di default è Ctrl-b, ma può essere liberamente sostituita all'interno del file di conf (molto spesso viene utilizzato il tasto CapsLock oppure Ctrl-f).
Una volta premuta la prefix key si dovrà premere successivamente una nuova combinazione di tasti che effettui l'azione desiderata, come per esempio la suddivione del terminate in due.
Esempio: Premo la prefix key C-b (abbreviazione di Ctrl-b) e subito dopo C-h (Ctrl-h) per dividere il terminale in orizzontale.
tmux mi dividerà il terminale in due panes e tornerà in modalità inserimento.
Esistono centinaia di shortcut e funzionalità, tutte personalizzabili al 100%. Per vedere l'elenco intero vi invito a leggere la documentazione ufficiale. Gran parte delle shortcut personalmente le ho modificate secondo le mie esigenze... vi consiglio di fare lo stesso!
Ma come si fa? Lo scopriamo subito!

[SOTTOTITOLO]Come configuro il tool?[/SOTTOTITOLO]
tmux permette di editare la propria configurazione tramite due file differenti, presi in considerazione gerarchicamente.
Il primo file è /etc/tmux.conf, contenente la configurazione globale del tool, mentre il secondo è ~/.tmux.conf, contenente invece la configurazione specifica per l'utente in corso.
Per configurare al meglio il proprio tool consiglio di leggere la documentazione di arch e il sito ufficiale, ma soprattutto cercare delle configurazioni già fatte da cui prendere spunto, in modo da poter fare le dovute prove.
Questa è la mia configurazione attuale:
Codice:
# set prefix to control-f
set -g prefix C-f

#unbind system defined prefix
unbind C-b

# helps in faster key repetition
set -sg escape-time 0

# source .tmux.conf file
bind r source-file /etc/tmux.conf \; display "Configuration Reloaded!"

# dont mess up with other ctrl-a options by pressing ctrl-a twice
bind C-f send-prefix

# vertical split
bind | split-window -h -c '#{pane_current_path}'

# horizontal split
bind - split-window -v -c '#{pane_current_path}'

# switch windows using Alt+Pag without prefix
bind -n M-PPage previous-window
bind -n M-NPage next-window

# don't allow tmux to rename the window based on commands running
set-window-option -g allow-rename off

# switch panes using Alt-arrow without 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

# Enable names for panes
set -g pane-border-status top
set -g default-command '                      \
function renamePane () {                      \
  read -p "Enter Pane Name: " pane_name;      \
  printf "\033]2;%s\033\\r:" "${pane_name}";  \
};                                            \
export -f renamePane;                         \
bash -i'
set -g pane-border-status top
set -g pane-border-format "#{pane_index} #T #{pane_current_command}"
bind-key -T prefix R send-keys "renamePane" C-m

# Enable mouse
set -g mouse on        #For tmux version 2.1 and up
Per il resto... Try Harder! =P

[SOTTOTITOLO]tmux vs world[/SOTTOTITOLO]
Perchè tmux e non Terminator, screen o altro?
Semplice: tmux incorpora dentro di sè sia le funzionalità di ognuno di loro, è semplice da installare, offre un layout minimale ma elegante ed è completamente personalizzabile. E' molto utile, permette di gestire più sessioni, fare l'attach e il detach in locale e remoto e tante altre belle cose; inoltre può girare dentro terminator, poichè questi è un terminale a tutti gli effetti mentre tmux un tool che gira all'interno di un terminale (anche se non vedo l'utilità di usarli entrambi).
I file di configurazione sono facilmente portabili tra i vari sistemi su cui si lavora, tmux integra le funzioni di screen, tmux do tmux things.
Provare per credere! ;)
Inoltre, essendo un tool molto rinomato, dispone anche di una forte "presenza" sul web, con una comunity molto attiva e con tantissimi template e personalizzazioni pubbliche!

[SOTTOTITOLO]Use cases[/SOTTOTITOLO]
Abbiamo parlato di quasi tutto ciò che riguarda il tool, ma quali sono gli effettivi casi d'uso? Ve li mostrerò in questo paragrafo, secondo le mie necessità giornaliere.

Partiamo dal presupposto che durante le attività di Penetration Test e durante le CTF occorre avere uno strumento che permetta di aprire, chiudere e switchare terminali velocemente. Con tmux è questione di pochi comandi:
Avvio una nuova sessione tmux con tmux new -s PT e avvio subito una scansione nmap. Nel mentre però ho bisogno di leggere due file, e li voglio avere uno vicino all'altro...
C-f --> c e ho aperto una nuova finestra... Ora la voglio dividere a metà: C-f --> | e ho due terminali divisi uno davanti all'altro. In ognuno di loro eseguo il cat del file che mi interessa.
Chissà se la scansione nmap ha finito... Alt+PagSu per tornare alla finestra precedente. Ok ha finito. Ho visto che c'è ftp aperto. Mi collego ma è ora della pausa pranzo... C-f --> d per detachare la sessione e sospendo la macchina. Torno dopo pranzo, tmux attach PT e sono ancora dentro FTP, anche se il WiFi è stato sospeso o la macchina riavviata.
Insomma, sono piuttosto dinamico e veloce no?

Un' altra casistica: inizio una CTF, arrivo a metà ma non riesco più a proseguire. Anzichè chiudere tutto e perdere ogni cosa fatta, faccio il detach della sessione e creo una nuova sessione per un'altra macchina. Ottengo la user e trovo la password per proseguire nella prima CTF. Otimo, posso fare il detach di questa sessione, aprire la prima sessione e trovare tutto come lo avevo lasciato: terminali, output, comandi dati, connessione VPN. Tutto. Posso proseguire senza perdere tempo a rifare le cose già fatte per mettermi in pari.

Ma come faccio a ricordarmi tutte le sessioni aperte?
tmux ls e il risultato sarà qualcosa tipo...
Visualizza allegato 43983
Comodo no?!?

[SOTTOTITOLO]Video esplicativi[/SOTTOTITOLO]
Visto che vedere un tool all'opera vale 100 volte tutte le descrizioni di sto mondo, ecco a voi un po' di tutorial validi che vi mostrano il funzionamento di tmux e come si presenta all'occhio umano:






Ovviamente tools potenti come questo sono sempre in evoluzione e presentano sempre funzionalità ignote che attendono solo di essere scoperte. Per questo motivo vi esorto a dare un'occhiata alla documentazione ufficiale, allo scopo di comprendere e imparare a usare il tool al 99% :p

Grazie per la lettura e buon divertimento con il vostro nuovo giochino!

Download

l'ho utilizzato diverse volte ed è abbastanza comodo