Explorarea puterii comenzii „screen” în Linux
Comanda „screen” din Linux vă permite să gestionați aplicațiile terminalului care rulează în fundal, readucându-le în prim-plan când este necesar. Aceasta facilitează și utilizarea ecranelor divizate și este eficientă prin conexiuni SSH, inclusiv în situații de deconectare și reconectare.
Ce reprezintă comanda „screen”?
Comanda „screen” este un multiplicator de terminal, oferind o multitudine de funcționalități. Complexitatea sa este remarcabilă, manualul său depășind 4100 de linii.
Iată câteva scenarii comune în care comanda „screen” se dovedește utilă, pe care le vom explora în acest articol:
- Metoda standard implică inițierea unei noi ferestre cu un shell, executarea unei comenzi și mutarea ferestrei în fundal („detașare”). Când doriți să verificați progresul, puteți aduce fereastra înapoi în prim-plan („reatașare”). Această metodă este ideală pentru procesele de lungă durată, evitând închiderea accidentală a ferestrei terminalului.
- Odată ce o sesiune „screen” este activă, puteți genera ferestre suplimentare și executa procese diferite în fiecare. Navigarea între aceste ferestre pentru monitorizare este simplă. Mai mult, aveți opțiunea de a diviza fereastra terminalului în regiuni verticale sau orizontale, prezentând mai multe ferestre „screen” într-un singur ecran.
- Prin intermediul unei conexiuni la distanță, puteți iniția o sesiune „screen” și un proces. Deconectarea de la sistemul gazdă și reconectarea ulterioară nu vor opri procesul inițiat.
- O sesiune „screen” poate fi partajată între două conexiuni SSH diferite, permițând colaborarea în timp real între doi utilizatori.
Instalarea „screen”
Pentru instalarea „screen” pe Ubuntu, introduceți următoarea comandă:
sudo apt-get install screen
Pe Manjaro, folosiți comanda:
sudo pacman -Sy screen
Pentru Fedora, introduceți:
sudo dnf install screen
Primii pași cu „screen”
Pentru a lansa „screen”, introduceți comanda:
screen
Veți vedea o pagină cu informații despre licență. Apăsați bara de spațiu pentru a citi a doua pagină sau tasta Enter pentru a reveni la promptul de comandă.
Deși pare că nu s-a întâmplat nimic special, acum aveți un shell activ în interiorul unui emulator de terminal multiplexat. Pentru a demonstra avantajul, inițiem un proces de lungă durată, descărcând codul sursă al celei mai recente versiuni a nucleului Linux într-un fișier numit `latest_kernel.zip`.
Pentru aceasta, introduceți:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Descărcarea începe, iar rezultatul comenzii `curl` afișează progresul.
Urmează o secvență de taste: apăsați `Ctrl+A`, eliberați tastele și apoi apăsați `d` pentru a detașa ecranul.
Deși procesul de descărcare continuă să ruleze, fereastra care afișa descărcarea este eliminată. V-ați întors la fereastra terminalului originală. Un mesaj vă informează că o fereastră „screen” cu numele `23167.pts-0.wdzwdz` a fost detașată.
Pentru a reatașa fereastra, aveți nevoie de numărul de la începutul numelui. Dacă l-ați uitat, folosiți opțiunea `-ls` pentru a lista ferestrele detașate:
screen -ls
Când sunteți gata, folosiți opțiunea `-r` (reatașare) și numărul sesiunii:
screen -r 23167
Fereastra care funcționa în fundal este readusă în fereastra terminalului, de parcă nu ar fi fost niciodată detașată.
Dacă este un proces finit, se va finaliza. Dacă este continuu, va trebui să îl încheiați. Când procesul se încheie, puteți tasta `exit` pentru a ieși din „screen”. Alternativ, puteți apăsa `Ctrl+A` și apoi `K` pentru a forța închiderea unei ferestre.
Introduceți:
exit
V-ați întors la fereastra terminalului anterioară, care va afișa comanda folosită pentru reatașare. Deoarece am închis singura fereastră detașată, ecranul se va închide.
Utilizarea sesiunilor „screen” denumite
Opțiunea `-S` (numele sesiunii) vă permite să dați un nume sesiunii „screen”. Un nume memorabil este mai facil de utilizat decât identificatorul numeric. Vom denumi sesiunea noastră „bigfile”:
screen -S bigfile
Odată lansată, vedem o fereastră goală cu un prompt. Vom descărca un fișier mare, folosind un proces de lungă durată ca exemplu.
Introduceți:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
După ce descărcarea începe, apăsați `Ctrl+A`, apoi `D` pentru a detașa sesiunea. Folosim opțiunea `-ls` pentru a vedea detaliile sesiunii:
screen -ls
În spatele identificatorului numeric (23266), vedem numele sesiunii noastre (bigfile). Folosim numele sesiunii pentru a reatașa:
screen -r bigfile
Ne-am reconectat la fereastra noastră de descărcare și vedem că aceasta continuă.
După ce descărcarea se încheie, introducem `exit` pentru a închide sesiunea.
Utilizarea „screen” cu mai multe ferestre
Până acum, am folosit „screen” pentru a muta un singur proces în fundal într-o fereastră detașată. Dar, capacitățile comenzii „screen” sunt mult mai extinse. Vom rula câteva procese care ne permit monitorizarea diferitelor aspecte ale sistemului.
Pentru a iniția o sesiune „screen” denumită „monitor”, introducem:
screen -S monitor
La promptul noii sesiuni, vom lansa `dmesg` cu opțiunile `-H` (lizibil) și `-w` (așteaptă mesaje noi) pentru a afișa mesajele din bufferul nucleului, inclusiv cele noi care apar.
Introduceți:
dmesg -H -w
Mesajele existente sunt afișate. Nu ne vom întoarce la promptul de comandă, deoarece `dmesg` așteaptă mesaje noi.
Pentru a lansa o altă aplicație, avem nevoie de o nouă fereastră „screen”. Apăsăm `Ctrl+A`, apoi `C` pentru a crea una. Apoi, vom folosi `watch` pentru a rula în mod repetat `vmstat`, obținând actualizări frecvente ale utilizării memoriei virtuale.
La noul prompt, introduceți:
watch vmstat
Rezultatul comenzii `vmstat` apare, actualizându-se la fiecare două secunde.
Cele două procese rulează acum. Pentru a comuta între ferestrele „screen”, apăsați `Ctrl+A` și numărul ferestrei. Prima creată este fereastra zero (0), următoarea este fereastra 1 și așa mai departe. Apăsăm `Ctrl+A` și `0` pentru a comuta la prima fereastră (cea cu `dmesg`).
Apăsând `Ctrl+A` și `1`, ne întoarcem la fereastra cu `vmstat`.
Este ingenios! Putem apăsa `Ctrl+A`, apoi `D` pentru a detașa sesiunea și o putem reatașa mai târziu. Ambele sesiuni vor continua. Reamintim că pentru a comuta între ferestre, apăsați `Ctrl+A` și numărul (0 sau 1) al ferestrei dorite.
Să avansăm și să vizualizăm ambele ecrane într-o singură fereastră. În acest caz, este util să extindeți fereastra terminalului. Exemplele noastre sunt limitate de dimensiunea capturilor de ecran, astfel că ferestrele noastre vor părea puțin înghesuite.
Pentru a diviza ecranul, apăsați `Ctrl+A`, apoi `Shift+S` (este nevoie de „S” majusculă).
Fereastra se va împărți în două regiuni.
Regiunea de sus afișează `vmstat`, iar regiunea de jos este goală. Cursorul este evidențiat în imaginea de mai jos. Pentru a-l muta în regiunea inferioară, apăsăm `Ctrl+A`, apoi `Tab`.
Cursorul ajunge în regiunea inferioară, care este un spațiu gol. Nu este un shell, deci nu putem introduce nimic direct în el. Pentru a vizualiza un ecran, apăsăm `Ctrl+A`, apoi „0” pentru a afișa fereastra cu `dmesg` în această regiune.
Acum, avem ambele ieșiri live într-o singură fereastră divizată. Dacă apăsăm `Ctrl+A` și `D` pentru a detașa fereastra și o reatașăm, vom pierde vizualizarea divizată. Cu toate acestea, o putem restabili cu aceste comenzi rapide:
- `Ctrl+A, S`: Împarte fereastra orizontal.
- `Ctrl+A, Tab`: Mutați în regiunea inferioară.
- `Ctrl+A, 0`: Afișează fereastra zero în regiunea inferioară.
Putem avansa și mai mult. Acum, vom împărți panoul inferior vertical și vom adăuga un al treilea proces pe ecran. Cu cursorul în regiunea inferioară, apăsăm `Ctrl+A` și `C` pentru a crea o nouă fereastră. Regiunea inferioară afișează noua fereastră și ne oferă un prompt.
Apoi, rulăm `df` pentru a verifica utilizarea sistemului de fișiere:
df
Când vedem `df` rulând, apăsăm `Ctrl+A` și caracterul pipe (`|`). Aceasta împarte vertical regiunea inferioară. Apăsăm `Ctrl+A` și `Tab` pentru a trece la noua regiune. Apoi, apăsăm `Ctrl+A` și `0` pentru a afișa fereastra `dmesg`.
Puteți naviga între regiuni și adăuga mai multe diviziuni verticale sau orizontale. Iată câteva comenzi rapide:
- `Ctrl+A, Tab`: Săriți între regiunea actuală și cea anterioară.
- `Ctrl+A, Q`: Închideți toate regiunile, cu excepția celei curente.
- `Ctrl+A, X`: Închideți regiunea curentă.
Utilizarea „screen” prin SSH
Cu „screen”, puteți iniția o sesiune, detașați-o pentru a rula în fundal, deconectați-vă, reconectați-vă și relua sesiunea.
Să inițiem o conexiune SSH către computerul nostru de la altul. Trebuie să introducem numele contului și adresa computerului de la distanță.
În exemplul nostru, folosim:
ssh [email protected]
După autentificarea pe sistemul de la distanță, lansăm o sesiune „screen” numită „ssh-geek”:
screen -S ssh-geek
Pentru demonstrație, vom rula comanda `top` în fereastra „screen”, dar puteți alege orice proces de lungă durată.
Introduceți:
top
<img src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoYAAAA5CAIAAAAk632nAAALoklEQVR42u3ceVRTVwLH8ZeNhDULhn1RkE1ZDUIKsoWs7CCLrRWtiBRKsWrdaF2qQB0EVEpBsKgsskQ7Yxnn2E5XbXtqHW21naIy1NFqdah/98y/c28CIQwS4VhapvN75/OH8PJe8vI855t33w0MgwULFixYsGCZI4tKrQMAAIBZ8u9pLEgyzJbhkYdTwZsDAEgykgxIMgAAkgxIMpIMAP/3Sf75558vXb58+sw7xN+uXCE/TiPJJa6Mnm