În conformitate cu filozofia UNIX în care „totul este un fișier”, un socket de rețea, o conexiune TCP deschisă, o bibliotecă partajată (.so) sau un stream de date sunt tratate de kernel ca descriptori de fișiere (file descriptors). Comanda lsof (List Open Files) este utilitarul de diagnostic numărul unu când doriți să aflați ce proces accesează o resursă sau de ce un port este blocat.
# Scenariu: Nginx refuză să pornească cu eroarea: "Address already in use :80".
# Aflăm instantaneu ce proces ascultă pe portul 80:
sudo lsof -i :80
# Output tipic generat:
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# apache2 1420 www-data 4u IPv4 23412 0t0 TCP *:http (LISTEN)
# Soluție imediată: Oprim procesul care ocupa portul nelegitim:
sudo kill -15 1420
# Listarea TUTUROR porturilor TCP pe care ascultă servicii în acest moment:
sudo lsof -iTCP -sTCP:LISTEN -P -n
# (-P forțează afișarea numărului de port în loc de nume, iar -n elimină rezolvarea lentă DNS)
2. Problema Fișierelor Șterse care Ocupă Spațiu pe Disc (Deleted Files)
Un scenariu de coșmar în administrarea serverelor: rulați df -h și vedeți că partiția /var este ocupată 100%, dar comanda du -sh /var/* arată doar câțiva gigaocteți folosiți! Această discrepanță apare atunci când un fișier uriaș de log a fost șters cu rm, dar un proces activ (de exemplu o aplicație Java sau un worker Python) încă îl ține deschis. Kernel-ul nu poate elibera blocurile de disc până când procesul nu închide descriptorul:
# Găsim procesele care țin deschise fișiere marcate cu (deleted):
sudo lsof +L1
# Sau căutăm explicit în lista de fișiere:
sudo lsof | grep '(deleted)'
# Output:
# python3 8942 appuser 3w REG 253,1 15482910720 412891 /var/log/app_eroare.log (deleted)
# Spațiul de 15 GB este blocat de procesul PID 8942!
# Soluția: Repornim serviciul respectiv sau trimitem semnalul de reload:
sudo systemctl restart serviciu-app
Alte Utilizări Frecvente
lsof -u nume_utilizator: Listează toate fișierele și conexiunile deschise de un utilizator anume.lsof /cale/fisier.txt: Arată exact ce proces scrie sau citește din fișierul respectiv în acest moment.lsof +D /mnt/stocare: Listează toate procesele care accesează un director montat (util când comandaumount /mnt/stocareeșuează cu eroarea target is busy).