15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
08.10.2024

Ghidul Complet al Comenzilor GNU Screen în Linux

GNU Screen este un multiplexor de terminal care vă permite să creați, să gestionați și să persistați mai multe sesiuni shell dintr-o singură fereastră de terminal. Când vă deconectați de la o sesiune Screen, fiecare proces care rulează în interiorul acesteia continuă să se execute — supraviețuind deconectărilor SSH, întreruperilor de rețea și închiderilor de terminal — și rămâne pe deplin accesibil în momentul în care vă reconectați.

Pentru oricine gestionează servere la distanță prin SSH, această singură capabilitate elimină o întreagă categorie de riscuri operaționale: o conexiune întreruptă nu mai oprește o migrare de baze de date în curs, un job de compilare de mai multe ore sau un proces de monitorizare a jurnalelor în timp real.

De ce GNU Screen rămâne relevant în administrarea modernă Linux

Instrumente precum tmux au câștigat popularitate, dar Screen este livrat ca pachet implicit sau aproape implicit pe practic orice distribuție Linux enterprise și imagine minimală de server. Când vă conectați prin SSH la o mașină bare-metal sau la o instanță VPS Hosting nou provizionată, Screen este aproape întotdeauna disponibil fără nicio instalare suplimentară. Amprenta sa redusă de memorie și conformitatea POSIX îl fac alegerea pragmatică în medii restrictive sau blocate.

Capabilități principale dintr-o privire:

  • Persistența sesiunii: Procesele supraviețuiesc deconectării terminalului, timeout-ului SSH și blocărilor pe partea clientului
  • Multiplexarea ferestrelor: Mai multe ferestre shell independente în cadrul unei singure sesiuni
  • Partajarea sesiunii: Doi utilizatori se pot conecta simultan la aceeași sesiune pentru depanare colaborativă
  • Acces la consola serială: Screen se poate conecta direct la dispozitive `/dev/ttyS*` pentru gestionarea out-of-band a serverului
  • Pornire scriptabilă: Fișierul de configurare `.screenrc` permite medii multi-fereastră complet automatizate la lansare

GNU Screen vs. tmux: Alegerea multiplexorului potrivit

Ambele instrumente rezolvă aceeași problemă de bază, dar cu filozofii de design diferite. Tabelul de mai jos acoperă distincțiile care contează în mediile de producție.

FuncționalitateGNU Screentmux
Disponibilitate implicităPre-instalat pe majoritatea distribuțiilorNecesită instalare explicită
Fișier de configurare`~/.screenrc``~/.tmux.conf`
Împărțirea panourilor (orizontal/vertical)Limitată (doar vertical prin regiuni)Împărțire completă și flexibilă a panourilor
Partajarea sesiuniiMulti-atașare nativăMulti-atașare nativă
Scripting / automatizareInjectare comenzi `screen -X``tmux send-keys`, API bogat
Amprentă de memorieFoarte redusăRedusă
Suport dispozitive serialeDa (`screen /dev/ttyS0`)Nu
Personalizarea barei de stareModerată (hardstatus)Foarte flexibilă
Modul de copiereStil viStil vi sau emacs
Ecosistem de plugin-uriNiciunulActiv (TPM)
Caz de utilizare idealServere minimale, console seriale, medii legacyStații de lucru pentru dezvoltatori, layout-uri complexe

Îndrumare practică: Pe un Server Dedicat headless care rulează job-uri de fundal pe termen lung, simplitatea și disponibilitatea universală a Screen îl fac alegerea cu mai puțină fricțiune. Pentru un dezvoltator care are nevoie de panouri împărțite și o bară de stare bogată, tmux câștigă.

Instalarea GNU Screen

Screen este pre-instalat pe majoritatea distribuțiilor. Verificați cu:

“`bash

screen –version

“`

Dacă lipsește, instalați-l folosind managerul de pachete corespunzător:

Debian / Ubuntu:

“`bash

sudo apt-get update && sudo apt-get install screen

“`

CentOS / RHEL 7:

“`bash

sudo yum install screen

“`

CentOS Stream / RHEL 8+ / AlmaLinux / Rocky Linux:

