GNU/Linux >> Znalost Linux >  >> Linux

7 Příklady příkazu lsof v Linuxu

Myslím, že v určitém okamžiku jste přemýšleli, zda existuje způsob, jak zobrazit otevřené soubory procesem nebo uživatelem. Dobrá věc je, že odpověď na tuto otázku je příkaz lsof.

Pravděpodobně už víte, že příkaz ls je zkratka pro „list“. lsof znamená ‚List Open Files‘. A přesně to dělá, vypisuje otevřené soubory podle procesů, uživatelů a ID procesů.

Dovolte mi, abych vám ukázal některé z nejběžnějších použití příkazu lsof.

příklady příkazů ls

Pokud použijete příkaz lsof bez jakýchkoli voleb a argumentů, zobrazí seznam všech otevřených souborů všemi procesy v systému.

lsof

Výstup by měl být takto:

COMMAND     PID   TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME

systemd       1                   root  cwd       DIR              252,1      4096          2 /

systemd       1                   root  rtd       DIR              252,1      4096          2 /

systemd       1                   root  txt       REG              252,1   1595792      17384 /lib/systemd/systemd

systemd       1                   root  mem       REG              252,1   1700792       2077 /lib/x86_64-linux-gnu/libm-2.27.so

Výstup je většinou samozřejmý, ale přesto vás mohou zajímat sloupce FD a TYPE.

FD znamená deskriptor souboru. Některé z běžných hodnot pro FD jsou:

  • cwd – aktuální pracovní adresář
  • txt – textové soubory
  • mem ​​– soubor mapovaný v paměti
  • mmap – zařízení s mapou paměti
  • ČÍSLO – Skutečný deskriptor souboru. Má také informace o tom, ve kterém oprávnění k souboru je otevřen.

TYPE je prosté. Určuje typ souboru. Zde je několik příkladů:

  • REG – běžný soubor
  • DIR – Adresář
  • CHR – speciální soubor znaků
  • FIFO – First In First Out

Věř mi. Nechtěli byste spouštět příkaz lsof bez jakýchkoli argumentů.

proč to říkám? Protože to začne zaplavovat vaši obrazovku tisíci výsledků.

Pokud spustím příkaz lsof na serveru Ubuntu a spočítám počet řádků pomocí příkazu wc, zde je výsledek.

lsof | wc -l
11432

Ano! To je správně. Existuje více než jedenáct tisíc souborů otevřených různými procesy v systému.

nebojte se. Příkaz lsof je velmi užitečný při ladění, protože můžete vidět, jaké procesy otevírají jaké soubory a který soubor otevírá který proces.

Pokud nejste přihlášeni jako root, výstup příkazu lsof by byl velmi omezený. Pokud jste přihlášeni jako uživatel bez oprávnění root, je dobré použít sudo.

1. Vypište všechny procesy, které otevřely soubor

To je jednoduché. Stačí zadat cestu k souboru.

lsof <path_to_file>

2. Seznam všech souborů otevřených uživatelem

To se hodí v prostředí pro více uživatelů. Všechny soubory otevřené určitým uživatelem můžete vypsat následujícím způsobem:

lsof -u <user_name>

Můžete také zadat více než jednoho uživatele takto:

lsof -u user1, user2

nebo takto:

lsof -u user1 -u user2

3. Seznam všech otevřených souborů v adresáři

Pokud vás zajímá, které soubory byly otevřeny v určitém adresáři, můžete použít příkaz lsof s volbou +D.

lsof +D <path_to_directory>

Vyhledávání je rekurzivní. Vypíše tedy všechny otevřené soubory ve zmíněném adresáři a všechny jeho podadresáře.

4. Seznam všech otevřených souborů podle procesu

V tomto případě musíte znát ID procesu (pid). Pokud znáte ID procesu, můžete použít volbu -p příkazu lsof k nalezení souborů, které tento proces otevřel.

lsof -p <pid>

Můžete také zadat více ID procesů.

lsof -p pid1, pid2, pid3

5. Seznam všech souborů otevřených příkazem

To je zvláště užitečné při ladění. Předpokládejme, že chcete vidět, jaké soubory používá http démon, stačí zadat název příkazu (v našem příkladu httpd).

lsof -c <command>

6. Najít otevřené uživatelem a příkazem nebo procesem

Volby jako uživatel a příkaz a proces můžete kombinovat pomocí volby –a. Představte si to jako operátor AND. Získáte tak další filtr a pokusíte se zúžit vyhledávání.

lsof -a -u user_name -c command_name

7. Seznam síťových připojení a portů pomocí příkazu lsof

Příkaz lsof můžete také použít k nalezení otevřených portů nebo k nalezení procesu, který port používá.

Všechny druhy otevřených portů můžete uložit pomocí volby -i:

lsof -i

Výstup může vypadat takto:

lsof -i
 COMMAND     PID            USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
 sshd        920            root    3u  IPv4    20507      0t0  TCP *:ssh (LISTEN)
 sshd        920            root    4u  IPv6    20535      0t0  TCP *:ssh (LISTEN)
 docker-pr  1163            root    4u  IPv6    21687      0t0  TCP *:https (LISTEN)
 docker-pr  1175            root    4u  IPv6    21717      0t0  TCP *:http (LISTEN)
 sshd       7528            root    3u  IPv4 39506588      0t0  TCP testing:ssh->212.91.91.19:58904 (ESTABLISHED)
 systemd-r 10993 systemd-resolve   12u  IPv4 20901990      0t0  UDP localhost:domain 
 systemd-r 10993 systemd-resolve   13u  IPv4 20901991      0t0  TCP localhost:domain (LISTEN)

Můžete také určit typ síťového připojení. Chcete-li například zobrazit seznam všech otevřených portů TCP, můžete použít:

lsof -i tcp

Chcete-li zjistit, který proces používá konkrétní port, můžete zadat číslo portu:

lsof -i :<port_number>

Bonusový tip:Použití operátoru negace s lsof

Operátor negace můžete použít k vyloučení uživatele nebo procesu při použití příkazu lsof.

Chcete-li například zobrazit seznam všech souborů, které otevřel jiný uživatel než root, použijte tento způsob:

lsof -u ^root

Příkaz lsof se stane ještě užitečnějším, když jej použijete s příkazem grep.

Doufám, že jste se v tomto článku dozvěděli něco nového. Pokud máte dotazy nebo návrhy, zanechte prosím níže komentář.


Linux
  1. 7 Příklady příkazů Linux df

  2. 8 Příklady příkazů Linux TR

  3. Příklady příkazů rm v Linuxu

  1. Příklady příkazů ps v Linuxu

  2. sa Příklady příkazů v Linuxu

  3. w Příklady příkazů v Linuxu

  1. Příklady příkazů ac v Linuxu

  2. Příklady příkazů df v Linuxu

  3. du příklady příkazů v Linuxu