Úvod
lsof
příkaz znamená Seznam otevřených souborů a ukazuje otevřené soubory a který proces je používá. Protože Linux vidí každý objekt jako soubor, jako jsou zařízení, adresáře atd., neidentifikované otevřené soubory brání uživatelům v jejich úpravě.
Kromě toho je kvůli velkému počtu souborů obtížné najít škodlivé procesy. lsof
příkaz pomáhá identifikovat tyto procesy, abyste je mohli ukončit.
Tento článek vysvětlí, jak používat Příkaz lsof v Linuxu s příklady.

Předpoklady
- Přístup k terminálu.
- Oprávnění skupiny Sudo.
- Oprávnění uživatele root pro některé příkazy.
lsof syntaxe příkazu
lsof
syntaxe příkazu je:
lsof [options]
Poznámka: Pro většinu příkazů spusťte lsof
s sudo
abyste se vyhnuli chybám typu „povolení odepřeno“.
lsof Možnosti příkazu
lsof
příkaz má mnoho možností. Níže uvedená tabulka obsahuje argumenty, které se používají nejčastěji:
Možnost | Popis |
---|---|
lsof | Uvádí seznam všech otevřených souborů. |
-b | Potlačuje bloky jádra. |
/ [file system] / | Zobrazuje otevřené soubory v konkrétním systému souborů. |
/dev/tty* | Zobrazuje soubory spojené s terminálem. |
-u [username] | Vytiskne všechny soubory otevřené uživatelem. |
-u ^[username] | Vytiskne všechny soubory otevřené všemi kromě konkrétního uživatele. |
-c [process] | Vypisuje všechny soubory, ke kterým přistupuje konkrétní proces. |
-p [process ID] | Zobrazuje všechny otevřené soubory spojené s konkrétním ID procesu. |
-p ^[process ID] | Zobrazuje soubory otevřené všemi ostatními PID. |
-R | Uvádí ID nadřazených procesů. |
+D [directory path] | Vytiskne všechny otevřené soubory v adresáři. |
-i | Zobrazí všechny soubory, ke kterým přistupuje síťová připojení. |
-i [IP version number] | Filtruje soubory na základě jejich IP. |
- i [udp or tcp] | Filtruje otevřené soubory podle typu připojení (TCP nebo UDP). |
-i :[port number] | Najde procesy běžící na konkrétním portu. |
-i :[port range] | Najde procesy běžící na konkrétních rozsazích portů. |
-t [file name] | Uvádí ID procesů, které přistoupily ke konkrétnímu souboru. |
# kill -9 'lsof -t -u [user] ' | Zabije všechny uživatelské procesy. |
-d mem | Zobrazuje všechny soubory mapované v paměti. |
[path] | grep deleted | Vytiskne uzamčené smazané soubory. |
man | Otevře manuálovou stránku. |
lsof příkladů příkazů
lsof
obsahuje různé argumenty umožňující uživatelům spravovat aktivity správy systému a sítě. Níže jsou uvedeny nejběžnější lsof
případy použití.
Vypsat všechny soubory
Při spuštění bez jakýchkoli možností lsof
uvádí všechny soubory otevřené jakýmkoli procesem:
sudo lsof

lsof
příkaz vypíše spoustu podrobností. Proto vždy zadávejte lsof
s less
pro zobrazení výstupu po jedné stránce.
sudo lsof | less

Chcete-li přejít na konec seznamu, stiskněte Enter nebo šipka dolů . Opusťte seznam pomocí Q .
lsof
výstup se skládá z různých sloupců. Ne všechny sloupce však platí pro každý typ souboru. Záhlaví vypadá takto:

Výchozí sloupce v lsof
výstupy jsou:
- PŘÍKAZ - Odkazuje na příkaz spojený s procesem, který otevřel soubor.
- PID - Identifikační číslo procesu, ve kterém je soubor spuštěn.
- TID - Představuje identifikační číslo úkolu pro příslušný proces. Pokud soubor otevřel proces, nikoli úloha, pole je prázdné.
- TASKCMD - Odkazuje na název příkazu v prvním sloupci. Nicméně TASKCMD se může lišit, když úloha změní název příkazu.
- UŽIVATEL - Jmenuje uživatele, který provádí proces. Sloupec obsahuje ID uživatele nebo jméno.
- FD - Je deskriptor souboru, který proces používá k přidružení k souboru?
- TYP - Zobrazuje typ souboru a jeho identifikační číslo.
- ZAŘÍZENÍ - Vytiskne čísla zařízení související se souborem.
- VELIKOST/VYPNUTO - Představuje hodnotu nebo soubor pořízený během běhu (velikost nebo offset).
- NODE - Číslo uzlu místního souboru nebo číslo inodu adresáře/nadřazeného adresáře.
- NAME - Zobrazuje cestu nebo odkaz na soubor.
Skrýt bloky jádra
Výchozí lsof
výstup také obsahuje soubory, které jsou otevřeny jádrem. Chcete-li potlačit bloky jádra, spusťte lsof
s -b
příznak:
sudo lsof -b

Zobrazení souborů konkrétního souborového systému
Použijte lsof
příkaz pro zobrazení otevřených souborů v konkrétním systému souborů:
sudo lsof / [file system] /
Chcete-li například zobrazit všechny otevřené soubory v sys
adresář, spusťte:
sudo lsof / sys/

Tisk souborů terminálu
Seznam všech otevřených souborů připojených k terminálu zacílením na dev
adresář s lsof
:
lsof /dev/tty*

Zobrazit všechny soubory, ke kterým má uživatel přístup
Použijte lsof
s -u
příznak pro zobrazení souborů otevřených konkrétním uživatelem:
sudo lsof -u [username]
Například:
lsof -u saraz

Příkaz zobrazí seznam souborů, které otevřel saraz .
Chcete-li vytisknout všechny soubory otevřené všemi kromě konkrétního uživatele, spusťte:
sudo lsof -u ^[username]
Například:
lsof -u ^saraz

Výstup zobrazuje soubory ovládané jinými uživateli než saraz .
Zobrazení souborů používaných procesem
-c
flag otevře všechny soubory používané procesem:
sudo lsof -c [process]
Chcete-li například zobrazit seznam souborů otevřených pomocí wpa_suppl
proces, spusťte:
sudo lsof -c wpa_suppl

Další možností je použít pouze část názvu programu:
sudo lsof -c wpa

lsof
vrátí všechny programy začínající výrazem wpa
, která zahrnujewpa_suppl .
Navíc -c
volba poskytuje stejný výstup jako potrubí lsof
s grep :
sudo lsof | grep wpa_suppl

Tisk souborů otevřených konkrétním PID
Použijte -p
možnost filtrovat konkrétní soubory podle ID procesu (PID). Například níže uvedený výstup zobrazuje všechny soubory s PID 635.
sudo lsof -p 635

Na druhou stranu přidejte stříšku ^
symbol pro tisk souborů otevřených všemi ostatními procesy:
sudo lsof -p ^635

Navíc kombinuje lsof
s -R
příznak přidá na výstup identifikační číslo nadřazeného procesu (PPID).
Chcete-li získat informace o PPID pro konkrétní PID, spusťte:
sudo lsof -p [PID] -R
Chcete-li například získat PPID pro 635 PID, zadejte:
sudo lsof -p 635 -R

Výstup zobrazuje sloupec PPID přidaný do záhlaví.
Zobrazit soubory v adresáři
Chcete-li zobrazit všechny soubory, které byly otevřeny v adresáři, použijte následující příkaz:
sudo lsof +D [directory path]

Tato volba také rekuruje podadresáře. Chcete-li se vyhnout opakování, použijte +d
vlajka.
Zobrazit soubory, ke kterým přistupují síťová připojení
Použijte -i
příznak s lsof
zkontrolovat, které soubory jsou otevřeny síťovým připojením. Proveďte tento příkaz:
sudo lsof -i

