Toate ghidurile

Terminalul Linux: comenzile pe care le folosești zilnic

Comenzile Linux esențiale pentru programatori: navigare, fișiere, căutare, pipe-uri, permisiuni, procese, rețea și primul script bash.


Terminalul pare intimidant la început: un ecran negru, fără butoane, în care o comandă greșită poate șterge fișiere. În realitate, majoritatea programatorilor folosesc zilnic doar câteva zeci de comenzi, iar după ce le stăpânești, multe sarcini devin mai rapide decât în orice interfață grafică. Ghidul acesta adună comenzile esențiale, grupate după situațiile în care chiar le vei folosi.

Terminal, shell și cum începi

Terminalul este fereastra în care scrii comenzi. Shell-ul este programul care le interpretează și le execută. Pe majoritatea distribuțiilor Linux, shell-ul implicit este bash, iar pe macOS este zsh. Comenzile din acest ghid funcționează la fel în ambele.

Dacă lucrezi pe Windows, cea mai simplă cale de a avea un mediu Linux real este WSL (Windows Subsystem for Linux). Deschide PowerShell ca administrator și rulează:

wsl --install

După repornire, vei avea o distribuție Ubuntu pe care o deschizi din meniul Start sau din Windows Terminal.

Când deschizi terminalul, vezi un prompt, de obicei ceva de forma ana@laptop:~$. Acesta îți arată utilizatorul, numele calculatorului și directorul curent (~ înseamnă directorul tău personal, de exemplu /home/ana).

Navigarea prin fișiere

pwd                  # afișează directorul curent
ls                   # listează conținutul directorului
ls -la               # listă detaliată, inclusiv fișierele ascunse
cd proiecte/site     # intră într-un director (cale relativă)
cd /var/log          # intră într-un director (cale absolută)
cd ..                # urcă un nivel
cd ~                 # mergi în directorul personal (la fel ca simplu cd)
cd -                 # revino în directorul anterior

Fișierele și directoarele al căror nume începe cu punct (de exemplu .git sau .env) sunt ascunse și apar doar cu ls -a.

Două obiceiuri care îți economisesc mult timp:

  • Tasta Tab completează automat numele de fișiere, directoare și comenzi. Apăsată de două ori, îți arată toate variantele posibile.
  • Ctrl+R caută în istoricul comenzilor. Scrii o parte din comandă și apeși din nou Ctrl+R ca să mergi la rezultatul anterior.

Lucrul cu fișiere și directoare

mkdir proiect-nou                 # creează un director
mkdir -p src/componente/butoane   # creează și directoarele intermediare
touch index.html                  # creează un fișier gol
cp config.json config.backup.json # copiază un fișier
cp -r src/ src-backup/            # copiază un director, recursiv
mv vechi.txt nou.txt              # redenumește
mv raport.pdf ~/Documente/        # mută
rm fisier.txt                     # șterge un fișier
rm -r director/                   # șterge un director cu tot conținutul

Atenție: rm nu trimite fișierele în Recycle Bin; le șterge definitiv. Verifică de două ori calea înainte de un rm -r și evită să-l combini cu sudo dacă nu ești sigur ce faci. Opțiunea -i (rm -ri director/) cere confirmare pentru fiecare fișier.

Citirea conținutului

cat README.md            # afișează tot fișierul
less server.log          # citește un fișier lung, pagină cu pagină (q pentru ieșire)
head -n 20 date.csv      # primele 20 de linii
tail -n 50 app.log       # ultimele 50 de linii
tail -f app.log          # urmărește fișierul în timp real (Ctrl+C pentru oprire)
wc -l date.csv           # numărul de linii

tail -f este una dintre comenzile pe care le vei folosi cel mai des când depanezi un server: vezi log-urile pe măsură ce apar, în timp ce testezi aplicația.

În less, poți căuta un text apăsând /, scriind termenul și apoi Enter; n te duce la următorul rezultat.

Editarea fișierelor direct din terminal

Pe un server conectat prin SSH nu ai editorul tău preferat, așa că mai devreme sau mai târziu va trebui să modifici un fișier de configurare direct din terminal. Cel mai simplu editor pentru început este nano, instalat implicit pe majoritatea distribuțiilor:

nano config.env

Comenzile sunt afișate în partea de jos a ecranului (simbolul ^ înseamnă tasta Ctrl). Cele mai importante: Ctrl+O salvează fișierul, Ctrl+X închide editorul, Ctrl+W caută un text.

