--- title: Cybersecurity con sistemi GNU/Linux subtitle: Dispensa del corso author: Andrea Fazzi data: 13.03.2024 urlcolor: blue --- # Utilizzo avanzato del terminale In questa sezione verranno discussi gli utilizzi più avanzati del terminale. In particolare, ci si soffermerà sui cosidetti *terminal multiplexer*. ## I *terminal multiplexer* I terminal multiplexer in Linux sono strumenti potenti che consentono agli utenti di creare più sessioni di terminale all'interno di una singola finestra del terminale. Questi strumenti sono particolarmente utili per gestire più processi contemporaneamente, mantenendo aperte le sessioni anche dopo la disconnessione, e per organizzare le finestre del terminale in modo efficiente. Uno dei terminal multiplexer più popolari e ampiamente utilizzati è `tmux`. `tmux` permette agli utenti di creare, gestire e navigare tra più sessioni di terminale, facilitando l'organizzazione dei processi e la gestione delle finestre. Con `tmux`, è possibile dividere la finestra del terminale in più riquadri, ciascuno dei quali può eseguire un processo separato, e passare facilmente da una sessione all'altra. Un altro esempio di terminal multiplexer è `screen`, che offre funzionalità simili a `tmux` ma con una sintassi leggermente diversa. Entrambi gli strumenti sono disponibili per la maggior parte delle distribuzioni Linux e possono essere installati tramite il gestore di pacchetti della distribuzione. Utilizzare un terminal multiplexer può migliorare notevolmente l'efficienza e la produttività degli sviluppatori e degli amministratori di sistema, consentendo di lavorare con più processi contemporaneamente senza dover aprire molteplici finestre del terminale. ### Riferimenti 1. [https://opensource.com/article/21/5/linux-terminal-multiplexer](https://opensource.com/article/21/5/linux-terminal-multiplexer) ## Introduzione a `tmux` `tmux` è un potente strumento di gestione delle sessioni di terminale in Linux. Permette agli utenti di creare, gestire e navigare tra più sessioni di terminale all'interno di una singola finestra del terminale. Questa funzionalità è particolarmente utile per l'esecuzione di più programmi con una singola connessione, come quando si effettua una connessione remota a una macchina utilizzando Secure Shell (SSH) [1]. Per iniziare ad utilizzare `tmux`, basta digitare `tmux` nel terminale. Questo comando avvia un server `tmux`, crea una sessione predefinita (numero 0) con una singola finestra e si collega ad essa. Una volta connessi a `tmux`, è possibile eseguire qualsiasi comando o programma come si farebbe normalmente. ## Installazione di `tmux` `tmux` è un'applicazione disponibile nel repository di `Arch Linux`. Per installarla basterà utilizzare il comando `pacman`. ```bash sudo pacman -S tmux ``` Per verificare che l'installazione sia andata a buon fine: ```bash tmux -V ``` Il comando restituirà la versione installata. ### Riferimenti 1. https://www.redhat.com/sysadmin/introduction-tmux-linux 2. https://linuxhandbook.com/tmux/ 3. https://hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/ 4. https://linuxize.com/post/getting-started-with-tmux/ 5. https://linuxconfig.org/introduction-to-terminal-multiplexer-tmux 6. https://github.com/tmux/tmux/wiki/Getting-Started 7. https://www.howtogeek.com/671422/how-to-use-tmux-on-linux-and-why-its-better-than-screen/ 8. https://opensource.com/article/17/2/quick-introduction-tmux 9. https://wiki.archlinux.org/title/Tmux 10. https://github.com/tmux/tmux/wiki ## Primi passi con `tmux` Per eseguire `tmux` si dovrà semplicemente invocare il comando all'interno di una sessione di terminale. ```bash tmux ``` È possibile staccare la sessione `tmux` premendo `Ctrl+B` seguito da `D`. `tmux` opera utilizzando una serie di scorciatoie da tastiera (keybindings) attivate premendo la combinazione "prefisso". Di default, il prefisso è `Ctrl+B`. Dopo di che, premere `D` per staccare dalla sessione corrente. La sessione continua ad eseguire in background anche dopo la disconnessione, permettendo di riprendere dove si è lasciati quando si è pronti a riconnettersi al server e riattaccarsi alla sessione esistente. `tmux` fornisce una serie di scorciatoie da tastiera per eseguire comandi rapidamente all'interno di una sessione `tmux`. Alcune delle più utili includono: - `Ctrl+B D` — Stacca dalla sessione corrente. - `Ctrl+B %` — Suddividi la finestra in due pannelli orizzontalmente. - `Ctrl+B "` — Suddividi la finestra in due pannelli verticalmente. - `Ctrl+B` seguito da una freccia (sinistra, destra, su, giù) — Sposta tra i pannelli. - `Ctrl+B X` — Chiudi il pannello. - `Ctrl+B C` — Crea una nuova finestra. - `Ctrl+B N` o `P` — Sposta alla finestra successiva o precedente. - `Ctrl+B 0` (1,2...) — Sposta a una finestra specifica per numero. - `Ctrl+B :` — Entra nella riga di comando per digitare comandi. L'auto-completamento tramite tab è disponibile. - `Ctrl+B ?` — Visualizza tutte le scorciatoie da tastiera. Premere `Q` per uscire. - `Ctrl+B W` — Apre un pannello per navigare tra le finestre in più sessioni. ### Esercizio Utilizza `tmux` per suddividere il terminale in due pannelli verticali. Nel pannello di sinistra apri uno script in Python utilizzando l'editor `nano`. Nel pannello di destra esegui il comando `htop`. Se `htop` non è presente nel sistema, procedi con la sua installazione attraverso il package manager `pacman`. ## Configurazione di `tmux` Il file di configurazione di `tmux`, noto come `tmux.conf`, è un file di testo che permette agli utenti di personalizzare l'ambiente di lavoro di `tmux` secondo le proprie preferenze. Questo file può essere posizionato in due luoghi principali: - `~/.tmux.conf` per una configurazione specifica dell'utente corrente. - `/etc/tmux.conf` per una configurazione globale, applicabile a tutti gli utenti del sistema. Se il file `~/.tmux.conf` non esiste, può essere creato semplicemente eseguendo il comando `touch ~/.tmux.conf` nel terminale. Questo creerà un file di configurazione vuoto che può essere modificato per aggiungere le impostazioni desiderate. La configurazione di `tmux` può includere una vasta gamma di opzioni, tra cui: - Cambio del prefisso di comando predefinito. - Abilitazione della modalità mouse. - Impostazione di due prefissi. - Cambio del comportamento predefinito del server. - Inizio del conteggio dei numeri delle finestre e dei pannelli (Base-Index) a 1. - Modifica dello sfondo del pannello corrente. - ... Per esempio, per cambiare il prefisso di comando predefinito da `Ctrl+B` a `Ctrl+A`, si potrebbe aggiungere la seguente riga al file `tmux.conf`: ``` set-option -g prefix C-a ``` Dopo aver apportato modifiche al file di configurazione, è necessario ricaricarlo per applicare le nuove impostazioni. Questo può essere fatto eseguendo il comando `tmux source-file ~/.tmux.conf` dal terminale o utilizzando il comando `source-file ~/.tmux.conf` dalla modalità di comando di `tmux`. Per facilitare il processo, è possibile aggiungere un collegamento rapido nel file `tmux.conf` per ricaricare facilmente la configurazione: ``` bind r source-file ~/.tmux.conf \; display "Reloaded!" ``` Questo permette di ricaricare la configurazione premendo il prefisso seguito da `r`, visualizzando un messaggio di conferma. ### Riferimenti 1. https://hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/ 2. https://www.hostinger.com/tutorials/tmux-config 3. https://dev.to/iggredible/useful-tmux-configuration-examples-k3g 4. https://github.com/gpakosz/.tmux 5. https://arcolinux.com/everthing-you-need-to-know-about-tmux-configuration/ 6. https://thevaluable.dev/tmux-config-mouseless/ 7. https://github.com/samoshkin/tmux-config 8. https://wiki.archlinux.org/title/tmux 9. https://medium.com/@bhavik.n/customize-tmux-to-use-it-effectively-28b262c8b692 ## Creazione di layout personalizzati Si supponga di voler creare un file di configurazione specifico per un progetto in cui il terminale viene diviso in tre parti: due colonne verticali di cui una a sua volta suddivisa orizzontalmente. In questo caso è possibile utilizzare uno script di configurazione personalizzato per `tmux`. Questo script può essere salvato in un file separato, ad esempio in `~/.config/tmux/split.conf`. ``` new -s splitted_session # crea una nuova sessione selectp -t 0 # seleziona il primo pannello splitw -h -p 50 # divide il pannello corrente orizzontalmente in due parti selectp -t 1 # seleziona il nuovo secondo pannello splitw -v -p 50 # divide il pannello corrente verticalmente in due parti selectp -t 0 # torna al primo pannello ``` Una volta creato il file di configurazione, occorrerà "eseguirlo" con ```bash tmux source-file ~/.config/tmux/split.conf ``` ### Esercizio Crea un file di configurazione `tmux` per produrre un layout con due righe di cui la prima suddivisa in due colonne secondo uno schema simile a quello riportato sotto. ``` ----------- | | | | | | ----------- | | ----------- ```