Comanda Linux tmux reprezintă un instrument puternic, un fel de „ecran” avansat pentru terminal. Argumentele în favoarea sa sunt numeroase și convingătoare, motiv pentru care am decis să analizăm comparativ cele două opțiuni. Oare tmux este cu adevărat superior sau este doar un caz de preferință pentru ceea ce ne este deja familiar?
tmux în Contrast cu Ecranul
Atât comenzile tmux, cât și GNU ecranul sunt multiplexoare de terminal. Acestea permit gestionarea mai multor ferestre într-o singură fereastră de terminal, facilitând comutarea rapidă între ele. Fiecare fereastră poate fi divizată în panouri, fiecare oferind o linie de comandă independentă.
Un alt avantaj este posibilitatea de a detașa o sesiune, transformând-o într-un proces care rulează în fundal, chiar dacă închideți fereastra terminalului care a inițiat-o. Ulterior, puteți redeschide un terminal și reactiva sesiunea detașată. Această facilitate este disponibilă inclusiv prin conexiuni SSH.
Imaginează-ți că detașezi o sesiune de pe un computer, te deplasezi la domiciliu și te conectezi la același computer de la distanță. Odată reconectat, poți relua sesiunea din fundal și continua să o utilizezi interactiv, ca și cum nu te-ai fi deconectat.
Ce Este Comanda Ecran?
Comanda ecran este un multiplexor de terminal cu multiple funcționalități, explorate în profunzime într-un alt material. De data aceasta, ne vom concentra pe tmux, menționând, pe parcurs, cum ecranul gestionează aceleași funcții sau caracteristici.
Un aspect particular ne-a deranjat la ecran, pe care îl vom discuta și vom analiza modul în care tmux abordează problema.
Instalarea tmux
În timp ce ecranul este, de obicei, preinstalat pe majoritatea distribuțiilor Linux, tmux necesită instalare. Pentru a instala tmux pe Ubuntu, folosiți:
sudo apt-get install tmux
Pe Manjaro, puteți folosi pacman:
sudo pacman -Sy tmux
Pe Fedora 31, tmux este deja inclus.
Inițierea unei Sesiuni tmux
Pentru a lansa tmux, tastați simplu „tmux” și apăsați Enter:
tmux
Un indicator al faptului că sunteți într-o sesiune tmux este apariția unei bare de stare la baza ferestrei terminalului.
În partea dreaptă a barei de stare, este afișat numele gazdei, ora și data. În partea stângă, găsim informații specifice sesiunii:
[0]: Acesta este numele sesiunii, numerotate implicit începând cu zero. Vom discuta ulterior cum să atribuiți nume sugestive sesiunilor.
0:bash*: 0 indică faptul că este prima fereastră în sesiune. Procesul activ în această fereastră este bash. Dacă rulează un program, numele acestuia va apărea aici. Asteriscul indică fereastra curentă. La fiecare nouă fereastră creată, informațiile despre aceasta sunt adăugate în bara de stare.
Spre deosebire de tmux, comanda ecran nu oferă o bară de stare, navigarea fiind bazată pe intuiție și experiență. Deși pierderea unei linii pentru bara de stare poate fi considerată un dezavantaj, această linie oferă informații valoroase. Am ales să menținem imaginile ferestrelor terminalului la dimensiunea lor implicită pentru a face informațiile vizibile.
Comenzile pentru tmux sunt introduse prin combinații de taste. Mai întâi, apăsați Ctrl+B pentru a atrage atenția tmux. Ulterior, apăsați rapid o a doua tastă pentru a trimite o comandă. Comenzile sunt reprezentate de litere, cifre, semne de punctuație sau tastele săgeți.
Pentru ecran, procesul este similar, cu excepția faptului că Ctrl+A este folosit pentru a atrage atenția acestuia.
Pentru a închide o fereastră, apăsați Ctrl+B, apoi rapid X. Bara de stare se va colora în galben, solicitându-vă să confirmați închiderea ferestrei.
Apăsați Y pentru a închide fereastra sau N dacă vă răzgândiți. Nu este necesară apăsarea tastei Enter, Y sau N fiind suficiente pentru a confirma alegerea.
Închiderea ferestrei va duce la închiderea sesiunii, dacă era singura fereastră activă. Veți reveni la linia de comandă de unde ați pornit tmux și veți vedea mesajul „[exited]”.
Confirmarea Închiderii Sesiunii
Deși poate părea evident, este important de reținut că acest mesaj confirmă că sesiunea a fost închisă, nu doar detașată și lăsată să ruleze în fundal. Detașarea sesiunilor va fi discutată ulterior.
Inițierea unei Sesiuni tmux cu Nume
Dacă lucrați frecvent cu mai multe sesiuni tmux, aprecierea pentru denumirea lor va veni rapid. Deși ecranul permite și denumirea sesiunilor, acestea nu sunt afișate în cadrul ferestrelor sesiunii.
tmux new -s geek-1
Pentru a porni o sesiune tmux cu un nume specific, folosiți comanda „new” (sesiune nouă), împreună cu opțiunea „-s” (numele sesiunii). Sesiunea noastră se va numi „geek-1”, așa că vom folosi următoarea comandă:
Acum, numele „geek-1” apare în bara de stare, în partea stângă.
Adăugarea Mai Multor Ferestre
Pentru a crea o nouă fereastră în sesiunea curentă, apăsați Ctrl+B, urmat de C. Veți obține o fereastră goală. Pentru a avea ceva care să ruleze în această fereastră, vom începe comanda „dmesg”.
dmesg -w
cu opțiunea -w (urmărește):
Acum, avem două ferestre în sesiune: una cu „top” și una cu „dmesg”. Totuși, putem vedea doar una la un moment dat (vom detalia acest aspect mai jos).
Bara de stare indică faptul că ne aflăm în sesiunea „geek-1”. În fereastra zero, rulează „top”, iar în fereastra unu, rulează „dmesg”. Asteriscul indică fereastra care este vizibilă în prezent.
Pentru a naviga între ferestre, apăsați Ctrl+B, apoi una dintre următoarele taste:
N: Afișează următoarea fereastră.
P: Afișează fereastra anterioară.
0 la 9: Afișează fereastra corespunzătoare numărului.
Alternativ, puteți alege o fereastră dintr-o listă. Apăsând Ctrl+B și apoi W, va apărea o listă de ferestre.
Navigarea Prin Listele de Ferestre
Pentru a deplasa bara galbenă de evidențiere, utilizați săgețile sus și jos, tastele Acasă sau Sfârșit. Secțiunea de jos a ecranului va afișa o previzualizare a conținutului ferestrei evidențiate.
Apăsați Enter pentru a comuta la fereastra selectată sau Esc pentru a ieși din listă fără a comuta.
Detașarea și Reatașarea Sesiunilor
Apăsând Ctrl+B, urmat de D, veți detașa sesiunea. Aceasta va continua să ruleze în fundal, fără a mai fi vizibilă sau interactivă.
Am pornit procesul „top” în sesiune ca exemplu. Apoi, am apăsat Ctrl+B, urmat de D. Sesiunea a dispărut, trecând în fundal.
Am revenit la fereastra terminalului original. tmux ne-a informat că sesiunea a fost detașată, afișând inclusiv numele sesiunii. Acest nume este esențial pentru reatașarea unei sesiuni detașate.
tmux attach-session -t geek-1
Pentru a reatașa o sesiune detașată, utilizăm comanda „attach-session”, cu opțiunea „-t” (sesiunea țintă). Furnizăm numele sesiunii pe care dorim să o reactivăm.
Introducem următoarea comandă:
Sesiunea noastră devine din nou vizibilă și interactivă.
Procesele Lungi
Orice procese de lungă durată lansate înainte de detașare vor continua să ruleze în fundal (dacă nu s-au încheiat), chiar și după reatașarea sesiunii.
Ecranul poate realiza același lucru, însă într-un mod mai puțin intuitiv.
tmux new -s geek-2
Gestionarea Mai Multor Sesiuni
dmesg -w
Deschidem un alt terminal și inițiem o nouă sesiune tmux, denumită „geek-2”:
În această sesiune, lansăm comanda „dmesg”:
Acum avem sesiunea inițială „geek-1” și noua sesiune „geek-2”.
Bara de stare ne informează că această sesiune se numește „geek-2” și are o fereastră activă care rulează „dmesg”.
Dacă apăsăm Ctrl+B, urmat de D, detașăm această sesiune.
Revenind la sesiunea „geek-1”, apăsăm Ctrl+B, urmat de S, pentru a vizualiza o listă a sesiunilor tmux.
Este important de menționat că aceasta este o listă a sesiunilor, în contrast cu lista ferestrelor pe care am văzut-o anterior.
Pentru a naviga prin listă, utilizați săgețile sus și jos, tastele Acasă sau Sfârșit. În partea de jos, apare o previzualizare a conținutului sesiunii evidențiate.
Dacă apăsați săgeata dreapta, vor fi afișate ferestrele sesiunii selectate.
Apăsați Enter pentru a comuta la sesiunea sau fereastra selectată sau Esc pentru a ieși din listă fără a face modificări. Dacă selectați o sesiune nouă, sesiunea actuală va fi detașată, iar cea selectată va fi reatașată.
Gestionarea Sesiunilor Multiple
Am detașat sesiunea „geek-2” înainte de a efectua acest pas. Totuși, este posibil să faceți acest lucru și cu sesiunile atașate la ferestrele terminalului originale. În acest caz, orice modificări ale ecranului vor apărea simultan în ambele sesiuni tmux.
Comanda ecran poate realiza același lucru, folosind un set similar de comenzi.
Lucrul cu Panouri
Apăsând Ctrl+B, urmat de ghilimele duble („”), veți împărți fereastra orizontal în două panouri.
Această operațiune afectează doar fereastra curentă, celelalte ferestre din sesiune rămânând neschimbate. Am utilizat comanda „tmux ls” în panoul de sus pentru a lista ferestrele sesiunii. Sunt două, iar bara de stare ne indică faptul că ne aflăm în fereastra unu. Dacă trecem la fereastra zero (Ctrl+B, 0), vom vedea că aceasta este neschimbată.
Aceste panouri reprezintă linii de comandă independente, nu doar vizualizări ale unei singure ferestre. Pentru a demonstra acest lucru, vom rula comenzi diferite în fiecare panou.
Introducem următoarele:
uname -a
ls -hl
Pentru a naviga între panouri, apăsați Ctrl+B, urmat de săgeata sus, jos, stânga sau dreapta.
Apăsând Ctrl+B, urmat de semnul procentului (%), panoul curent va fi împărțit vertical.
Apăsați Ctrl+B, urmat de Q, pentru a afișa scurt numărul fiecărui panou.
Aceste numere sunt folosite în solicitările și mesajele de la tmux. Apăsați Ctrl+B, urmat de X, pentru a închide panoul curent. Bara de stare va deveni galbenă, solicitând confirmarea închiderii. Apăsați Y pentru a elimina panoul sau N pentru a anula.
Închiderea Panoului
Apăsând Y, panoul este eliminat.
Ecranul oferă și funcția de panouri, dar interacțiunea cu acestea este mai puțin intuitivă. Un dezavantaj major al ecranului este pierderea panourilor la detașarea și reatașarea sesiunilor.
Rezumatul Comenzilor Ctrl+B
Am inclus mai jos o listă a principalelor comenzi pe care le puteți utiliza în tmux:
Comenzi pentru sesiune:
S: Listează sesiunile.
$: Redenumește sesiunea curentă.
D: Detașează sesiunea curentă.
Ctrl+B, apoi ?: Afișează pagina de ajutor în tmux.
Comenzi pentru fereastră:
C: Creează o fereastră nouă.
,: Redenumește fereastra curentă.
W: Listează ferestrele.
N: Comută la următoarea fereastră.
P: Comută la fereastra anterioară.
De la 0 la 9: Comută la fereastra corespunzătoare numărului.
Comenzi pentru panou:
%: Creează o divizare orizontală.
„: Creează o divizare verticală.
H sau săgeata stânga: Comută la panoul din stânga.
I sau săgeata dreapta: Comută la panoul din dreapta.
J sau săgeata în jos: Comută la panoul de jos.
K sau săgeata sus: Comută la panoul de sus.
Q: Afișează scurt numerele panourilor.
O: Navighează prin panouri în ordine ciclică.
}: Schimbă poziția panoului curent cu următorul.
{: Schimbă poziția panoului curent cu precedentul.
X: Închide panoul curent.
Comparația tmux cu ecran
Din punct de vedere funcțional, ecranul și tmux sunt similare, oferind aceleași funcționalități de bază. Diferența majoră constă în modul în care se accesează aceste funcții. tmux oferă o modalitate mai elegantă și confortabilă de a naviga și accesa funcțiile, deși această nu este singura deosebire.
Capacitatea de a redenumi sesiunile și ferestrele în tmux, împreună cu păstrarea panourilor la reatașarea sesiunii, sunt aspecte importante.
Ecranul, în schimb, pierde panourile în întregime la detașarea și reatașarea sesiunilor, un aspect care poate deveni frustrant rapid.
tmux oferă o multitudine de opțiuni avansate, inclusiv capacități de scripting extrem de flexibile. Explorarea acestui instrument este, cu siguranță, un beneficiu.