Comenzile Linux pe care le folosesc zilnic ca developer PHP

Linux | Stefanescu Mihai | 2026-05-29

Terminale deschise: de obicei 4-5 simultan. Nu pentru că e cool, ci pentru că fiecare face ceva diferit — una urmărește log-urile live, una e conectată via SSH la server, una rulează teste, alta e în directorul proiectului. Am ajuns să lucrez mai repede în terminal decât în orice interfață grafică pentru task-urile astea. Iată comenzile care mi-au intrat în ADN.

`grep` — cauta în fișiere ca un profesionist

grep e primul lucru la care apelez când trebuie să găsesc ceva.

# Caută un string în directorul curent și subdirectoare
grep -r "getUserById" ./src/

# Case-insensitive
grep -ri "database" ./config/

# Arată numărul liniei
grep -rn "TODO" ./app/

# Arată doar numele fișierelor, nu și conținutul
grep -rl "deprecated" ./src/

# Caută cu regex — toate email-urile din logs
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" storage/logs/laravel.log

# Exclude directoare (util pentru a ignora vendor/)
grep -r "password" ./app/ --include="*.php" --exclude-dir=vendor

# Context — arată 3 linii înainte și după match
grep -rn -C 3 "Exception" storage/logs/laravel.log | tail -50

Folosesc `grep -rn` aproape zilnic pentru a găsi unde e folosit o metodă sau o clasă înainte să o modific.

`find` — găsești orice fișier sau director

# Găsește toate fișierele PHP modificate în ultimele 24 de ore
find ./app -name "*.php" -mtime -1

# Fișiere mai mari de 10MB
find /var/log -size +10M

# Găsește și șterge log-urile vechi de 30 de zile
find /var/log/app -name "*.log" -mtime +30 -delete

# Găsește fișiere cu permisiuni greșite
find ./storage -not -perm 755 -type d
find ./storage -not -perm 644 -type f

# Găsește fișiere goale
find ./temp -empty -type f

# Execută o comandă pe fiecare fișier găsit
find ./app -name "*.php" -exec php -l {} \;
# (verifică sintaxa PHP în toate fișierele)

`tail -f` — urmărești log-urile live

Ăsta e deschis permanent când fac debug pe server:

# Urmărești în timp real
tail -f /var/log/nginx/error.log

# Laravel logs
tail -f storage/logs/laravel.log

# Urmărești mai multe fișiere simultan
tail -f /var/log/nginx/error.log storage/logs/laravel.log

# Ultimele 100 de linii + follow
tail -n 100 -f storage/logs/laravel.log

# Filtrezi direct — doar erorile
tail -f storage/logs/laravel.log | grep -i "error\|exception\|fatal"


Combinația `tail -f | grep` e una din cele mai utile pe care le știu. Pe un server cu trafic, log-urile defilează repede — filtrul te ajută să vezi doar ce contează.

`ps aux` și procesele

# Lista tuturor proceselor
ps aux

# Caută procesele PHP
ps aux | grep php

# Procesele sortate după consum de memorie
ps aux --sort=-%mem | head -20

# Procesele sortate după CPU
ps aux --sort=-%cpu | head -20

# Oprești un proces după PID
kill 12345

# Forțat
kill -9 12345

# Oprești toate procesele php-fpm
pkill php-fpm

# Verifici dacă un port e ocupat
ss -tlnp | grep :8080
# sau
lsof -i :8080


Când un request pare blocat sau serverul nu răspunde, primul lucru e `ps aux | grep php` să văd câte procese php-fpm rulează și dacă vreunul e zombie.

SSH și SCP — lucrul de la distanță

# Conectare simplă
ssh [email protected]

# Cu cheie privată specifică
ssh -i ~/.ssh/id_rsa_production [email protected]

# Port non-standard
ssh -p 2222 [email protected]

# Tunel SSH — accesezi baza de date remote ca și cum ar fi locală
ssh -L 3307:localhost:3306 [email protected]
# Acum te conectezi la MySQL remote via localhost:3307

# Copiezi un fișier pe server
scp ./app/config.php [email protected]:/var/www/html/app/

# Copiezi un director întreg
scp -r ./app/ [email protected]:/var/www/html/

# Descarcă ceva de pe server
scp [email protected]:/var/log/app/error.log ./local_error.log

