Jak zjistit, kdo používá soubor v Linuxu
V tomto článku si vysvětlíme, jak zjistit, kdo používá konkrétní soubor v Linuxu. To vám pomůže poznat uživatele systému nebo proces, který používá otevřený soubor.
Můžeme použít příkaz lsof, abychom zjistili, zda někdo používá soubor, a pokud ano, kdo. Při hledání otevřených souborů čte paměť jádra a pomáhá vám vypsat všechny otevřené soubory. V tomto případě může být otevřený soubor běžný soubor, adresář, blokový speciální soubor, znakový speciální soubor, proud, síťový soubor a mnoho dalších – protože v Linuxu je vše soubor.
Lsof se používá v systému souborů k identifikaci toho, kdo používá nějaké soubory v tomto systému souborů. V systému souborů Linux můžete spustit příkaz lsof a výstup identifikuje vlastníka a informace o procesu pro procesy používající soubor, jak je znázorněno v následujícím výstupu.
lsof /dev/null
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1480 tecmint 0r CHR 1,3 0t0 6 /dev/null
sh 1501 tecmint 0r CHR 1,3 0t0 6 /dev/null
sh 1501 tecmint 1w CHR 1,3 0t0 6 /dev/null
dbus-daem 1530 tecmint 0u CHR 1,3 0t0 6 /dev/null
xfce4-ses 1603 tecmint 0r CHR 1,3 0t0 6 /dev/null
xfce4-ses 1603 tecmint 1w CHR 1,3 0t0 6 /dev/null
at-spi-bu 1604 tecmint 0r CHR 1,3 0t0 6 /dev/null
dbus-daem 1609 tecmint 0u CHR 1,3 0t0 6 /dev/null
at-spi2-r 1611 tecmint 0u CHR 1,3 0t0 6 /dev/null
xfconfd 1615 tecmint 0u CHR 1,3 0t0 6 /dev/null
xfwm4 1624 tecmint 0r CHR 1,3 0t0 6 /dev/null
xfwm4 1624 tecmint 1w CHR 1,3 0t0 6 /dev/null
xfce4-pan 1628 tecmint 0r CHR 1,3 0t0 6 /dev/null
xfce4-pan 1628 tecmint 1w CHR 1,3 0t0 6 /dev/null
Thunar 1630 tecmint 0r CHR 1,3 0t0 6 /dev/null
Thunar 1630 tecmint 1w CHR 1,3 0t0 6 /dev/null
xfdesktop 1632 tecmint 0r CHR 1,3 0t0 6 /dev/null
xfdesktop 1632 tecmint 1w CHR 1,3 0t0 6 /dev/null
....
Chcete-li zobrazit seznam otevřených souborů specifických pro uživatele, spusťte následující příkaz nahraďte tecmint
skutečným uživatelským jménem.
lsof -u tecmint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1480 tecmint cwd DIR 8,3 4096 2 /
systemd 1480 tecmint rtd DIR 8,3 4096 2 /
systemd 1480 tecmint txt REG 8,3 1595792 3147496 /lib/systemd/systemd
systemd 1480 tecmint mem REG 8,3 1700792 3150525 /lib/x86_64-linux-gnu/libm-2.27.so
systemd 1480 tecmint mem REG 8,3 121016 3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9
systemd 1480 tecmint mem REG 8,3 84032 3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
systemd 1480 tecmint mem REG 8,3 43304 3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
systemd 1480 tecmint mem REG 8,3 34872 2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0
systemd 1480 tecmint mem REG 8,3 432640 3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
systemd 1480 tecmint mem REG 8,3 18680 3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd 1480 tecmint mem REG 8,3 18712 3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd 1480 tecmint mem REG 8,3 27112 3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd 1480 tecmint mem REG 8,3 14560 3150485 /lib/x86_64-linux-gnu/libdl-2.27.so
...
Dalším důležitým využitím lsof je zjištění procesu naslouchajícího na konkrétním portu. Například identifikujte proces naslouchající na portu 80 pomocí následujícího příkazu.
sudo lsof -i TCP:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 903 root 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 1320 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 1481 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 1482 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 1493 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 1763 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 2027 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 2029 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 2044 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 3199 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
httpd 3201 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)
Poznámka: Protože lsof čte paměť jádra při hledání otevřených souborů, rychlé změny v paměti jádra mohou vést k nepředvídatelným výstupům. Toto je jedna z hlavních nevýhod použití příkazu lsof.
Další informace naleznete na manuálové stránce lsof:
man lsof
To je vše! V tomto článku jsme vysvětlili, jak zjistit, kdo používá konkrétní soubor v Linuxu. Ukázali jsme, jak identifikovat vlastníka a zpracovat informace pro procesy pomocí otevřeného souboru. Pokud máte nějaké dotazy nebo připomínky, použijte níže uvedený formulář zpětné vazby.