“`bash

sudo dnf install screen

“`

Fedora:

“`bash

sudo dnf install screen

“`

Arch Linux:

“`bash

sudo pacman -S screen

“`

Alpine Linux (frecvent în containere):

“`bash

apk add screen

“`

După instalare, nu este necesar niciun daemon sau serviciu. Screen funcționează în întregime ca un proces în spațiul utilizatorului.

Pornirea unei sesiuni Screen

Sesiune de bază

“`bash

screen

“`

Aceasta vă plasează într-o nouă sesiune cu un shell standard. Interfața este indistinctă față de un terminal normal până când utilizați prefixul de comandă al Screen.

Sesiune cu nume (Recomandat)

“`bash

screen -S session_name

“`

Denumiți întotdeauna sesiunile în producție. Sesiunile fără nume sunt identificate doar prin PID-ul lor, ceea ce face reatașarea predispusă la erori atunci când rulează mai multe sesiuni.

Sfat privind convenția de denumire: Folosiți nume descriptive care reflectă volumul de lucru — `screen -S db-migration`, `screen -S log-monitor`, `screen -S build-php82`. Acest lucru aduce beneficii când reveniți la un server după ore de absență.

Pornirea unei sesiuni și rularea imediată a unei comenzi

“`bash

screen -S backup-job bash -c 'rsync -avz /data/ user@remote:/backup/ && echo DONE'

“`

Sesiunea persistă chiar și după finalizarea comenzii, permițându-vă să inspectați rezultatul ulterior.

Pornirea unei sesiuni în modul detașat

“`bash

screen -dmS headless-job ./long_running_script.sh

“`

Flag-urile `-dm` creează sesiunea și o detașează imediat. Acesta este modelul corect pentru lansarea job-urilor de fundal din cron sau scripturi de deployment — procesul rulează în interiorul unei sesiuni Screen cu nume, recuperabilă, fără a necesita un terminal interactiv.

Prefixul de comandă: Înțelegerea Ctrl+A

Fiecare comandă rapidă de tastatură Screen începe cu secvența de escape `Ctrl+A`. Această apăsare de taste îi spune Screen că următorul caracter este o comandă, nu o intrare pentru programul care rulează. Înțelegerea acestui model este esențială înainte de a memora comenzile rapide individuale.

Dacă rulați un program în Screen care folosește el însuși `Ctrl+A` (de exemplu, unii editori de text sau biblioteca `readline`), puteți trimite un `Ctrl+A` literal programului interior apăsând `Ctrl+A` de două ori (`Ctrl+A, Ctrl+A`).

Detașarea și reatașarea sesiunilor

Detașarea de la o sesiune activă

“`

Ctrl+A, D

“`

Sesiunea continuă să ruleze în fundal. Sunteți returnat la shell-ul părinte. Niciun proces din interiorul sesiunii nu este întrerupt.

Listarea tuturor sesiunilor

“`bash

screen -ls

“`

Exemplu de rezultat:

“`

There are screens on:

14231.db-migration (Detached)

14089.log-monitor (Attached)

13901.build-php82 (Detached)

3 Sockets in /var/run/screen/S-deploy.

“`

Starea `Attached` înseamnă că un alt terminal este conectat în prezent la acea sesiune. `Detached` înseamnă că rulează, dar niciun terminal nu este conectat.

Reatașarea la o sesiune specifică

“`bash

screen -r db-migration

“`

Sau prin PID:

“`bash

screen -r 14231

“`

Atașarea forțată la o sesiune deja atașată

Dacă o sesiune afișează `Attached` dar trebuie să o preluați (de exemplu, după ce o conexiune SSH veche a lăsat-o blocată):

“`bash

screen -d -r log-monitor

“`

Flag-ul `-d` detașează forțat cealaltă conexiune înainte de a vă reatașa. Aceasta este o tehnică critică de recuperare când o sesiune SSH anterioară a murit fără a se detașa curat.

Multi-atașare: Doi utilizatori pe aceeași sesiune

“`bash

screen -x session_name

“`

Ambele terminale văd rezultate identice în timp real. Acest lucru este de neprețuit pentru depanarea în pereche sau pentru ghidarea unui coleg prin server — ambele părți observă și pot interacționa cu același shell.

Gestionarea ferestrelor în cadrul unei sesiuni

O singură sesiune Screen poate conține un număr nelimitat de ferestre. Fiecare fereastră este un shell independent (sau proces).

Crearea unei ferestre noi

“`

Ctrl+A, C

“`

Comandă rapidăAcțiune
`Ctrl+A, N`Fereastra următoare
`Ctrl+A, P`Fereastra anterioară
`Ctrl+A, 0–9`Salt direct la fereastră după număr
`Ctrl+A, "`Listă interactivă a tuturor ferestrelor
`Ctrl+A, '`Prompt pentru introducerea numărului sau numelui ferestrei

Redenumirea unei ferestre

“`

Ctrl+A, A

“`

Tastați noul nume și apăsați Enter. Numele semnificative ale ferestrelor sunt afișate în bara hardstatus, făcând navigarea mult mai rapidă în sesiunile cu multe ferestre.

Închiderea unei ferestre

Tastați `exit` sau apăsați `Ctrl+D` în shell-ul ferestrei. Când ultima fereastră dintr-o sesiune este închisă, sesiunea se termină.

Împărțirea ecranului în regiuni

Screen suportă împărțirea terminalului în mai multe regiuni vizibile, fiecare afișând simultan o fereastră diferită.

Împărțire orizontală (sus/jos)

“`

Ctrl+A, S

“`

Împărțire verticală (stânga/dreapta)

“`

Ctrl+A, |

“`

Notă: Împărțirea verticală necesită Screen 4.1.0 sau o versiune ulterioară.

Mutarea între regiuni

“`

Ctrl+A, Tab

“`

Atribuirea unei ferestre unei regiuni

După mutarea focusului într-o regiune, folosiți `Ctrl+A, "` pentru a selecta ce fereastră să afișați acolo.

Eliminarea unei regiuni

“`

Ctrl+A, X (remove current region)

Ctrl+A, Q (remove all regions except current)

“`

Distincție importantă: Eliminarea unei regiuni nu închide fereastra care rulează în interiorul ei. Fereastra continuă să ruleze; pur și simplu nu o mai afișați în acea împărțire.

Copiere și lipire (modul de derulare înapoi)

Screen menține un buffer de derulare înapoi pentru fiecare fereastră. Pentru a-l accesa:

“`

Ctrl+A, [

“`

Aceasta intră în modul de copiere. Navigarea folosește taste în stil vi:

  • `h`, `j`, `k`, `l` — mutare cursor
  • `Ctrl+F` / `Ctrl+B` — pagină înainte / înapoi
  • `/` — căutare înainte
  • `?` — căutare înapoi
  • `Space` — marcarea începutului selecției
  • `Space` (din nou) — marcarea sfârșitului și copierea în buffer

Pentru a lipi textul copiat:

“`

Ctrl+A, ]

“`

Buffer-ul implicit de derulare înapoi este de 100 de linii. Pentru monitorizarea jurnalelor de server, măriți semnificativ această valoare în `.screenrc` (tratat mai jos).

Blocarea unei sesiuni Screen

“`

Ctrl+A, X

“`

Sesiunea se blochează imediat și solicită parola utilizatorului Unix înainte de a permite accesul. Folosiți aceasta când vă îndepărtați de un terminal conectat la un server sensibil — este mai rapid decât închiderea conexiunii SSH și reatașarea.

Trimiterea comenzilor către o sesiune fără atașare

Flag-ul `-X` vă permite să injectați comenzi Screen într-o sesiune activă din exterior:

“`bash

screen -S db-migration -X stuff "tail -f /var/log/mysql/error.logn"

“`

Comanda `stuff` trimite apăsări de taste ferestrei active a sesiunii cu nume. `n` simulează apăsarea Enter. Această tehnică este folosită în scripturile de automatizare a deployment-ului pentru a interacționa cu sesiunile Screen de lungă durată fără a necesita atașarea umană.

Configurarea Screen cu .screenrc

Fișierul `~/.screenrc` este citit la pornire și controlează comportamentul implicit al Screen. Un `.screenrc` bine conceput transformă Screen dintr-un multiplexor de bază într-un mediu cu adevărat ergonomic.