# rsync — mai eficient decât scp pentru sincronizări
rsync -avz --progress ./app/ [email protected]:/var/www/html/app/


Tunel-ul SSH pentru baza de date e super util: poți folosi TablePlus sau DBeaver pentru a inspecta o bază de date de producție fără să o expui public.

`chmod` și `chown` — permisiunile

# Setezi permisiunile pentru Laravel
chmod -R 755 /var/www/html
chmod -R 775 /var/www/html/storage
chmod -R 775 /var/www/html/bootstrap/cache

# Dă owner www-data (nginx/apache user)
chown -R www-data:www-data /var/www/html

# Tu rămâi owner, dar www-data e în grup
chown -R $USER:www-data /var/www/html
chmod -R 775 /var/www/html/storage

# Verifici permisiunile
ls -la ./storage/

Cel mai frecvent bug pe un server nou: `Permission denied` în storage sau cache. `chmod -R 775 storage/ bootstrap/cache/` rezolvă de obicei.

`cron` — task-uri programate

# Editezi crontab-ul
crontab -e

# Listezi task-urile existente
crontab -l

# Exemple de cron jobs
# ┌──────── minut (0-59)
# │ ┌────── oră (0-23)
# │ │ ┌──── zi din lună (1-31)
# │ │ │ ┌── lună (1-12)
# │ │ │ │ ┌ zi din săptămână (0-7, 0=duminică)
# │ │ │ │ │
# * * * * * comanda

# Laravel scheduler — rulează la fiecare minut
* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1

# Backup la baza de date în fiecare zi la 3 dimineața
0 3 * * * mysqldump -u root -pPAROLA mydb > /backup/db_$(date +\%Y\%m\%d).sql

# Curăță log-urile vechi în fiecare duminică
0 0 * * 0 find /var/log/app -name "*.log" -mtime +7 -delete

# Restart php-fpm în fiecare noapte la 4
0 4 * * * systemctl restart php8.2-fpm

Câteva comenzi bonus pe care le folosesc des

# Disk usage — cât spațiu ocupă directoarele
du -sh /var/log/*
df -h  # spațiul total al partițiilor

# Netstat — ce porturi sunt deschise
ss -tlnp

# Variabile de mediu
printenv | grep APP
export APP_DEBUG=true  # temporar, în sesiunea curentă

# Istoricul comenzilor cu căutare
history | grep "git push"
# Ctrl+R în terminal pentru căutare interactivă

# Redirectare output
php artisan migrate 2>&1 | tee migration.log
# 2>&1 redirecționează stderr la stdout, tee scrie și în fișier și pe ecran

# Screen / tmux — sesiuni persistente pe server
screen -S deployment
# Dacă sesiunea SSH se întrerupe, procesul continuă
screen -r deployment  # reattach


Alias-uri pe care le am în `.bashrc`

# Adaugă în ~/.bashrc sau ~/.zshrc
alias ll='ls -la'
alias la='ls -la'
alias ..='cd ..'
alias ...='cd ../..'

# Laravel shortcuts
alias art='php artisan'
alias tinker='php artisan tinker'
alias mig='php artisan migrate'
alias fresh='php artisan migrate:fresh --seed'

# Logs
alias laravel-log='tail -f storage/logs/laravel.log'
alias nginx-log='sudo tail -f /var/log/nginx/error.log'

# Git shortcuts
alias gs='git status'
alias gp='git push'
alias gl='git log --oneline --graph --all'


După `source ~/.bashrc`, comenzile tale scurte sunt disponibile.

Linux nu e intimidant — e doar un set de unelte care, odată stăpânite, îți economisesc ore în fiecare săptămână. Comenzile de mai sus acoperă 90% din ce folosesc în munca de zi cu zi. Restul 10% le caut pe moment.

Dacă ai o comandă favorită care nu e pe listă, lasă-o în comentarii — tot timpul e loc de optimizat workflow-ul.


Imi place ce faci aici
Daca iti place ce fac aici imi poti cumpara o cafea Buy Me a Coffee at ko-fi.com

Stefanescu Mihai
Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.
       

Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum.

Posteaza un comentariu

Comentarii

Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!

Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.

🗝️ Login 🌟 Register

🔖 Bookmarks
✨ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌪️ Discord

Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.

⬆️