Úvod do Lsof

V systéme Linux sa mnohé objekty považujú za súbor bez ohľadu na to, či je objektom skutočne súbor, zariadenie, adresár alebo soket. Vypísanie súboru je jednoduché, je na to zabudovaný shell ls. Čo ak však používateľ chce vidieť, ktoré súbory sú momentálne otvorené procesom webového servera? Alebo ak chcel tento používateľ zistiť, ktoré súbory sú otvorené v určitom adresári? To je miesto, kde lsofprichádza do hry. Predstavte si to lsofako lss pridaním „otvorených súborov“.

Upozorňujeme, že zatiaľ čo BSD majú pre túto úlohu inú pomôcku fstat, niekoľko ďalších verzií Unixu (napríklad Solaris) má tiež lsof. Možnosti a príznaky sú na iných platformách odlišné, rovnako ako aj vzhľad výstupu, ale vo všeobecnosti by pre ne mali platiť aj poznatky z tohto článku.

Najprv sa pozrime na formát lsofvýstupu a na to, ako sa má čítať. Zvyčajný výstup lsofbez akýchkoľvek parametrov by vyzeral nasledovne. Toto bolo upravené kvôli čitateľnosti.

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

Tieto stĺpce znamenajú:

  • COMMAND – Proces, do ktorého patrí otvorený súbor, v tomto príklade všetko súvisí s init.
  • PID – Identifikačné číslo procesu daného procesu.
  • USER – Používateľ, pod ktorým proces beží. Pre init, je to takmer vždy root.
  • FD - deskriptor súboru, najbežnejší je:
    • cwd- Aktuálny pracovný adresár (môžete si všimnúť podobnosť s pwdpríkazom, ktorý vypíše aktuálny pracovný adresár).
    • rtd - Koreňový adresár procesu.
    • txt- A text file, môže to znamenať buď konfiguračný súbor súvisiaci s procesom, alebo „zdrojový kód“ súvisiaci (alebo patriaci k) procesu.
    • mem - Takzvaný "súbor mapovaný v pamäti", to znamená segment virtuálnej pamäte (čítaj: RAM), ktorý bol priradený k súboru.
    • Číslo - číslo predstavuje skutočný deskriptor súboru, znak za číslom je režim, v ktorom sa súbor otvára:
    • r - Čítať.
    • w - Napíšte.
    • u - Čítaj a píš.
  • TYP – určuje skutočný typ súboru, najbežnejšie sú:
    • REG - Bežný súbor.
    • DIR - Adresár.
    • FIFO - Prvý dnu prvý von.
  • DEVICE – hlavné a vedľajšie číslo zariadenia, v ktorom je súbor uložený.
  • SIZE – Veľkosť súboru v bajtoch.
  • NODE – Číslo inódu súboru.
  • NAME – názov súboru.

Nateraz to môže byť trochu ohromujúce, ale ak s tým budete pracovať lsofniekoľkokrát, rýchlo sa vám to vryje do mozgu.

Ako už bolo spomenuté vyššie, výstup lsoftu bol skrátený. Bez akýchkoľvek argumentov alebo filtrov lsofvytvára stovky riadkov výstupu, ktorý vás nechá len zmätený.

Na vyriešenie tohto problému existujú dva základné prístupy:

  • lsofNa zúženie výsledkov použite jednu alebo viacero možností príkazového riadka.
  • Výstup preveďte napríklad cez grep.

Aj keď posledná možnosť môže znieť pohodlnejšie, pretože si nebudete musieť pamätať možnosti lsofpríkazového riadka, vo všeobecnosti nie je taká flexibilná a efektívna, takže sa budeme držať prvej.

Predstavme si, že chcete otvoriť súbor pomocou svojho obľúbeného textového editora a textový editor vám povie, že ho možno otvoriť iba v režime iba na čítanie, pretože k nemu už pristupuje iný program. lsofvám pomôže zistiť, kto je páchateľ:

lsof /path/to/your/file

Výsledkom bude výstup podobný tomuto:

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

Zrejme ste zabudli zavrieť a staršiu reláciu! Veľmi podobný problém nastane, keď sa pokúsite odpojiť zdieľanie NFS a umountpovie vám, že to nejde, pretože niečo stále pristupuje k pripojenému priečinku. Opäť lsofvám môže pomôcť pri identifikácii vinníka:

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

Všimnite si koncovú lomku, tá je dôležitá. V opačnom prípade sa lsofbude predpokladať, že máte na mysli bežný súbor. Nenechajte sa zmiasť +pred vlajkou - lsofmá toľko možností príkazového riadku, ktoré potrebuje +okrem bežnejších -. Výstup by vyzeral takto:

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

To znamená, že proces mocps PID 5637patriaci používateľovi musicotvoril súbor s názvom RMS_GNU_SONG.ogg. Avšak aj po zatvorení tohto procesu stále existuje problém - zväzok NFS nemožno odpojiť.

lsof-cpríznak, ktorý zobrazuje otvorené súbory s ľubovoľným názvom procesu.

lsof -c mocp

Výsledkom by bol výstup, ktorý vyzerá takto:

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

V tomto príklade je iná inštancia mocpspustenia, ktorá vám bráni odpojiť zdieľanie. Po vypnutí tohto procesu sa chcete uistiť, že používateľ musicnemá otvorené žiadne ďalšie potenciálne problematické súbory. lsof-upríznak pre zobrazenie súborov otvorených konkrétnym používateľom. Pamätajte, že súbor nie je vždy len obyčajný súbor na vašom pevnom disku!

lsof -u music

Môžete tiež odovzdať niekoľko používateľov oddelených čiarkami:

lsof -u music,moremusic

Dôležitá poznámka o predvolené správanie lsof: výsledky sú OR na báze, čo znamená, že uvidíte výsledky otvorenie súboru pomocou postupov, ktoré sú vo vlastníctve buď používateľ music, alebo užívateľ moremusic. Ak by ste chceli vidieť výsledky zodpovedajúce procesom, ktoré vlastnia obaja používatelia, museli by ste zadať príznak -a:

lsof -au music, moremusic

Keďže obaja používatelia sú v skupine musicusers, môžete tiež zobraziť zoznam súborov podľa skupiny:

lsof -g musicusers

Môžete tiež kombinovať príznaky príkazového riadku:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

V poslednom riadku sme pridali ďalší špeciálny príznak - ^, čo znamená logické NOT . Ak je výstup po spustení tohto príkazu prázdny, odpojenie bude s najväčšou pravdepodobnosťou úspešné.

V predchádzajúcich príkladoch sme sa väčšinou pozerali na bežné súbory. Ako je to so zásuvkami a sieťovými pripojeniami?

Zoznam všetkých aktuálnych sieťových pripojení lsof-ipríznak:

lsof -i

Výstup vyzerá podobne ako to, čo sme doteraz videli...

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)

... až na jeden rozdiel: namiesto názvov súborov alebo adresárov sa v stĺpci NAMEteraz zobrazujú informácie o pripojení. Každé spojenie pozostáva z nasledujúcich častí:

  • Protokol.
  • Miestny názov hostiteľa.
  • Zdrojový port pripojenia.
  • Názov DNS cieľa.
  • Cieľový prístav.
  • Stav pripojenia.

Ako pri mnohých iných nástrojoch, aj tu sa môžete odhlásiť z rozlišovania názvov DNS a portov ( -na -P). Príznak -imá ďalšie parametre. Môžete určiť, či má alebo nemá zobrazovať tcp, udpalebo icmpspojenie alebo niektoré porty:

lsof -i :25
or
lsof -i :smtp

Parametre sa opäť dajú kombinovať. Nasledujúci príklad...

lsof -i tcp:80

