lsof příkaz v Linuxu zobrazuje ve svém výstupu informace o souborech, které procesy otevírají. V tomto článku probereme nástroj lsof pro Linux pomocí 15 snadno srozumitelných příkladů. Vezměte prosím na vědomí, že všechny příklady uvedené v tomto tutoriálu byly testovány na Ubuntu 20.04 LTS, ale budou fungovat i na jiných distribucích Linuxu, jako je Debian, Fedora a CentOS.
O příkazu lsof
Pokud chcete rychle zobrazit názvy souborů, které byly otevřeny konkrétním procesem (nebo všemi procesy), příkaz lsof vám to umožní. Otevřeným souborem může být běžný soubor nebo adresář, knihovna, speciální soubor nebo blokové zařízení, znakový speciální soubor, spouštěcí textový odkaz nebo dokonce proud nebo síťový soubor. Procesy můžete také vypsat podle čísla portu. Pokud nejste přihlášeni jako uživatel root, možná budete muset před příkazy přidat 'sudo'.
Instalovat Linux příkaz lsof
Většina distribucí Linuxu je dodávána s předinstalovanými lsof. Pokud ve vašem systému ještě není nainstalován, použijte následující příkazy:
Na Ubuntu a Debianu:
$ sudo apt install lsof
Ond CentOS a Fedora:
$ dnf install lsof
1. Jak vypsat všechny otevřené soubory
Chcete-li zobrazit seznam všech otevřených souborů, spusťte příkaz lsof bez jakýchkoli argumentů:
lsof
Zde je například screengrab části výstupu výše uvedeného příkazu vytvořeného v mém systému:
První sloupec představuje proces, zatímco poslední sloupec obsahuje název souboru. Podrobnosti o všech sloupcích najdete na manuálové stránce příkazu.
2. Jak vypsat soubory otevřené procesy patřící konkrétnímu uživateli
Nástroj také umožňuje zobrazit soubory otevřené procesy, které patří konkrétnímu uživateli. K této funkci lze přistupovat pomocí -u možnost příkazového řádku.
lsof -u [jméno uživatele]
Například:
lsof -u správce
3. Jak vytvořit seznam souborů na základě jejich internetové adresy
Tento nástroj umožňuje seznam souborů na základě jejich internetové adresy. To lze provést pomocí -i možnost příkazového řádku. Pokud chcete, můžete si například nechat zobrazit soubory IPv4 a IPv6 samostatně. Pro IPv4 spusťte následující příkaz:
lsof -i 4
Například:
Podobně pro IPv6 spusťte následující příkaz:
lsof -i 6
Například:
lsof -i 6
4. Jak vypsat všechny soubory podle názvu aplikace
Volba -c příkazového řádku vám umožňuje otevřít všechny soubory podle názvu programu.
$ lsof -c apache
Nemusíte používat celý název programu, protože jsou zobrazeny všechny programy, které začínají slovem 'apache'. V našem případě tedy vypíše všechny procesy aplikace 'apache2'.
Volba -c je v podstatě jen zkratka pro dva příkazy:
$ lsof | grep apache
5. Jak vypsat soubory specifické pro proces
Nástroj také umožňuje zobrazit otevřené soubory na základě identifikačních čísel procesů (PID). To lze provést pomocí -p možnost příkazového řádku.
lsof -p [PID]
Například:
lsof -p 856
Postupně můžete také vyloučit konkrétní PID ve výstupu přidáním ^ symbol před nimi. Chcete-li vyloučit konkrétní PID, můžete spustit následující příkaz:
lsof -p [^PID]
Například:
lsof -p ^1
Jak můžete vidět na výše uvedeném snímku obrazovky, proces s ID 1 je ze seznamu vyloučen.
6. Jak vypsat ID procesů, které otevřely konkrétní soubor
Nástroj umožňuje vypsat ID procesů, které otevřely konkrétní soubor. To lze provést pomocí -t možnost příkazového řádku.
$ lsof -t [file-name]
Například:
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
7. Jak vypsat všechny otevřené soubory v adresáři
Pokud chcete, můžete také pomocí lsof vyhledat všechny otevřené instance adresáře (včetně všech souborů a adresářů, které obsahuje). K této funkci lze přistupovat pomocí +D možnost příkazového řádku.
$ lsof +D [cesta-adresáře]
Například:
$ lsof +D /usr/lib/locale
8. Jak vypsat všechny internetové a x.25 (HP-UX) síťové soubory
To je možné pomocí -i možnost příkazového řádku, kterou jsme popsali dříve. Jen to musíte použít bez jakýchkoli argumentů.
$ lsof -i
9. Zjistěte, který program používá port
Přepínač -i příkazu vám umožňuje najít proces nebo aplikaci, která naslouchá konkrétnímu číslu portu. V níže uvedeném příkladu jsem zkontroloval, který program používá port 80.
$ lsof -i :80
Místo čísla portu můžete použít název služby uvedený v /etc/services soubor. Příklad kontroly, která aplikace naslouchá na portu HTTPS (443):
$ lsof -i :https
Výsledek:
Výše uvedené příklady zkontrolují TCP i UDP. Pokud chcete zkontrolovat pouze TCP nebo UDP, přidejte před slovo 'tcp' nebo 'udp'. Například, která aplikace používá port 25 TCP:
$ lsof -i tcp:25
nebo která aplikace používá port UDP 53:
$ lsof -i udp:53
10. Jak vypsat otevřené soubory na základě rozsahu portů
Nástroj také umožňuje zobrazit seznam otevřených souborů na základě konkrétního portu nebo rozsahu portů. Chcete-li například zobrazit otevřené soubory pro port 1-1024, použijte následující příkaz:
$ lsof -i :1-1024
11. Jak zobrazit seznam otevřených souborů podle typu připojení (TCP nebo UDP)
Nástroj umožňuje vypisovat soubory podle typu připojení. Například pro soubory specifické pro UDP použijte následující příkaz:
$ lsof -i udp
Podobně můžete lsof zobrazit soubory specifické pro TCP.
12. Jak vytvořit seznam lsof Parent PID procesů
K dispozici je také možnost, která lsof přinutí uvést ve výstupu číslo PPID (Parent Process IDentification). Dotyčná možnost je -R .
$ lsof -R
Chcete-li získat informace o PPID pro konkrétní PID, můžete spustit následující příkaz:
$ lsof -p [PID] -R
Například:
$ lsof -p 3 -R
13. Jak najít síťovou aktivitu podle uživatele
Pomocí kombinace voleb příkazového řádku -i a -u můžeme vyhledat všechna síťová připojení uživatele Linuxu. To může být užitečné, pokud kontrolujete systém, který mohl být hacknut. V tomto příkladu kontrolujeme veškerou síťovou aktivitu uživatele www-data:
$ lsof -a -i -u www-data
14. Vypsat všechny soubory mapované v paměti
Tento příkaz zobrazí seznam všech souborů mapovaných v paměti v systému Linux.
$ lsof -d mem
15. Vypsat všechny soubory NFS
Volba -N vám zobrazí seznam všech souborů NFS (Network File System).
$lsof -N
Závěr
Ačkoli lsof nabízí nepřeberné množství možností, ty, které jsme zde probrali, by vám měly stačit, abyste mohli začít. Až budete s procvičováním hotovi, přejděte na manuálovou stránku nástroje, kde se o něm dozvíte více. Jo, a v případě, že máte nějaké pochybnosti a dotazy, napište komentář níže.