Vei întâlni și vim, care se deschide uneori automat (de exemplu, când Git îți cere un mesaj de commit). Dacă ai ajuns în el fără să vrei, apasă Esc, scrie :q! și Enter ca să ieși fără să salvezi, sau :wq ca să salvezi și să ieși. Ca să eviți surpriza, poți seta editorul implicit pentru Git cu git config --global core.editor nano.

Căutarea fișierelor și a textului

grep "ERROR" app.log                  # liniile care conțin ERROR
grep -i "eroare" app.log              # fără a ține cont de majuscule
grep -rn "calculeazaTotal" src/       # caută recursiv, cu numărul liniei
grep -v "DEBUG" app.log               # liniile care NU conțin DEBUG

find . -name "*.log"                  # fișierele .log din directorul curent și subdirectoare
find . -type d -name node_modules     # directoarele numite node_modules
find /tmp -type f -mtime +7           # fișierele modificate acum mai mult de 7 zile

Pentru căutări în proiecte mari de cod, mulți programatori folosesc rg (ripgrep), o alternativă mai rapidă la grep -r care ignoră automat fișierele din .gitignore. Pe Ubuntu se instalează cu sudo apt install ripgrep.

Pipe-uri și redirecționări

Puterea reală a terminalului vine din combinarea comenzilor mici. Operatorul | (pipe) trimite rezultatul unei comenzi ca input pentru următoarea.

# Cele mai frecvente 10 mesaje de eroare dintr-un log
grep "ERROR" app.log | sort | uniq -c | sort -rn | head -n 10

# Câte fișiere JavaScript sunt în proiect
find src -name "*.js" | wc -l

# Procesele care conțin "node" în nume
ps aux | grep node

Redirecționările trimit rezultatul într-un fișier:

OperatorCe faceExemplu
>Scrie output-ul într-un fișier (îl suprascrie)ls > lista.txt
>>Adaugă output-ul la finalul fișieruluiecho "gata" >> jurnal.txt
2>Redirecționează erorilenpm run build 2> erori.txt
2>&1Trimite erorile în același loc cu output-ul normalnpm test > rezultat.txt 2>&1
&&Rulează a doua comandă doar dacă prima a reușitnpm install && npm start
||Rulează a doua comandă doar dacă prima a eșuatping -c 1 server || echo "indisponibil"

Permisiuni

ls -l afișează permisiunile fiecărui fișier:

-rwxr-xr-- 1 ana dev 1024 mar 14 10:30 deploy.sh

Primul caracter indică tipul (- fișier, d director). Urmează trei grupuri de câte trei caractere: permisiunile pentru proprietar (rwx), pentru grup (r-x) și pentru ceilalți (r--). r înseamnă citire, w scriere, x execuție.

chmod +x deploy.sh        # face scriptul executabil
./deploy.sh               # îl rulează
chmod 644 config.json     # proprietarul citește și scrie; ceilalți doar citesc
chmod 600 ~/.ssh/id_ed25519   # doar proprietarul poate citi cheia privată
sudo chown ana:dev fisier.txt # schimbă proprietarul și grupul
CifrăPermisiuniSemnificație
7rwxcitire, scriere, execuție
6rw-citire și scriere
5r-xcitire și execuție
4r--doar citire
0---niciun drept

sudo rulează o comandă cu drepturi de administrator. Folosește-l doar când comanda chiar o cere (instalarea pachetelor, modificarea fișierelor de sistem), nu ca reflex când primești „Permission denied”.

Procese și porturi

ps aux                    # toate procesele care rulează
top                       # monitorizare în timp real (q pentru ieșire)
kill 4821                 # cere procesului cu PID 4821 să se oprească
kill -9 4821              # îl oprește forțat, doar dacă primul kill nu a mers

O situație foarte frecventă: pornești aplicația și primești o eroare că portul 3000 este deja folosit. Afli ce proces îl ocupă cu:

ss -tlnp | grep 3000
# sau
lsof -i :3000

Pentru procesele pornite din terminalul curent:

Scurtătură / comandăEfect
Ctrl+COprește procesul care rulează
Ctrl+ZSuspendă procesul
bgContinuă procesul suspendat în fundal
fgAduce procesul înapoi în prim-plan
comanda &Pornește direct comanda în fundal
jobsListează procesele din fundal ale terminalului curent

htop este o variantă mai prietenoasă a lui top, cu culori și navigare cu săgețile. Pe Ubuntu se instalează cu sudo apt install htop.

Spațiu pe disc și informații despre sistem