Creați sau editați-l:

“`bash

nano ~/.screenrc

“`

Configurație .screenrc recomandată pentru producție

“`bash

Disable the startup message

startup_message off

Set scrollback buffer to 10,000 lines (critical for log monitoring)

defscrollback 10000

Enable UTF-8

defutf8 on

Set default shell

shell -$SHELL

Visual bell instead of audible

vbell on

Hardstatus bar: shows hostname, window list, and current time

hardstatus on

hardstatus alwayslastline

hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'

Bind F2 to create a new window

bindkey -k k2 screen

Change escape key to Ctrl+B (useful if Ctrl+A conflicts with other tools)

escape ^Bb

Auto-detach on hangup signal (critical for SSH session drops)

autodetach on

Disable flow control (prevents Ctrl+S from freezing the terminal)

defflow off

“`

Directiva `autodetach on` este obligatorie pentru utilizarea SSH. Fără ea, dacă conexiunea SSH cade neașteptat (în loc să apăsați `Ctrl+A, D`), Screen poate termina sesiunea în loc să o detașeze. Cu `autodetach on`, un semnal SIGHUP (trimis când SSH se deconectează) declanșează o detașare curată în loc de terminarea sesiunii.

`defflow off` previne frustrarea frecventă de a apăsa accidental `Ctrl+S` și a părea că terminalul s-a blocat. Mulți administratori pierd minute depanând un terminal „blocat” care se află pur și simplu în pauza de control al fluxului XON/XOFF.

Cazuri de utilizare practică în producție

Rularea în siguranță a unei migrări de baze de date

“`bash

screen -S db-migrate

Inside the session:

php artisan migrate –force 2>&1 | tee /var/log/migration-$(date +%F).log

Detach: Ctrl+A, D

Reattach later to check progress:

screen -r db-migrate

“`

Dacă conexiunea SSH cade în mijlocul migrării, procesul continuă. Vă reatașați și îl găsiți fie încă în execuție, fie finalizat cu rezultatul complet păstrat în jurnal și în buffer-ul de derulare înapoi.

Monitorizarea simultană a mai multor fișiere jurnal

“`bash

screen -S monitoring

Window 0: nginx access log

tail -f /var/log/nginx/access.log

Ctrl+A, C — new window

Window 1: application error log

tail -f /var/log/app/error.log

Ctrl+A, C — new window

Window 2: system messages

journalctl -f

“`

Navigați între ferestre cu `Ctrl+A, "` pentru a vedea care jurnal generează activitate.

Script de deployment automatizat cu Screen

“`bash

#!/bin/bash

screen -dmS deploy bash -c '

git pull origin main &&

composer install –no-dev &&

php artisan config:cache &&

systemctl reload php8.2-fpm &&

echo "Deployment complete at $(date)" >> /var/log/deploy.log

'

echo "Deployment started in background screen session 'deploy'"

echo "Monitor with: screen -r deploy"

“`

Acest model este deosebit de util pe un VPS cu cPanel unde puteți gestiona mai multe deployment-uri de aplicații dintr-un singur shell administrativ.

Acces la consola serială

“`bash

screen /dev/ttyS0 115200

“`

Screen funcționează și ca emulator de terminal serial. Aceasta este tehnica standard pentru accesarea consolei unui server fizic, switch de rețea sau dispozitiv embedded printr-o conexiune serială — fără a necesita minicom sau picocom.

Capcane frecvente și cum să le evitați

Sesiuni Screen imbricate: Dacă vă conectați prin SSH dintr-o sesiune Screen pe Mașina A la Mașina B și porniți Screen acolo, aveți acum două straturi de gestionare `Ctrl+A`. Sesiunea Screen interioară captează `Ctrl+A` înainte ca cea exterioară să îl vadă. Pentru a trimite `Ctrl+A` sesiunii exterioare, apăsați `Ctrl+A, Ctrl+A`. Pentru a evita confuzia, schimbați tasta de escape a sesiunii interioare în `.screenrc` folosind `escape ^Bb`.

Sesiunile moarte nu se curăță: Dacă Screen se blochează sau gazda repornește necurat, fișierele socket pot persista în `/var/run/screen/` sau `~/.screen/`, afișând sesiunile ca `Dead`. Curățați-le cu:

“`bash

screen -wipe

“`

Sesiune deținută de root vs. utilizator: O sesiune Screen pornită ca root nu poate fi reatașată de un utilizator non-root și invers. Dacă folosiți `sudo su` în interiorul unei sesiuni Screen și apoi vă detașați, reatașați ca root sau prin `sudo screen -r`.

Nepotrivire variabilă `TERM`: Unele aplicații din interiorul Screen se comportă incorect deoarece `TERM` este setat la `screen` sau `screen-256color` în loc de `xterm-256color`. Dacă o aplicație TUI se redă incorect, verificați cu `echo $TERM` și suprascrieți în `.screenrc` cu `term xterm-256color` dacă este necesar.

Epuizarea buffer-ului de derulare înapoi: Buffer-ul implicit de 100 de linii este inadecvat pentru orice monitorizare serioasă a jurnalelor. Setați întotdeauna `defscrollback 10000` sau mai mult în `.screenrc` pe serverele folosite pentru administrare activă.

Referință rapidă: Comenzi esențiale Screen

AcțiuneComandă / Comandă rapidă
Pornire sesiune nouă`screen`
Pornire sesiune cu nume`screen -S name`
Pornire sesiune detașată`screen -dmS name`
Listare sesiuni`screen -ls`
Reatașare după nume`screen -r name`
Reatașare forțată`screen -d -r name`
Multi-atașare`screen -x name`
Detașare`Ctrl+A, D`
Fereastră nouă`Ctrl+A, C`
Fereastra următoare`Ctrl+A, N`
Fereastra anterioară`Ctrl+A, P`
Listă ferestre`Ctrl+A, "`
Redenumire fereastră`Ctrl+A, A`
Împărțire orizontală`Ctrl+A, S`
Împărțire verticală`Ctrl+A,`
Mutare între regiuni`Ctrl+A, Tab`
Intrare în modul copiere/derulare`Ctrl+A, [`
Lipire buffer`Ctrl+A, ]`
Blocare sesiune`Ctrl+A, X`
Închidere fereastră curentă`Ctrl+A, K`
Închidere sesiune întreagă`Ctrl+A, `
Trimitere comandă către sesiune`screen -S name -X stuff "cmdn"`
Curățare sesiuni moarte`screen -wipe`

Context de deployment: Screen în medii de hosting gestionat

Screen funcționează la nivel de shell, făcându-l compatibil cu orice mediu Linux unde aveți acces SSH. Aceasta include servere bare-metal, Servere Dedicate și instanțe standard de VPS Hosting. Nu este disponibil în mediile de hosting partajat unde accesul SSH este restricționat sau absent.

Pentru volumele de lucru care implică procesare de fundal persistentă — cum ar fi inferența de modele accelerată GPU, preprocesarea seturilor mari de date sau job-urile batch de lungă durată — combinarea Screen cu un mediu de GPU Hosting vă oferă atât resursele computaționale, cât și persistența sesiunii necesară pentru a gestiona fiabil job-uri de mai multe ore.

Dacă infrastructura dvs. include servicii web alături de procesarea de fundal, asocierea job-urilor backend gestionate prin Screen cu Certificate SSL corect securizate pe endpoint-urile publice asigură că întregul stack — atât stratul de aplicație vizibil, cât și backend-ul administrativ — funcționează cu controale de securitate adecvate.

Matrice de decizie: Când să folosiți Screen

Folosiți Screen când:

  • Aveți nevoie de persistența sesiunii pe un server unde este disponibil doar Screen
  • Accesați o consolă serială sau un dispozitiv embedded
  • Rulați un singur proces de lungă durată și nu aveți nevoie de panouri împărțite
  • Vă aflați pe un sistem minimal bazat pe Alpine sau BusyBox
  • Trebuie să partajați o sesiune cu un alt administrator în timp real

