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.



Leave a Comment

Cum se instalează Anchor CMS pe un VPS Fedora 26 LAMP

Cum se instalează Anchor CMS pe un VPS Fedora 26 LAMP

Folosind un sistem diferit? Anchor CMS este un motor de blog de sistem de gestionare a conținutului (CMS) super-simplu și extrem de ușor, gratuit și deschis

Configurare partajare NFS pe Debian

Configurare partajare NFS pe Debian

NFS este un sistem de fișiere bazat pe rețea care permite computerelor să acceseze fișiere într-o rețea de calculatoare. Acest ghid explică modul în care puteți expune folderele peste NF

Configurați un server TeamTalk pe Linux

Configurați un server TeamTalk pe Linux

TeamTalk este un sistem de conferințe care permite utilizatorilor să aibă conversații audio / video de înaltă calitate, chat de text, transfer de fișiere și partajare ecrane. Este

Folosind cheia SSH pentru a vă conecta la utilizatori non-root

Folosind cheia SSH pentru a vă conecta la utilizatori non-root

Vultr oferă o caracteristică care vă permite să preinstalați cheile SSH la crearea unei noi instanțe. Acest lucru vă permite să accesați utilizatorul root al serverelor, totuși

Cum se instalează Ranger Terminal File Manager pe Linux

Cum se instalează Ranger Terminal File Manager pe Linux

Ranger este un manager de fișiere bazat pe linia de comandă cu legături de cheie VI. Oferă o interfață de blestem minimalistă și frumoasă, cu o vedere asupra ierarhiei de directoare

Cum se instalează Redmine pe Ubuntu 16.04

Cum se instalează Redmine pe Ubuntu 16.04

Folosind un sistem diferit? Redmine este un instrument gratuit și deschis de gestionare a proiectelor bazat pe web. Este scris în Ruby on Rails și acceptă mai multe baze de date

Instalare RethinkDB Cluster pe CentOS 7

Instalare RethinkDB Cluster pe CentOS 7

Introducere RethinkDB este o bază de date NoSQL care stochează date sub formă de documente JSON. Are un limbaj de interogare super intuitiv și are funcții disponibile în mod obișnuit

Cum se construiește Brotli din sursă pe Ubuntu 18.04 LTS

Cum se construiește Brotli din sursă pe Ubuntu 18.04 LTS

Folosind un sistem diferit? Brotli este o nouă metodă de compresie cu un raport de compresie mai bun decât GZIP. Codul sursă este găzduit public pe acest Githu

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

În anumite ocazii, este posibil ca un administrator de sistem să aibă nevoie să creeze un cont de utilizator și să restricționeze accesul acestora la gestionarea propriilor fișiere prin sFTP, dar nu b

Utilizarea vizualizărilor MySQL pe Debian 7

Utilizarea vizualizărilor MySQL pe Debian 7

Introducere MySQL are o caracteristică excelentă cunoscută sub numele de vizualizări. Vizualizările sunt interogări stocate. Gândiți-vă la ele ca la un alias pentru o întrebare altfel lungă. În acest ghid,

Cum se instalează Nginx 1.14 pe Arch Linux

Cum se instalează Nginx 1.14 pe Arch Linux

Cerințe preliminare Un server Vultr care funcționează actualizat Arch Linux (vezi acest articol.) Acces Sudo. Comenzile care trebuie rulate ca root sunt prefixate de #. Th

Dezactivați sau restricționați conectarea rădăcină prin SSH pe Linux

Dezactivați sau restricționați conectarea rădăcină prin SSH pe Linux

Permiterea autentificării root pe SSH este de obicei considerată o practică slabă de securitate în întreaga industrie tehnologică. În schimb, puteți efectua administrativ sensibil

Cum se instalează Seafile Server pe Ubuntu 16.10

Cum se instalează Seafile Server pe Ubuntu 16.10

Folosind un sistem diferit? Seafile (versiunea comunității) este o soluție gratuită și deschisă de sincronizare și partajare a fișierelor, care este similară cu ownCloud. De-a lungul spiritului

Cum să compilați Nginx din sursă pe CentOS 7

Cum să compilați Nginx din sursă pe CentOS 7

Folosind un sistem diferit? NGINX poate fi utilizat ca server HTTP / HTTPS, server proxy invers, server proxy de poștă, echilibrator de sarcină, terminator TLS sau cachin

Cum se instalează Thelia 2.3 pe Debian 9

Cum se instalează Thelia 2.3 pe Debian 9

Folosind un sistem diferit? Thelia este un instrument open source pentru crearea de site-uri web pentru e-business și gestionarea conținutului online scris în PHP. Codul sursă Thelia i

Cum se instalează DokuWiki pe Ubuntu 16.04 LTS

Cum se instalează DokuWiki pe Ubuntu 16.04 LTS

Folosind un sistem diferit? DokuWiki este un program wiki open source scris în PHP care nu necesită o bază de date. Stochează date în fișiere text. DokuWik

Configurarea unui chroot pe Debian

Configurarea unui chroot pe Debian

Acest articol vă va învăța cum să configurați o închisoare chroot pe Debian. Presupun că utilizați Debian 7.x. Dacă executați Debian 6 sau 8, acest lucru poate funcționa, bine

Cum se instalează PiVPN pe Debian

Cum se instalează PiVPN pe Debian

Introducere Un mod ușor de a configura un server VPN pe Debian este cu PiVPN. PiVPN este un instalator și un pachet pentru OpenVPN. Creează comenzi simple pentru tine

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Folosind un sistem diferit? Chamilo este un sistem gratuit și deschis de management al învățării (LMS), care este utilizat pe scară largă pentru educația online și colaborarea în echipă

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

EasyEngine (ee) este un instrument Python care vă permite să gestionați ușor și automat site-urile Wordpress de pe Nginx. Folosind EasyEngine, nu va trebui să dați

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

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.

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.

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.

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?

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.

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