df -h                     # spațiul liber pe fiecare partiție
du -sh *                  # dimensiunea fiecărui element din directorul curent
du -sh node_modules       # cât ocupă un director
free -h                   # memoria RAM folosită și liberă
uname -a                  # informații despre kernel
cat /etc/os-release       # distribuția și versiunea

Opțiunea -h (human-readable) afișează valorile în KB, MB și GB, nu în octeți.

Rețea și servere

curl https://api.example.com/produse            # face o cerere GET
curl -I https://example.com                     # doar header-ele răspunsului
curl -X POST https://api.example.com/produse \
  -H "Content-Type: application/json" \
  -d '{"nume": "Laptop", "pret": 3500}'         # cerere POST cu JSON

ping -c 4 example.com                           # verifică dacă un host răspunde
ssh ana@203.0.113.10                            # conectare la un server
scp backup.tar.gz ana@203.0.113.10:/home/ana/   # copiază un fișier pe server

Pentru conexiuni SSH fără parolă, generezi o pereche de chei cu ssh-keygen -t ed25519 și copiezi cheia publică pe server cu ssh-copy-id ana@203.0.113.10.

Instalarea pachetelor

Fiecare familie de distribuții are propriul manager de pachete:

# Debian, Ubuntu (inclusiv WSL implicit)
sudo apt update
sudo apt install git curl

# Fedora, RHEL
sudo dnf install git curl

apt update actualizează lista de pachete disponibile; nu instalează nimic. Rulează-l înainte de apt install, mai ales pe un sistem proaspăt instalat.

Variabile de mediu și personalizare

echo $HOME                    # afișează o variabilă
echo $PATH                    # directoarele în care shell-ul caută comenzi
export NODE_ENV=development   # setează o variabilă pentru sesiunea curentă
env                           # toate variabilele de mediu

O variabilă setată cu export dispare când închizi terminalul. Ca să fie permanentă, o adaugi în ~/.bashrc (sau ~/.zshrc pe zsh), împreună cu aliasurile tale:

alias ll='ls -la'
alias gs='git status'
export EDITOR=nano

După ce salvezi fișierul, aplici modificările cu source ~/.bashrc.

Primul tău script

Un script bash este doar un fișier text cu comenzi. Iată un exemplu care face o arhivă cu data curentă în nume:

#!/usr/bin/env bash
set -euo pipefail

sursa="$HOME/proiecte"
destinatie="$HOME/backup"
data=$(date +%Y-%m-%d)

mkdir -p "$destinatie"
tar -czf "$destinatie/proiecte-$data.tar.gz" -C "$sursa" .
echo "Backup creat: $destinatie/proiecte-$data.tar.gz"

Linia set -euo pipefail oprește scriptul la prima eroare, la folosirea unei variabile nedefinite sau la eșecul unei comenzi dintr-un pipe, ceea ce previne multe surprize neplăcute. Salvezi fișierul ca backup.sh, îl faci executabil cu chmod +x backup.sh și îl rulezi cu ./backup.sh.

Cum găsești ajutor

man grep          # manualul complet al comenzii
grep --help       # rezumatul opțiunilor

Paginile man sunt complete, dar lungi. Pentru exemple rapide, utilitarul tldr afișează cazurile de utilizare cele mai comune ale unei comenzi. Iar pentru detalii despre shell, manualul oficial Bash este referința de bază.

Scurtături care fac diferența

ScurtăturăEfect
TabCompletare automată
Ctrl+RCăutare în istoricul comenzilor
Ctrl+A / Ctrl+ESalt la începutul / sfârșitul liniei
Ctrl+UȘterge tot ce e înaintea cursorului
Ctrl+LCurăță ecranul (la fel ca clear)
Ctrl+DÎnchide sesiunea curentă (la fel ca exit)
!!Repetă ultima comandă (de exemplu sudo !!)
Săgeată susComanda anterioară din istoric

Pașii următori

  1. Dacă ești pe Windows, instalează WSL și folosește terminalul Linux pentru toate proiectele tale de acum înainte.
  2. Timp de o săptămână, încearcă să faci din terminal operațiile pe care le făceai din interfața grafică: creare de directoare, mutare de fișiere, căutare.
  3. Scrie un script mic care automatizează ceva ce faci des, de exemplu pornirea proiectului sau curățarea fișierelor temporare.
  4. Continuă cu roadmap-ul DevOps, unde terminalul devine unealta principală pentru servere, deploy și automatizare, sau cu Docker, care se folosește aproape exclusiv din linia de comandă.