Občas čelíme situacím, kdy nemůžeme odpojit disk, protože říká, že soubory jsou používány, ale nemůžeme pochopit, na který soubor se odkazuje. V takových situacích můžeme zkontrolovat, které soubory jsou otevřeny kterým procesem běžícím v systému.
To lze provést pomocí příkazu lsof, což znamená Seznam otevřených souborů. Protože Linux považuje vše, včetně adresářů, zařízení, soketů a tak dále za soubory, můžeme použít lsof ke snadné identifikaci všech otevřených souborů.
Pokud právě spustíme lsof, zobrazí seznam všech otevřených souborů, které patří k jakémukoli aktivnímu procesu v systému. Pokud je výstup dlouhý, můžeme k procházení výstupu použít příkaz less:
# lsof | less
Zobrazený výstup obsahuje sloupce jako Příkaz, PID, Uživatel, FD, Typ, Zařízení atd. pro lepší pochopení souborů. Sloupec FD obsahuje informace o popisu souboru, jako je aktuální pracovní adresář (CWD), kořenový adresář (RTD), text programu (TXT) a tak dále. Pokud sloupec FD obsahuje informace jako 0u, 1u atd., číslo označuje skutečný deskriptor souboru a abeceda označuje různé režimy (přístup pro čtení, přístup pro zápis a přístup pro čtení/zápis).
pokud při spuštění příkazu lsof narazíte na níže uvedenou chybu:
lsof: command not found
ypu může nainstalovat níže uvedený balíček podle vašeho výběru distribuce.
Distribuce | Příkaz |
---|---|
OS X | brew install lsof |
Debian | apt-get install lsof |
Ubuntu | apt-get install lsof |
Alpine | apk přidat lsof |
Arch Linux | pacman -S lsof |
Kali Linux | apt-get install lsof |
CentOS | yum install lsof |
Fedora | dnf install lsof |
Raspbian | apt-get install lsof |
Často používané možnosti lsof
- -c x :Zobrazí pouze soubory, které jsou otevřeny procesy, jejichž spustitelný soubor začíná znakem (znaky) určeným x.
- -i x :Místo zobrazení otevřených souborů zobrazí sokety, jejichž internetová adresa je x. Pokud není zadáno x, zobrazit všechna připojení IP. To je funkčně ekvivalentní k netstat –anp.
- -u uživatelské jméno :Zobrazí pouze soubory, které má uživatelské jméno otevřené.
- -P :Nepřevádějte čísla portů na názvy portů (například zobrazte 25 místo smtp).
lsof příkladů příkazů
Jednoduchým spuštěním příkazů lsof získáme seznam všech otevřených souborů v systému. Použitím volby -u a zadáním uživatelského jména získáme seznam otevřených souborů pro konkrétního uživatele. Když použijeme volbu -i a zadáme číslo portu, získáme informace o jakémkoli procesu běžícím na tomto portu. Když použijeme obě volby -i a -u s konkrétním uživatelským jménem, získáme informace o souborech a příkazech, ke kterým daný uživatel přistupuje.
1. Najděte procesy, které mají daný soubor otevřený:
# lsof path/to/file
2. Najděte proces, který otevřel místní internetový port:
# lsof -i :port
3. Zadejte pouze ID procesu (PID):
# lsof -t path/to/file
4. Seznam souborů otevřených daným uživatelem:
# lsof -u username
5. Seznam souborů otevřených daným příkazem nebo procesem:
# lsof -c process_or_command_name
6. Uveďte seznam souborů otevřených konkrétním procesem podle jeho PID:
# lsof -p PID
7. Seznam otevřených souborů v adresáři:
# lsof +D path/to/directory
8. Najděte proces, který naslouchá na místním portu IPv6 TCP a nepřevádějte síť ani čísla portů:
# lsof -i6TCP:port -sTCP:LISTEN -n -P
9. Seznam procesů, které mají otevřený váš domovský adresář:
# lsof ~
10. Seznam všech otevřených souborů ve vašem domovském adresáři:
# lsof +D
11. Vypište soubory otevřené procesy, jejichž názvy začínají na „i“ a jejichž vlastníkem je „geek“:
# lsof -a -c i -u geek
12. Seznam souborů pomocí TCP portu 80, opakování každé dvě sekundy, dokud není lsof ukončen:
Poslední slova
lsof uvádí otevřené soubory. Protože vše v Linuxu je soubor, tento nástroj vám může sdělit fantastické množství informací o vašem běžícím systému. Primárně se používá k určení toho, jaké procesy mají jaké soubory otevřené, ale lze jej mimo jiné použít také k zobrazení informací o připojení TCP a UDP.