V Linuxu je vše považováno za soubory a organizované uvnitř adresářů. lsof (List of Open File) zobrazuje seznam souborů, které jsou otevřeny. Pomáhá hlavně zjistit informace o procesu, který soubory otevřel. Kromě souborů může vypsat adresář, speciální blokový soubor, sdílenou knihovnu, speciální soubor znaků, běžný kanál, pojmenovaný kanál, internetový soket, soket domény UNIX a mnoho dalších.
V tomto tutoriálu se seznámíme s příkazem lsof v Linuxu pomocí snadno srozumitelných příkladů .
příkaz lsof
Příkaz lsof je standardně dostupný ve většině distribucí Linuxu. Příkaz lsof se velmi běžně používá, když nejsme schopni odpojit disk, pak příkaz lsof pomáhá najít otevřený soubor a jeho proces, který to způsobuje.
Syntaxe:
lsof [options] [names]
Výše uvedená syntaxe zobrazí seznam všech souborů, které byly otevřeny všemi procesy v systému.
1. Seznam všech otevřených souborů
Chcete-li rychle získat seznam otevřených souborů, zadejte lsof. Obsahuje seznam všech souborů, které byly otevřeny různými procesy systému.
$ lsof
Normálně bude výstup velmi dlouhý, použijete $ sudo lsof | more
, pokud chcete obsah zobrazit po jedné obrazovce.
2. Seznam otevřených souborů podle uživatelského jména
lsof má příkaz, který lze použít k nalezení seznamu konkrétních souborů, které jsou otevřeny konkrétním uživatelem.
Pro seznam otevřených souborů podle uživatelského jména použijte následující příkaz:
$ lsof -u bobbin
Pro více uživatelů použijte následující syntaxi:
$ lsof -u [username1] -u [username2]
NEBO
$ lsof -u [username1], [username2]
Chcete-li zobrazit seznam otevřených souborů kromě určitých uživatelů:
$ lsof -u ^root
Chcete-li uvést pouze ID procesu, použijte -t
možnost.
$ lsof -t -u sonar
To bude užitečné v případě, že potřebujete ukončit všechny procesy související s konkrétním použitím.
$ kill -9 lsof -t -u sonar
3. Seznam otevřených souborů podle procesu
lsof lze také použít k zobrazení seznamu souborů otevřených konkrétním procesem pomocí -c
možnost následovaná názvem procesu.
Chcete-li například zobrazit seznam všech otevřených souborů podle ssh:
$ lsof -c ssh
4. Seznam otevřených souborů podle názvu souboru
Můžeme zadat název souboru jako argument pro seznam všech procesů, které otevřely konkrétní soubor.
Chcete-li zobrazit seznam všech procesů otevřených souborem /var/log/messages, napište:
$ lsof /var/log/messages
5. Seznam otevřených souborů podle ID procesu
Každému souboru je přiřazeno ID procesu. Jeden proces může otevřít velké množství souborů. Můžeme použít příkaz lsof k zobrazení seznamu všech otevřených souborů pro dané ID procesu.
Chcete-li například zobrazit otevřené soubory s ID procesu 2, zadejte:
$ lsof -p 2
Incase pro seznam otevřených souborů pro více ID procesů zadejte
$ lsof -p 2,3
Systém obsahuje velké množství procesů, z nichž každý má soubory otevřené k použití. Proces může mít mnoho podřízených procesů a tento proces je také známý jako nadřazený proces.
Příkaz lsof se používá s -R
možnost získat seznam souborů otevřených pomocí PPID (Parent Process IDentification).
$ lsof -R
Z výstupu můžete v 5. sloupci zobrazit PPID otevřených souborů.
Chcete-li najít PPID pro konkrétní PID, zadejte:
$ lsof -p [PID] -R
6. Seznam otevřených souborů v adresáři
Chcete-li zobrazit seznam otevřených souborů v konkrétním adresáři, můžeme použít příkaz lsof.
Použijte +d
možnost zobrazit seznam otevřených souborů v zadaném adresáři, ale nepřechází do podadresářů.
Následující příklad prohledává otevřené soubory v adresáři /var/log:
$ lsof +d /var/log
Volba +D přikazuje lsof prohledat celou hloubku adresáře pro všechny otevřené instance a také všechny soubory a adresáře, které obsahuje.
V tomto případě lsof hledá otevřené soubory v /var/log a jeho podadresářích:
$ lsof +D /var/log
7. Seznam otevřených souborů se síťovým protokolem
Systém může být připojen k různým sítím pro různé účely. Vše v Linuxu je soubor, můžeme zkoumat soubory, které se otevírají nějakým síťovým připojením v systému.
Chcete-li zobrazit seznam otevřených souborů v protokolu TCP, můžeme spustit následující příkaz.
$ lsof -i TCP
Chcete-li zobrazit seznam otevřených souborů v protokolu UDP, můžeme spustit následující příkaz.
$ sudo lsof -i UDP
8. Seznam otevřených souborů podle čísla portu
lsof má příkaz, který konkrétně vypisuje otevřené soubory na daném čísle portu, aby vypsal všechny procesy běžící na tomto portu.
Například pro výpis otevřených souborů na portu číslo 443
$ lsof -i :443
Otevřené soubory pro více čísel portů můžete vypsat následovně:
$ lsof -i :80,443
Můžete také zobrazit seznam otevřených souborů TCP nebo UDP podle rozsahů portů.
$ lsof -i TCP:1-49151
9. Seznam otevřených souborů podle IPv4/IPv6
V lsof je možnost zobrazit otevřené síťové soubory IPv4 nebo IPv6.
Chcete-li zobrazit otevřené soubory IPv4, zadejte
$ lsof -i4
K zobrazení otevřených souborů IPv6 lze použít následující syntaxi:
$ lsof -i6
10. Spouštět lsof nepřetržitě
Režim opakování umožňuje lsof neustále se opakovat s aktualizacemi se zadanými zpožděními. Režim opakování lze povolit pomocí možnosti „-r“ nebo „+r“, kde „+r“ skončí, když nebudou nalezeny žádné otevřené soubory, a „-r“ bude pokračovat v seznamu, dokud nebude zahájeno ruční přerušení. Každý výstup cyklu zpoždění bude oddělen pomocí „========“.
Syntaxe:
$ lsof [options] -r/+r[time-interval]
Například:
$ lsof -u sonar -r5
Záhlaví příkazů lsof
lsof
má různé sloupce.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
Název příkazu UNIX přidruženého k procesu je uložen v COMMAND
sloupec.
PID
zobrazí ID procesu příkazu.
USER
zobrazí jméno uživatele spojeného s následujícím procesem.
TID
zobrazuje ID úkolu.
FD
je deskriptor souboru, který zahrnuje zkratky jako cwd (aktuální pracovní adresář), txt (textové soubory), mem (soubor mapovaný v paměti), rtd (kořenový adresář) a mnoho dalších.
TYPE
je zkratka pro určitý typ souboru, jako je REG (běžný soubor), DIR (adresář), CHR (zvláštní soubor znaků) a tak dále.
DEVICE
obsahuje čísla zařízení.
SIZE/OFF
obsahuje velikost souboru nebo posun souboru v bajtech.
NODE
hodnota sloupce představuje číslo uzlu místního souboru.
NAME
zobrazí název bodu připojení a systému souborů souboru a také internetovou adresu.
Závěr
V tomto tutoriálu jsme se na příkladech dozvěděli o příkazu lsof a jeho použití. lsof poskytuje řadu možností pro přizpůsobení výstupu tak, aby vyhovoval vašim potřebám. Umožňuje vám snadno a rychle kombinovat více argumentů pro získání požadovaného výstupu.