Luați în considerare tmux în schimb când:

  • Aveți nevoie de împărțire flexibilă orizontală și verticală a panourilor
  • Doriți un ecosistem de plugin-uri pentru îmbunătățiri ale barei de stare
  • Construiți un mediu de stație de lucru pentru dezvoltatori cu layout-uri complexe
  • Echipa dvs. a standardizat gestionarea configurației tmux

Nu folosiți niciunul (folosiți systemd sau supervisor în schimb) când:

  • Scopul este pur și simplu să rulați un serviciu de fundal care să supraviețuiască repornirilor
  • Nu aveți nevoie de acces interactiv la procesul care rulează
  • Procesul ar trebui să repornească automat la eșec

Listă de verificare tehnică a punctelor cheie

Înainte de a vă baza pe Screen într-un mediu de producție, verificați următoarele:

  • `autodetach on` este prezent în `~/.screenrc` — fără el, căderile SSH pot ucide sesiunile
  • `defscrollback` este setat la cel puțin 5000 de linii pentru volumele de lucru cu multe jurnale
  • `defflow off` este setat pentru a preveni blocările accidentale `Ctrl+S`
  • Toate sesiunile de lungă durată sunt denumite (`-S flag`) — nu vă bazați niciodată pe identificarea doar prin PID
  • Cunoașteți comanda de recuperare `screen -d -r` pentru sesiunile atașate vechi
  • Socket-urile sesiunilor moarte sunt curățate periodic cu `screen -wipe`
  • Dacă rulați ca mai mulți utilizatori, înțelegeți limita de proprietate a sesiunii root/utilizator
  • Variabila `TERM` este verificată dacă aplicațiile TUI se redau incorect în interiorul Screen
  • Pentru job-urile de fundal complet automatizate, se folosește `screen -dmS` în loc de `nohup` sau `&` simplu, oferindu-vă o sesiune recuperabilă și inspecta bilă

Întrebări frecvente

GNU Screen supraviețuiește unei reporniri a serverului?

Nu. Sesiunile Screen sunt păstrate în memorie ca procese. O repornire completă a serverului termină toate sesiunile Screen și procesele lor copil. Pentru procesele care trebuie să supraviețuiască repornirilor, folosiți unități systemd sau un supervizor de procese precum Supervisor. Screen este instrumentul corect pentru persistența interactivă în cazul deconectărilor, nu al repornirilor.

Care este diferența dintre `screen -r` și `screen -x`?

`screen -r` se reatașează la o sesiune detașată — eșuează dacă sesiunea este deja atașată în altă parte. `screen -x` se atașează la o sesiune indiferent de starea sa curentă de atașare, permițând a două terminale să partajeze aceeași sesiune simultan. Folosiți `-x` pentru depanare colaborativă; folosiți `-r` pentru reatașarea standard.

Cum derulați în sus în interiorul unei ferestre Screen?

Intrați în modul de copiere cu `Ctrl+A, [`, apoi folosiți tastele săgeată, `Page Up`/`Page Down`, sau navigarea în stil vi (`Ctrl+F`, `Ctrl+B`). Apăsați `Escape` sau `q` pentru a ieși din modul de copiere. Asigurați-vă că `defscrollback` în `.screenrc` este setat suficient de mare pentru a păstra istoricul de care aveți nevoie.

Poate Screen fi folosit fără privilegii root?

Da. Screen rulează în întregime ca utilizatorul care îl invocă. Nu sunt necesare privilegii root pentru a crea, atașa sau gestiona sesiuni. Fișierele socket sunt stocate într-un director per utilizator (de obicei `/var/run/screen/S-username/`). Singura excepție este dacă Screen nu este instalat — instalarea necesită acces la managerul de pachete, care necesită de obicei root sau sudo.

De ce sesiunea mea Screen afișează „Attached” când nimeni nu este conectat?

Acest lucru se întâmplă de obicei când o conexiune SSH a căzut fără a trimite un SIGHUP curat — de exemplu, din cauza unui timeout de rețea mai degrabă decât a unei deconectări explicite. Sesiunea își păstrează starea `Attached` deoarece Screen nu a primit niciodată semnalul de deconectare. Folosiți `screen -d -r session_name` pentru a detașa forțat conexiunea fantomă și a vă reatașa curat.

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți