Terminalni multiplekseri poput tmux
-a i screen
-a omogućavaju korisnicima da upravljaju sa više terminala unutar jednog prozora. Popularnost tmux
-a je značajna, pa je korisno istražiti prednosti i nedostatke u odnosu na stariji screen
. Da li je tmux
zaista superioran ili je to samo stvar navike?
Poređenje tmux
i screen
I tmux
i screen
su terminalni multiplekseri koji dozvoljavaju kreiranje više prozora unutar jedne sesije terminala. Korisnik može lako prelaziti između ovih prozora, a svaki prozor se može podeliti na manje panele, pružajući nezavisne komandne linije.
Osim toga, sesija se može odvojiti (detach) i nastaviti da radi u pozadini, čak i kada se terminalni prozor koji ju je pokrenuo zatvori. Kada je potrebno, korisnik može ponovo priključiti (attach) sesiju iz novog terminalnog prozora, čak i preko SSH veze. Ovo omogućava prekidanje rada na jednom računaru, nastavak na drugom, uz očuvanje svih pokrenutih procesa i stanja.
Na primer, korisnik može pokrenuti sesiju na jednom računaru, odvojiti je, otići kući, prijaviti se na udaljeni računar, ponovo priključiti sesiju i nastaviti sa radom.
Šta je komanda screen
?
Komanda screen
je, takođe, terminalni multiplekser, sa velikim brojem opcija. Za detaljan opis mogućnosti, pogledajte relevantne članke. U ovom tekstu fokusiramo se na tmux
, uz napomene o sličnostima i razlikama u funkcionisanju sa screen
-om.
Postoji jedna stvar koja je iritirala korisnike kod screen
-a, a koju ćemo objasniti kada dođemo do toga i videti da li tmux
nudi bolje rešenje.
Instalacija tmux
-a
Dok je screen
često predinstaliran na popularnim Linux distribucijama, tmux
nije. Za instalaciju tmux
-a na Ubuntu, unesite sledeću komandu:
sudo apt-get install tmux
Na Manjaru se koristi pacman
:
sudo pacman -Sy tmux
Na Fedora 31, tmux
je već instaliran.
Pokretanje tmux
sesije
Za pokretanje tmux
-a, jednostavno unesite tmux
i pritisnite Enter:
tmux
Unutar tmux
sesije, na dnu terminalnog prozora se pojavljuje statusna traka.
Desna strana statusne trake prikazuje ime hosta, vreme i datum. Leva strana prikazuje informacije o sesiji:
[0]: Ovo je naziv sesije. Podrazumevano, sesije su numerisane počevši od nule. U nastavku ćemo objasniti kako davati smislena imena sesijama.
0:bash*: 0 označava da je ovo prvi prozor u sesiji. Jedini proces koji se trenutno izvršava je bash
. Ako pokrenete program, njegovo ime će se pojaviti ovde. Zvezdica (*) označava da je ovo prozor koji je trenutno aktivan. Svaki put kada se kreira novi prozor u tmux
sesiji, njegov broj prozora i ime programa koji se izvršava se dodaju u statusnu traku.
Screen
ne nudi statusnu traku, što znači da korisnik mora da prati otvorene prozore i procese koristeći pamćenje i iskustvo. S druge strane, screen
ne zauzima dodatni prostor na terminalu. Međutim, kada se koristi terminalni multiplekser, obično se koristi veći prozor terminala, pa gubitak jedne linije za statusnu traku nije veliki problem. Slike terminalnih prozora ovde su u podrazumevanoj veličini radi prikaza informacija.
Komande se tmux
-u šalju kombinacijom tastera. Prvo se pritisne Ctrl+B kako bi se aktivirao tmux
. Zatim se brzo pritisne sledeći taster za izvršenje komande. Komande se mogu zadavati pomoću slova, brojeva, interpunkcijskih znakova i strelica.
Isti princip važi i za screen
, osim što se Ctrl+A koristi za aktiviranje.
Za zatvaranje prozora, pritisnite Ctrl+B, a zatim brzo X. Statusna traka postaje žuta. Tada se traži potvrda zatvaranja prozora.
Pritisnite Y za zatvaranje ili N ako ste se predomislili. Nije potrebno pritiskati Enter nakon toga, Y ili N su dovoljni za registraciju izbora.
Ako pritisnete Y, prozor se zatvara. Pošto je ovo bio jedini prozor u sesiji, sesija se prekida i vraćate se na komandnu liniju sa koje je pokrenut tmux
. Videćete poruku „[exited]“ u prozoru terminala.
Potvrda da je sesija zatvorena
Ovo možda izgleda očigledno, ali ovo je potvrda da je sesija zatvorena i da nije ostavljena odvojena i da radi u pozadini. U nastavku ćemo govoriti o odvojenim sesijama.
Pokretanje imenovane tmux
sesije
Ako redovno pokrećete više tmux
sesija, biće vam korisno da svakoj dodelite smisleno ime. Screen
takođe omogućava imenovanje sesija, ali se ta imena ne prikazuju nigde u prozorima sesije.
tmux new -s geek-1
Za pokretanje tmux
sesije sa imenom, koristi se komanda new
(nova sesija) i opcija -s
(ime sesije). Sesija se naziva „geek-1“.
tmux
sesija sa imenom
Dodavanje više prozora: Da biste kreirali novi prozor u trenutnoj sesiji, pritisnite Ctrl+B, a zatim C. Dobit ćete prazan terminalski prozor u trenutnoj sesiji. Da bi bilo nešto što radi u ovom novom prozoru, pokrenimo dmesg
komandu:
dmesg -w
sa opcijom -w
(follow):
Sada imamo dva prozora u sesiji; jedan sa procesom top
, a drugi sa dmesg
. Međutim, možemo videti samo jedan po jedan (više o tome za trenutak).
Pogledajte levu stranu statusne trake. Još smo u „geek-1“ tmux
sesiji. U nultom prozoru je pokrenut top
, a u prozoru jedan je pokrenut dmesg
. Zvezdica (*) pored dmesg
označava koji prozor je trenutno vidljiv.
Za prelazak između prozora, pritisnite Ctrl+B, a zatim jedan od sledećih tastera:
N: Prikazuje sledeći prozor.
P: Prikazuje prethodni prozor.
0 do 9: Prikazuje prozor sa odgovarajućim brojem.
Takođe možete izabrati prozor sa liste. Ako pritisnete Ctrl+B, a zatim W, pojavljuje se lista prozora.
Za kretanje kroz listu prozora, koristite strelice gore i dole, Home ili End. Donji deo ekrana prikazuje pregled sadržaja u izabranom prozoru.
Pritisnite Enter za prelazak na izabrani prozor ili Esc za izlaz sa liste prozora bez promene aktivnog prozora.
Odvajanje i priključivanje sesija
Ako pritisnete Ctrl+B, a zatim D, odvojićete sesiju. Ona će nastaviti da radi u pozadini, ali nećete moći da je vidite ili koristite.
Počeli smo sa top
procesom u sesiji, pa imamo proces koji radi za demonstraciju. Zatim pritisnemo Ctrl+B, a zatim D. Sesija nestaje i postaje pozadinska sesija.
Vraćamo se na originalni terminalski prozor. Postoji poruka od tmux
-a koja obaveštava da je sesija odvojena. Takođe nas podseća na ime koje smo dali sesiji. Ovo je korisno jer se ovo ime koristi za ponovno priključivanje sesije.
tmux attach-session -t geek-1
Za priključivanje odvojene sesije, koristimo komandu attach-session
sa opcijom -t
(ciljna sesija). Takođe, koristimo ime sesije koju želimo da vratimo.
Unosimo sledeću komandu:
Sesija se vraća i ponovo postaje vidljiva i interaktivna.
Svi dugotrajni ili kontinualni procesi koji su pokrenuti pre odvajanja sesije će nastaviti da rade u pozadini (osim ako nisu završeni) kada se sesija ponovo priključi.
Screen
može da uradi istu stvar, ali ne tako intuitivno.
tmux new -s geek-2
Upravljanje sa više sesija
dmesg -w
Otvorimo drugi prozor terminala i pokrenimo novu tmux
sesiju pod nazivom „geek-2“:
U toj sesiji ćemo pokrenuti dmesg
:
Sada imamo originalnu „geek-1“ tmux
sesiju i novu pod nazivom „geek-2“.
Statusna traka pokazuje da se sesija zove „geek-2“ i da ima jedan prozor sa pokrenutim dmesg
.
Ako pritisnemo Ctrl+B, a zatim D, odvajamo tu sesiju.
Nazad u „geek-1“ tmux
sesiji, pritisnemo Ctrl+B, a zatim S da vidimo listu tmux
sesija.
Da budemo jasni, ovo je lista sesija. Sličan prikaz koji smo videli ranije je bila lista prozora unutar jedne sesije.
Za pomeranje žute trake koristite strelice gore i dole, Home i End. Donji deo prikazuje pregled sadržaja u izabranoj sesiji.
Ako pritisnete strelicu udesno, prikazuju se prozori izabrane sesije.
Pritisnite Enter da biste prešli na izabranu sesiju ili prozor, ili Esc za izlaz iz liste sesija bez promene sesija. Ako izaberete novu sesiju, trenutna sesija se odvaja, a izabrana se priključuje.
Odvojili smo sesiju „geek-2“ pre ovoga. Međutim, isto možete uraditi i sa sesijama koje su još uvek povezane sa svojim originalnim terminalskim prozorima. Kada to uradite, sve promene na ekranu će se pojaviti istovremeno u obe tmux
sesije.
Komanda screen
takođe ima ovu mogućnost, uz sličan set komandi.
Rad sa prozorima
Ako pritisnete Ctrl+B, a zatim dvostruke navodnike („), prozor će se horizontalno podeliti na dva panela.
Ovo utiče samo na trenutni prozor; ostali prozori u sesiji se neće menjati. Koristili smo komandu tmux ls
u gornjem oknu da nabrojimo prozore u ovoj sesiji. Ima ih dva, a statusna linija nam pokazuje da smo u prozoru broj jedan. Ako pređemo na nulti prozor pritiskom na Ctrl+B, a zatim 0 (nula), videćemo da je on isti kao što smo ga ostavili.
Ovo su dve nezavisne komandne linije, a ne dva pogleda u jednom prozoru; one su različite i odvojene shell sesije. Ovo možemo dokazati pokretanjem različite komande u svakom panelu.
Unosimo:
uname -a
ls -hl
Za prelazak iz jednog panela u drugi, pritisnite Ctrl+B, a zatim strelicu gore, dole, levo ili desno.
Ako pritisnete Ctrl+B, a zatim znak procenta (%), trenutni panel se deli vertikalno.
Pritisnite Ctrl+B, a zatim Q da bi tmux
nakratko prikazao broj svakog panela.
Ovi brojevi se koriste u upitima i porukama od tmux
-a. Pritisnite Ctrl+B, a zatim X da biste zatvorili trenutni panel. Statusna traka se menja u žutu i od vas se traži da potvrdite da želite da zatvorite panel. Pritisnite Y da biste uklonili panel ili N da biste ostavili stvari kakve jesu.
Ako pritisnete Y, panel se uklanja.
Komanda screen
takođe ima panele, ali su manje intuitivni za korišćenje. Jedna od stvari koja iritira korisnike kod screen
-a je da ako odvojite sesiju sa panelima, oni nestaju kada se sesija ponovo priključi. Ovo je za mnoge korisnike veliki problem.
Podsetnik za Ctrl+B komande
U nastavku je lista nekih od komandi koje možete koristiti u tmux
-u:
Komande sesije
S: Lista sesija.
$: Promenite ime trenutne sesije.
D: Odvojite trenutnu sesiju.
Ctrl+B, a zatim ?: Prikažite stranicu pomoći u tmux
-u.
Komande prozora
C: Napravite novi prozor.
,: Promenite ime trenutnog prozora.
W: Lista prozora.
N: Prelazak na sledeći prozor.
P: Prelazak na prethodni prozor.
0 do 9: Prelazak na prozor sa zadatim brojem.
Komande panela
%: Horizontalna podela panela.
„: Vertikalna podela panela.
H ili strelica nalevo: Prelazak na panel levo.
L ili strelica udesno: Prelazak na panel desno.
J ili strelica nadole: Prelazak na panel ispod.
K ili strelica nagore: Prelazak na panel iznad.
Q: Prikaz brojeva panela.
O: Prelazak na sledeći panel.
}: Zamena pozicije trenutnog panela sa sledećim.
{: Zamena pozicije trenutnog panela sa prethodnim.
X: Zatvaranje trenutnog panela.
Poređenje
Što se tiče funkcionalnosti, screen
i tmux
su slični i nude iste osnovne karakteristike. Međutim, načini pristupa tim funkcijama su značajno različiti. tmux
nudi elegantnije i udobnije načine za korišćenje različitih funkcija, što je velika prednost.
Mogućnost promene imena sesija i prozora u tmux
-u je korisna, a činjenica da tmux
zadržava panele kada se sesija ponovo priključi je velika prednost.
Sa druge strane, screen
potpuno gubi panele kada se sesija odvoji i ponovo priključi. Ovo može biti dovoljno iritantno da se izbegava odvajanje sesija.
tmux
nudi mnogo više, uključujući i veoma fleksibilne mogućnosti skriptovanja. Vredi ga detaljnije istražiti.