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“.
Tento příkaz hlásí celou cestu k příkazu, v tomto případě „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“.
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.
Pro kontrolu uživatelů s vyšší hodností však bude „lsof“ potřebovat oprávnění „superuživatele“.
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í:
Pro uživatele s vyšší hodností bude „lsof“ opět potřebovat oprávnění „superuživatele“.
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.
:<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.
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.
Procesy specifické pro daný protokol
Uvedeme 2 příklady zobrazující procesy, které aktuálně používají protokoly IPv4 a IPv6.
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.
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“.
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.
Nyní proveďte filtrování pomocí „grep“.
Nyní zkontrolujte, k jakým souborům tento PID přistupuje.
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:
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.
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.
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.
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“.
Užijte si to!