Identificarea Fișierelor și a Porturilor Deschise cu lsof în Linux / Bash

Procese și monitorizare Standard Linux

Ghid complet pentru comanda lsof (List Open Files) în Linux: identificarea proceselor care ascultă pe porturi de rețea, deblocarea fișierelor ocupate și recuperarea spațiului pe disc.

Sintaxă comandă
lsof -i :80 | lsof -iTCP -sTCP:LISTEN | lsof -u root | lsof +D /var/log

Î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.

1. Diagnosticarea Porturilor de Rețea Ocupate
# 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:

Identificarea și rezolvarea fișierelor șterse dar blocate în memorie
# 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 comanda umount /mnt/stocare eșuează cu eroarea target is busy).