Introducere în Lsof

Sub Linux, multe obiecte sunt considerate un fișier, indiferent dacă obiectul este de fapt un fișier, dispozitiv, director sau socket. Listarea unui fișier este ușoară, există shell-ul încorporat lspentru asta. Dar dacă un utilizator dorește să vadă ce fișiere sunt deschise în prezent prin procesul serverului web? Sau dacă acel utilizator dorea să afle ce fișiere sunt deschise într-un anumit director? Acolo lsofintră în joc. Imaginați-vă lsofca o lscu adăugarea de „fișiere deschise”.

Vă rugăm să rețineți că, deși BSD-urile au o utilitate diferită pentru acest job fstat, mai multe alte arome ale Unix (Solaris, de exemplu) dețin și ele lsof. Opțiunile și steagurile sunt diferite pe celelalte platforme, precum și aspectul rezultatului, dar, în general, cunoștințele din acest articol ar trebui să fie aplicabile și pentru acestea.

Mai întâi, să aruncăm o privire la formatul de lsofieșire și cum trebuie citit. Ieșirea obișnuită a lsoffără parametri ar semăna cu următoarele. Acest lucru a fost redus pentru lizibilitate.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Aceste coloane înseamnă următoarele:

  • COMMAND - Procesul la care aparține un fișier deschis, în acest exemplu totul este legat init.
  • PID - numărul de identificare a procesului menționat.
  • USER - Utilizatorul la care se derulează procesul. Căci init, este aproape întotdeauna root.
  • FD - Descriptorul fișierului, cel mai frecvent fiind:
    • cwd- Directorul de lucru curent (s-ar putea să observați asemănarea cu pwdcomanda care tipărește directorul de lucru curent).
    • rtd - Directorul rădăcină al unui proces.
    • txt- A text file, acesta poate însemna fie un fișier de configurare aferent procesului, fie „codul sursă” aferent (sau aparținând) procesului.
    • mem - Un așa-numit „fișier mapat cu memorie”, care înseamnă un segment de memorie virtuală (citire: RAM) care a fost alocat unui fișier.
    • Un număr - numărul reprezintă descriptorul real al fișierului, caracterul după numărul este modul în care este deschis fișierul:
    • r - Citit.
    • w - Scrie.
    • u - Citeste si scrie.
  • TIP - Specifică tipul real de fișier, cele mai frecvente sunt:
    • REG - Un fișier obișnuit.
    • DIR - Un director.
    • FIFO - Mai întâi, mai întâi.
  • DISPOZITIV - Numărul major și minor al dispozitivului care deține fișierul.
  • SIZE - Mărimea fișierului, în octeți.
  • NODE - numărul inode al fișierului.
  • NUME - Numele fișierului.

Acest lucru ar putea fi un pic copleșitor deocamdată, dar dacă lucrați de lsofcâteva ori, acesta vă va scufunda rapid în creier.

Așa cum am menționat mai sus, producția de lsofa fost scurtată aici. Fără niciun fel de argumente sau filtre, lsofproduce sute de linii de ieșire care vă vor lăsa doar confuzi.

Există două abordări de bază pentru a rezolva această problemă:

  • Utilizați una sau mai multe dintre lsofopțiunile liniei de comandă pentru a restrânge rezultatele.
  • Conectați ieșirea prin, de exemplu grep,.

În timp ce ultima opțiune poate suna mai confortabil, deoarece nu va trebui să memorați lsofopțiunile liniei de comandă, în general nu este la fel de flexibilă și eficientă, așa că vom rămâne la prima.

Să ne imaginăm că doriți să deschideți un fișier cu editorul de text preferat și că editorul de text vă spune că acesta poate fi deschis doar în modul de citire, deoarece un alt program îl accesează deja. lsofvă va ajuta să aflați cine este făptuitorul:

lsof /path/to/your/file

Aceasta va produce o producție similară cu aceasta:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Aparent, ați uitat să închideți și vechea sesiune! O problemă foarte asemănătoare se întâmplă atunci când încercați să demontați un share NFS și umountvă spune că nu se poate, deoarece ceva încă accesează folderul montat. Din nou, lsofvă poate ajuta cu identificarea vinovatului:

lsof +D /path/to/your/directory/

Observați obturarea, este important. În caz contrar, lsofpresupunem că vă referiți la un fișier obișnuit. Nu vă confundați cu partea +din față a steagului - lsofare atât de multe opțiuni de linie de comandă încât are nevoie, +pe lângă cele mai comune -. Produsul va arăta astfel:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Asta înseamnă că procesul mocp, odată cu PID 5637, care aparține utilizatorului musica deschis un fișier numit RMS_GNU_SONG.ogg. Cu toate acestea, chiar și după închiderea acelui proces, există încă o problemă - volumul NFS nu poate fi demontat.

lsofare un -csteag care afișează fișierele deschise un nume de proces arbitrar.

lsof -c mocp

Aceasta ar produce o ieșire care arată astfel:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

În acest exemplu, există o altă instanță de a mocprula, care vă împiedică să demontați cota. După închiderea acelui proces, doriți să vă asigurați că utilizatorul musicnu are deschise alte fișiere cu potențial problematic. lsofare un -usteag pentru afișarea fișierelor deschise de un anumit utilizator. Nu uitați, un fișier nu este întotdeauna doar un fișier obișnuit pe hard disk!

lsof -u music

De asemenea, puteți trece mai mulți utilizatori, despărțiți prin virgule:

lsof -u music,moremusic

O notă importantă privind comportamentul implicit al lsof: rezultatele sunt bazate pe OR , ceea ce înseamnă că veți vedea rezultatele fișierelor deschise de procese care sunt deținute fie de utilizator music, fie de utilizator moremusic. Dacă doriți să vedeți procesele de potrivire a rezultatelor care sunt deținute de ambii utilizatori, atunci ar trebui să treceți steagul -a:

lsof -au music, moremusic

Deoarece ambii utilizatori se află în grup musicusers, puteți, de asemenea, să listați fișierele bazate pe grup:

lsof -g musicusers

Puteți combina, de asemenea, steagurile liniei de comandă:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

În ultima linie, am adăugat un alt steag special - ^, care înseamnă un NU logic . Dacă ieșirea este goală după executarea acelei comenzi, cel mai probabil dezmembrarea va avea succes.

În exemplele anterioare, am analizat în mare parte fișierele obișnuite. Ce zici de prize și conexiuni de rețea?

Pentru a enumera toate conexiunile actuale de rețea lsofeste -iindicat:

lsof -i

Rezultatul arată similar cu ceea ce am văzut până acum ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... cu excepția unei diferențe: în loc de nume de fișiere sau directoare, coloana NAMEarată acum informații despre conexiune. Fiecare conexiune este formată din următoarele părți:

  • Protocol.
  • Nume de gazdă locală
  • Portul sursă al conexiunii.
  • Numele DNS de destinație.
  • Portul de destinație.
  • Starea conexiunii.

Ca și în cazul altor instrumente, puteți renunța la rezolvarea numelor și porturilor DNS ( -nși -P, respectiv). Steagul -iia parametri suplimentari. Puteți specifica dacă să afișeze sau nu tcp, udpsau icmpconexiuni sau anumite porturi:

lsof -i :25
or
lsof -i :smtp

Din nou, parametrii pot fi combinați. Următorul exemplu ...

lsof -i tcp:80

... vă va afișa doar conexiunile TCP folosind portul 80. De asemenea, îl puteți combina cu opțiunile pe care le cunoașteți deja din fișierele "clasice":

lsof -a -u httpd -i tcp

Aceasta vă va afișa toate conexiunile TCP deschise de utilizator httpd. Rețineți -asteagul, care modifică comportamentul implicit al lsof(așa cum am menționat anterior). Ca și în cazul celor mai multe instrumente din linia de comandă, puteți merge extrem de adânc. Următoarele vă vor arăta doar conexiuni TCP a căror stare este "STABILITĂ":

lsof -i -s TCP:ESTABLISHED

În acest moment, ar trebui să aveți o înțelegere de bază cu privire la modul de lsoffuncționare, împreună cu unele cazuri de utilizare obișnuită. Pentru mai multe lecturi, consultați pagina de utilizare lsofdin sistemul dvs.

Lasă un comentariu

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe