Consentitemi di impostare la scena:un giorno stavo eseguendo il debug di un processo di generazione di funzionalità che richiede molto tempo. Avevo un terminale aperto sul mio Mac ed ero connesso alla mia macchina virtuale (VM) Linux remota dove sarebbe stato avviato il processo. Ho controllato alcune cose con la sceneggiatura e tutto sembrava a posto. Ma quando ho avviato il processo, era quasi ora di lasciare l'ufficio per la giornata. Chiudere il mio laptop ucciderebbe la mia shell, il che ucciderebbe il processo. Il processo richiede un'eternità e, invece di essere in grado di eseguire il debug dei risultati quando sono tornato a casa, dovrei riavviarlo e aspettare che finisca. Ho iniziato a fare i conti con il fatto che dovevo rimanere fino a tardi e non ero contento di questa svolta degli eventi.
Un collega ha notato la mia frustrazione e ha chiesto come poteva aiutare. Ho spiegato il mio problema, dicendo che doveva esserci un modo per continuare a eseguire il processo anche dopo aver chiuso il terminale poiché si trovava su una VM remota. Ero preoccupato che avrebbe dovuto essere collegato al mio guscio per non morire. Poi mi ha fatto conoscere tmux.
Esecuzione di script in remoto con tmux
Il terminale Linux
- I 7 migliori emulatori di terminale per Linux
- 10 strumenti da riga di comando per l'analisi dei dati in Linux
- Scarica ora:cheat sheet SSH
- Cheat sheet sui comandi avanzati di Linux
- Esercitazioni sulla riga di comando di Linux
Per iniziare, ho eseguito un'installazione yum di tmux. Quindi ho avviato una sessione di tmux digitando tmux come comando. Potrei fare tutto in questa sessione di tmux che farei nella mia normale shell. Dato che avevo appena iniziato il processo, l'ho ucciso nel terminale originale. Quindi sono passato alla sessione di tmux e ho riavviato lo script per eseguire il processo. Alla fine, ho messo in pausa il mio laptop come una tipica conclusione della mia giornata lavorativa.
Quando ho ripristinato il mio laptop, la mia shell del terminale si era disconnessa dalla mia VM come mi aspettavo. Ho effettuato nuovamente l'accesso alla VM sulla shell, tranne per il fatto che era vuota come una shell normalmente quando la avvii. La mia reazione iniziale è stata di panico, ma poi ho appreso che dovevo solo riaccedere alla mia sessione di tmux poiché ronzava in sottofondo.
Per ricollegarmi alla mia sessione tmux, ho inserito tmux ls per elencare tutte le sessioni che avevo aperto. Ce n'era solo una, la sessione 0. Per tornare a quella sessione, dovevo solo fare tmux attach -t 0 . Ecco, è arrivata la sessione e il mio script era ancora in esecuzione. Ero estasiato e volevo subito imparare cos'altro potevo fare con tmux.
Utilizzo di tmux come window manager
Non chiudo mai le schede del browser e non chiudo mai le finestre, quindi probabilmente ho circa 20 terminali aperti e in esecuzione in qualsiasi momento. Marie Kondo probabilmente avverte un disturbo nella forza ogni volta che apro una nuova finestra. Ma invece di avere quattro terminali aperti che sono tutti collegati alla stessa VM e provare a tenerne traccia e dove si trovano nel mio elenco di terminali, con tmux, posso aprire un terminale alla VM e avere quattro riquadri in quel terminale. Questo è davvero utile. Ad esempio, avvio spesso un processo sulla VM e quindi devo andare a modificare un file delle proprietà da qualche parte. Poiché il primo processo è ancora in esecuzione, apro un altro terminale per modificare il file. Quindi mi rendo conto che devo eseguire un secondo processo mentre seguo il registro in un'altra finestra per sapere come modificare il file delle proprietà che ho appena aperto. Senza tmux, ciò creerebbe tre terminali che non sarebbero mai stati chiusi.
tmux è stato un vero toccasana soprattutto per l'esecuzione di Docker e Kubernetes. È incredibilmente utile dedicare un container al proprio riquadro invece di aprire un nuovo terminale. Il riquadro principale mi consente di monitorare lo stato dei miei contenitori. Posso aprire facilmente un nuovo riquadro ogni volta che devo entrare in un contenitore. Posso persino eseguire docker-compose up e componi la finestra mobile verso il basso su ogni container contemporaneamente se voglio e avere un solo terminale aperto mentre lo faccio.
I riquadri sono già formattati e adiacenti l'uno all'altro, quindi non devo raccogliere tutti i miei terminali collegati in un'unica VM e provare a trascinarli uno accanto all'altro sul mio monitor, solo per doverlo fare tutto da capo quando devo aprire un nuovo terminale. tmux ti consente anche di ridimensionare al volo i singoli riquadri! È davvero facile chiudere un riquadro quando hai finito. Non stai chiudendo il terminale alla VM; puoi semplicemente aprire un pannello di backup. Questo mi aiuta a mantenere pulito il mio desktop invece di ingombrarlo con terminali dimenticati.
Rimappatura del prefisso tmux
Di recente ho appreso che posso rimappare il prefisso tmux per rendere le cose ancora più semplici. Prima di eseguire un comando tmux (ad esempio, creare un nuovo riquadro, ridimensionare un riquadro o copiare e incollare del testo nel terminale), devi inserire uno schema di tasti specifico per far sapere a tmux che stai per invocare un comando tmux invece di qualsiasi vecchio comando Linux. Il prefisso predefinito è CTRL+b . Ad esempio, il comando per aprire un nuovo riquadro orizzontalmente adiacente a quello attuale è solo % , ma affinché tmux possa ascoltare, dovresti inserire CTRL+b+% . CTRL+b è un po' imbarazzante per me, quindi l'ho rimappato sul backtick (`). Il prefisso rimappato rende le cose più semplici rispetto a dover premere due tasti che non sono posizionati in modo super conveniente. Ora, se voglio un nuovo riquadro, posso semplicemente digitare `+% e voilà!
tmux dall'inizio alla fine
La prima cosa che faccio su qualsiasi nuova VM Linux è installare tmux. La prima cosa che faccio in qualsiasi terminale connesso a una VM Linux è avviare una sessione tmux! Prendo anche i miei snapshot VM di base dopo aver installato tmux, quindi non devo reinstallare tmux se devo ripristinare uno snapshot. Ogni volta che accedo di nuovo a una macchina virtuale Linux, faccio sempre tmux ls per trovare la mia precedente sessione di tmux, quindi collegarla e agganciare esattamente dove avevo interrotto l'ultima volta.