... vám ukáže iba TCP spojenia využívajúce port 80. Môžete to skombinovať aj s možnosťami, ktoré už poznáte z „klasických“ súborov:

lsof -a -u httpd -i tcp

Toto vám ukáže všetky TCP spojenia otvorené používateľom httpd. Všimnite si -apríznak, ktorý mení predvolené správanie lsof(ako už bolo spomenuté). Rovnako ako u väčšiny nástrojov príkazového riadku môžete ísť veľmi hlboko. V nasledujúcom texte sa zobrazia iba pripojenia TCP, ktorých stav je „ZATVORENÉ“:

lsof -i -s TCP:ESTABLISHED

V tomto bode by ste mali mať základné znalosti o tom lsof, ako to funguje, spolu s niektorými bežnými prípadmi použitia. Ďalšie informácie nájdete na manuálovej stránke lsofvášho systému.

Zanechať komentár

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Umelá inteligencia nie je v budúcnosti, je tu priamo v súčasnosti V tomto blogu si prečítajte, ako aplikácie umelej inteligencie ovplyvnili rôzne sektory.

Útoky DDOS: Stručný prehľad

Útoky DDOS: Stručný prehľad

Ste aj vy obeťou DDOS útokov a máte zmätok ohľadom metód prevencie? Ak chcete vyriešiť svoje otázky, prečítajte si tento článok.

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Zaujímalo vás niekedy, ako hackeri zarábajú peniaze?

Možno ste už počuli, že hackeri zarábajú veľa peňazí, ale premýšľali ste niekedy nad tým, ako môžu zarábať také peniaze? poďme diskutovať.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Revolučné vynálezy od spoločnosti Google, ktoré vám uľahčia život.

Chcete vidieť revolučné vynálezy od Google a ako tieto vynálezy zmenili život každého dnešného človeka? Potom si prečítajte na blogu a pozrite si vynálezy spoločnosti Google.

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Piatok Essential: Čo sa stalo s autami poháňanými AI?

Koncept samoriadených áut vyraziť na cesty s pomocou umelej inteligencie je snom, ktorý máme už nejaký čas. Ale napriek niekoľkým prísľubom ich nikde nevidno. Prečítajte si tento blog a dozviete sa viac…

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Technologická singularita: vzdialená budúcnosť ľudskej civilizácie?

Ako sa veda vyvíja rýchlym tempom a preberá veľa nášho úsilia, zvyšuje sa aj riziko, že sa vystavíme nevysvetliteľnej singularite. Prečítajte si, čo pre nás môže znamenať singularita.

Funkcionality vrstiev referenčnej architektúry veľkých dát

Funkcionality vrstiev referenčnej architektúry veľkých dát

Prečítajte si blog, aby ste čo najjednoduchším spôsobom spoznali rôzne vrstvy architektúry veľkých dát a ich funkcie.

Vývoj ukladania dát – Infografika

Vývoj ukladania dát – Infografika

Spôsoby ukladania údajov sa môžu vyvíjať už od zrodu údajov. Tento blog sa zaoberá vývojom ukladania údajov na základe infografiky.

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

6 úžasných výhod toho, že máme v živote inteligentné domáce zariadenia

V tomto digitálnom svete sa inteligentné domáce zariadenia stali kľúčovou súčasťou života. Tu je niekoľko úžasných výhod inteligentných domácich zariadení o tom, ako robia náš život, ktorý stojí za to žiť, a ktorý zjednodušujú.

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Aktualizácia doplnku macOS Catalina 10.15.4 spôsobuje viac problémov, ako ich rieši

Spoločnosť Apple nedávno vydala doplnkovú aktualizáciu macOS Catalina 10.15.4 na opravu problémov, ale zdá sa, že táto aktualizácia spôsobuje ďalšie problémy, ktoré vedú k blokovaniu počítačov Mac. Prečítajte si tento článok a dozviete sa viac