Výše uvedený příklad vytiskne soubory otevřené síťovým připojením bez ohledu na typ připojení.
-i
flag přidává do lsof
mnoho všestrannosti , což uživatelům umožňuje filtrovat soubory na základě různých kritérií. Použijte lsof -i [options]
komu:
- Filtrujte soubory na základě jejich IP adresy s:
sudo lsof -i [IP version number]
Například spuštěním tohoto příkazu zobrazíte pouze soubory IPv4:
sudo lsof -i 4

Naopak tiskněte pouze soubory IPv6 s:
sudo lsof -i 6

- Zobrazit pouze soubory, které používají protokol tcp nebo udp připojení zadáním typu protokolu:
sudo lsof -i [udp or tcp]

- Najděte procesy běžící na konkrétním portu . Tato možnost je užitečná pro kontrolu, který soubor brání jiné aplikaci ve spojení s konkrétním portem. Spusťte příkaz s číslem portu nebo názvem služby ze sloupce názvu:
sudo lsof -i :[port number/name]

- Vytisknout všechny soubory otevřené na konkrétních rozsahech portů .
Chcete-li například zobrazit seznam otevřených souborů s rozsahy portů UDP 1-1024, spusťte:

Seznam ID procesů obsahujících otevřené soubory
Chcete-li zobrazit PID pro procesy, které otevřely konkrétní soubor, použijte -t
a zadejte název souboru.
lsof -t [file name]

Zabít všechny uživatelské procesy
-t
flag také zabije všechny procesy konkrétního uživatele. Chcete-li například zabít všechny procesy uživatelem notsara , spusťte tento příkaz jako root:
# kill -9 'lsof -t -u notsara'

Vytisknout všechny soubory mapované v paměti
lsof
vytiskne, které procesy mají soubory mapované v paměti. Chcete-li tyto procesy zobrazit, spusťte:
lsof -d mem

Zobrazit uzamčené smazané soubory
Proces někdy udržuje velké soubory uzamčené i poté, co byly smazány, což spotřebovává místo na disku.
Použijte Lsof
najít soubory, které jsou v Linuxu odstraněny, ale jsou stále uzamčeny jedním nebo více procesy.
Například vyhledejte smazané soubory z kořenového adresáře pomocí lomítka (/
) jako symbol cesty:
sudo lsof [path] | grep deleted

Kombinovat více možností
lsof
umožňuje více položek hledání na příkazovém řádku. Použijte A a NEBO logiku pro kombinování různých argumentů pro získání konkrétních výsledků. Níže jsou uvedeny nejběžnější příklady.
- Seznam souborů otevřených konkrétním uživatelem nebo proces s:
sudo lsof -u [username] -c [process]

Výstup vytiskne oba soubory otevřené uživatelem saraz a ty, které používá proces snapd .
- Zobrazit pouze soubory, které odpovídají prvnímu hledanému výrazu a druhému hledanému výrazu s logickým operátorem
-a
(a):
sudo lsof -u [username] -c [process] -a

V tomto případě lsof
zobrazuje pouze soubory otevřené uživatelem saraz a bash proces.
- Najděte všechna síťová připojení uživatele:
sudo lsof -i -u [username] -a

-i
a -a
příznaky s lsof
příkaz tisknout veškerou aktivitu uživatele root .
Další informace o lsof
lsof
příkaz má více možností než jakýkoli jiný příkaz Linux. man
stránka má téměř 2000 řádků a nabízí spoustu informací.
Chcete-li prozkoumat možnosti příkazu, spusťte:
man lsof

Závěr
Tento tutoriál vám ukáže, jak používat lsof
příkaz pro odstraňování potenciálních bezpečnostních a systémových problémů s praktickými příklady.
Dále se naučte kopírovat soubory a adresáře v Linuxu a porovnat dva soubory pomocí příkazu Linux diff.