Příkaz lsof v Linuxu

, Author

Příkazový nástroj „lsof“ v Linuxu je jedním z mnoha integrovaných nástrojů, který je velmi užitečný pro kontrolu „seznamu otevřených souborů“. Ano, výraz „lsof“ je zkratkou této úlohy.

V systému neustále běží řada procesů, které přistupují k různým systémovým souborům. Těmito soubory mohou být diskové soubory, skripty, síťové zásuvky, zařízení, pojmenované roury a další. Pomocí funkce „lsof“ je možné provádět spoustu věcí, například ladění. Je také docela užitečný pro správce systému, aby zjistili, k jakým souborům přistupují jaké procesy. Jedním z nejužitečnějších scénářů, na které jsem narazil, je situace, kdy se chystáte odpojit souborový systém, ale stále se k němu přistupuje.

Bez dalších řečí začněme s „lsof“! Předpokládám, že váš současný systém UNIX/Linux již má nainstalovaný příkaz „lsof“.

který lsof

Tento příkaz hlásí celou cestu k příkazu, v tomto případě „lsof“.

verze „lsof“
lsof -v

Tento příkaz ohlásí podrobné informace o verzi příkazu „lsof“, včetně data sestavení binárky, verze kompilátoru, příznaků kompilátoru a dalších.

Základní použití „lsof“

Samotné spuštění „lsof“.

lsof

Tento příkaz ohlásí VELKÝ seznam všech souborů, ke kterým systém přistupuje v okamžiku spuštění příkazu.

Ačkoli jsou všechna pole srozumitelná, většinou se pletou sloupce „FD“ a „TYPE“ a jejich hodnoty. Pojďme se na ně podívat.

FD: Zkratka pro „File Descriptor“ (popisovač souboru). Vychází z následujících hodnot:

  • cwd: Aktuální pracovní adresář
  • rtd: Kořenový adresář
  • txt: Text programu (data, kód a další)
  • mem: Paměťově mapovaný soubor
  • err: FD information error
  • mmap: Memory-mapped device
  • ltx: Text sdílené knihovny (data a kód)
  • m86: DOS Merge mapped file

V sloupci si můžete všimnout i dalších hodnot, například „1u“, za kterým následuje hodnota u, r, w atd. Co znamenají?

  • r: Přístup ke čtení
  • w: Přístup pro zápis
  • u: Přístup pro čtení a zápis
  • – : Neznámý režim a obsahuje znak zámku
  • ‚ ‚: Režim je neznámý a není tam žádný znak zámku

TYPE: Popisuje typ souboru a jeho identifikaci. Hodnoty jsou následující:

  • DIR: Adresář
  • CHR: Speciální znakový soubor
  • REG: Normální soubor
  • FIFO: První dovnitř, první ven

Uživatelsky specifické otevřené soubory

Linux je skvělá víceuživatelská platforma. K systému může přistupovat více uživatelů současně a provádět operace, ke kterým mají oprávnění.

Chcete-li zjistit soubory, ke kterým přistupuje určitý uživatel, spusťte následující příkaz.

lsof -u <uživatelské jméno>

Pro kontrolu uživatelů s vyšší hodností však bude „lsof“ potřebovat oprávnění „superuživatele“.

sudo lsof -u <uživatelské jméno>

A co takhle zkontrolovat všechny příkazy a soubory, ke kterým má určitý uživatel přístup? Spusťte následující:

lsof -i -u <uživatelské jméno>

Pro uživatele s vyšší hodností bude „lsof“ opět potřebovat oprávnění „superuživatele“.

sudo lsof -i -u <uživatelské jméno>

Specifické běžící procesy na portu

Pro zjištění všech procesů, které aktuálně používají určitý port, zavolejte „lsof“ s příznakem „-i“, za kterým následují informace o protokolu a portu.

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

Chcete-li například zjistit všechny programy, které aktuálně přistupují k portu 80 přes protokol TCP/IP, spusťte následující příkaz.

lsof -i TCP:80

Tuto metodu lze také použít k zobrazení všech procesů, které používají porty v určitém rozsahu, například 1 až 1000. Struktura příkazu je podobná jako dříve s malým kouzlem v části s číslem portu.

lsof -i TCP:1-1000

Procesy specifické pro daný protokol

Uvedeme 2 příklady zobrazující procesy, které aktuálně používají protokoly IPv4 a IPv6.

lsof -i 4

lsof -i 6

Výpis síťových připojení

Následující příkaz zobrazí všechna síťová připojení z aktuálního systému.

lsof -i

Vyloučení pomocí ^

Ano, pomocí znaku „^“ můžeme vyloučit konkrétního uživatele, port, FD a další. Musíte jej pouze používat opatrně, abyste nepokazili celý výstup.

V tomto příkladu vyloučíme všechny procesy uživatele „root“.

lsof -u^root

Existují i jiné způsoby použití tohoto vylučovacího mechanismu pomocí „lsof“, například s příznaky jako „-c“, „-d“ atd. Ne všechny příznaky tento mechanismus podporují. Proto doporučuji před implementací do některých skriptů vyzkoušet ukázku tohoto způsobu s libovolným příznakem.

PID search

PID je důležitá vlastnost každého běžícího procesu v systému. Umožňuje přesnější určení konkrétního procesu. Název procesu není v mnoha situacích zcela užitečný, protože stejná binární jednotka může vytvářet kopie sebe sama a paralelně provádět různé úlohy.

Pokud nevíte, jak získat PID procesu, stačí použít „ps“ pro výpis všech běžících procesů a filtrovat výstup pomocí „grep“ s názvem procesu a/nebo příkazy.

ps -A

Nyní proveďte filtrování pomocí „grep“.

ps -A | grep <process_or_command>

Nyní zkontrolujte, k jakým souborům tento PID přistupuje.

lsof -p <PID >

Výpis otevřených souborů pro konkrétní zařízení

Funkce „lsof“ se neomezuje pouze na tyto funkce. Výsledek funkce „lsof“ můžete také filtrovat podle zařízení. Pro tento účel bude příkaz vypadat asi takto:

lsof <zařízení_mount_point>

Tento příkaz je super užitečný pro zjištění všech běžících procesů s informacemi o jejich vlastníkovi přistupujících k určitému souborovému systému. Pokud máte potíže s odmountováním souborového systému, je to nejlepší způsob.

lsof <busy_device_mount_point>

Seznam otevřených souborů v adresáři

Podobně jako v předchozím příkladu stačí předat příkazu „lsof“ cestu k adresáři a zjistit, zda k němu přistupuje nějaký proces.

Poznámka: „lsof“ bude adresář kontrolovat rekurzivně, takže to může chvíli trvat.

=lsof +D <cesta_k_adresáři>

Bonus: ukončení veškeré činnosti uživatele

Buďte s touto částí velmi opatrní, protože může jednoduše zamíchat se vším, co uživatel dělá. Následující příkaz zabije všechny běžící procesy uživatele.

sudo kill -9 `lsof -t -u <uživatelské jméno`

Myšlenky na závěr

Funkce „lsof“ nekončí jen zde. Ty, které jsou zde zmíněny, jsou ty, které budeme denně potřebovat nejvíce. Existuje spousta dalších funkcí „lsof“, které se mohou hodit (samozřejmě ve specifických případech).

Všechny dostupné funkce a jejich použití najdete na manuálové a informační stránce „lsof“.

man lsof

info lsof

lsof -?

Užijte si to!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.