Linux lsof Command

, Author

Instrumentul de comandă „lsof” din Linux este unul dintre multele instrumente încorporate care este foarte util pentru a verifica „lista de fișiere deschise”. Da, termenul „lsof” este abrevierea sarcinii.

Există un număr de procese care rulează în sistem tot timpul, accesând diferite fișiere din sistem. Aceste fișiere pot fi fișiere de disc, scripturi, socket-uri de rețea, dispozitive, pipe-uri numite și altele. Utilizând „lsof”, este posibil să se efectueze o mulțime de lucruri, cum ar fi depanarea. De asemenea, este destul de util pentru administratorii de sistem pentru a afla ce fișiere sunt accesate de către ce procese. Unul dintre cele mai utile scenarii pe care le-am găsit este atunci când sunteți pe cale să demontați un sistem de fișiere, dar acesta este încă accesat.

Fără alte discuții, haideți să începem cu „lsof”! Presupun că actualul vostru sistem UNIX/Linux are deja instalat „lsof”.

care lsof

Aceasta raportează calea completă a comenzii, în acest caz, „lsof”.

Versiunea „lsof”
lsof -v

Aceasta va raporta informații aprofundate despre versiunea „lsof”, inclusiv data de construire a binarului, versiunea compilatorului, stegulețele compilatorului și altele.

Utilizare „lsof” de bază

Executați „lsof” de unul singur.

lsof

Aceasta raportează o listă MARE a tuturor fișierelor care sunt accesate de sistem în momentul executării comenzii.

În timp ce toate câmpurile se explică de la sine, de cele mai multe ori se face confuzie cu privire la coloanele „FD” și „TYPE” și valorile lor. Să le verificăm.

FD: Abrevierea de la „File Descriptor”. Apare cu următoarele valori.

  • cwd: Directorul de lucru curent
  • rtd: Directorul rădăcină
  • txt: Textul programului (date, cod și altele)
  • mem: Fișier mapat în memorie
  • err: FD information error
  • mmap: Dispozitiv cu memorie mapă
  • ltx: Text de bibliotecă partajată (date și cod)
  • m86: DOS Merge mapped file

Există și alte valori pe care le veți observa în coloană, cum ar fi „1u” urmat de valoarea u, r, w, etc. Ce înseamnă acestea?

  • r: Acces la citire
  • w: Acces la scriere
  • u: Acces la citire și scriere
  • – : Mod necunoscut și conține un caracter de blocare

  • ‘ ‘: Modul este necunoscut și nu există un caracter de blocare

TYPE: Descrie tipul de fișier și identificarea acestuia. Valorile sunt următoarele.

  • DIR: Directory
  • CHR: Character-special file
  • REG: Regular file
  • FIFO: First in, first out

File deschise în funcție de utilizator

Linux este o platformă multi-utilizator strălucită. Mai mulți utilizatori pot accesa sistemul în același timp și pot efectua operațiuni pentru care au permisiune.

Pentru a verifica fișierele care sunt accesate de un anumit utilizator, rulați următoarea comandă.

lsof -u <numele de utilizator>

Cu toate acestea, pentru a verifica utilizatorii cu rang superior, „lsof” va avea nevoie de privilegiul „superuser”.

sudo lsof -u <utilizator>

Cum ar fi să verificați toate comenzile și fișierele pe care le accesează un anumit utilizator? Rulați-o pe următoarea.

lsof -i -u <utilizator>

Din nou, pentru utilizatorii cu rang superior, „lsof” va avea nevoie de privilegiul „superuser”.

sudo lsof -i -u <numele de utilizator>

Procese în desfășurare specifice unui port

Pentru a afla toate procesele care utilizează în prezent un anumit port, apelați „lsof” cu indicatorul „-i” urmat de informațiile despre protocol și port.

lsof -i<46><protocol><@hostname|host_address>
:<service|port>

De exemplu, pentru a verifica toate programele care accesează în prezent portul 80 prin protocolul TCP/IP, executați următoarea comandă.

lsof -i TCP:80

Această metodă poate fi, de asemenea, utilizată pentru a afișa toate procesele care utilizează porturile dintr-un anumit interval, de exemplu, de la 1 la 1000. Structura comenzii este similară cu cea anterioară, cu puțină magie la partea referitoare la numărul de port.

lsof -i TCP:1-1000

Procese specifice protocolului

Iată 2 exemple care arată procesele care utilizează în prezent protocoalele IPv4 și IPv6.

lsof -i 4

lsof -i 6

Listarea conexiunilor de rețea

Comenda următoare va raporta toate conexiunile de rețea din sistemul curent.

lsof -i

Excludere cu ^

Da, putem exclude un anumit utilizator, port, FD și altele folosind caracterul „^”. Tot ce trebuie să faceți este să îl folosiți cu prudență pentru a nu strica întreaga ieșire.

În acest exemplu, să excludem toate procesele de la utilizatorul „root”.

lsof -u^root

Există și alte modalități de a folosi acest mecanism de excludere cu „lsof”, de exemplu, cu stegulețe precum „-c”, „-d” etc. Nu toate stegulețele acceptă acest mecanism. De aceea, vă recomand să încercați o demonstrație cu această metodă cu orice indicator înainte de a o implementa în unele scripturi.

Cercetare PID

PID este o proprietate importantă a oricărui proces care rulează în sistem. Ea permite o localizare mai fină la un anumit proces. Numele procesului nu este destul de util într-o mulțime de situații, deoarece același binar poate crea copii ale lui însuși și poate efectua diferite sarcini în paralel.

Dacă nu știți cum să obțineți PID-ul unui proces, folosiți pur și simplu „ps” pentru a lista toate procesele care rulează și filtrați ieșirea folosind „grep” cu numele procesului și/sau comenzile.

ps -A

Acum, efectuați filtrarea folosind „grep”.

ps -A | grep <proces_or_comandă>

Acum, verificați ce fișiere accesează acel PID.

lsof -p <PID >

Lista fișierelor deschise pentru un anumit dispozitiv

Funcționalitatea lui „lsof” nu se limitează doar la aceste funcții. De asemenea, puteți filtra rezultatul lui „lsof” și pe baza dispozitivului. În acest scop, comanda va arăta cam așa:

lsof <device_mount_point>

Această comandă este foarte utilă pentru a afla toate procesele în curs de execuție cu informații despre proprietarul lor care accesează un anumit sistem de fișiere. Dacă aveți probleme cu demontarea unui sistem de fișiere, aceasta este cea mai bună cale de urmat.

lsof <busy_device_mount_point>

Lista fișierelor deschise sub un director

Similar cu exemplul anterior, trebuie doar să treceți calea directorului către „lsof” pentru a afla dacă vreun proces îl accesează.

Nota: „lsof” va verifica directorul în mod recursiv, deci poate dura ceva timp.

=lsof +D <cărarea_directorului>

Bonus: termină toată activitatea utilizatorului

Să fiți extrem de precaut cu această parte deoarece poate pur și simplu să încurce tot ceea ce face un utilizator. Următoarea comandă va ucide toate procesele care rulează ale unui utilizator.

sudo kill -9 `lsof -t -u <numele utilizatorului`

Gânduri finale

Funcțiile lui „lsof” nu se opresc doar aici. Cele menționate aici sunt cele de care vom avea cea mai mare nevoie zi de zi. Există o mulțime de alte funcționalități ale lui „lsof” care ne pot fi de folos (în cazuri specifice, desigur).

Pentru toate funcționalitățile disponibile și utilizarea lor, consultați paginile man și info ale lui „lsof”.

man lsof

info lsof

lsof -?

Distracție plăcută!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.