Найти в Дзене
Merion Academy

Нужно знать: утилита lsof в Linux

В этой статье мы объясним, как узнать, кто использует тот или иной файл в Linux. Это поможет вам узнать системного пользователя или процесс, который использует открытый файл. КАК УЗНАТЬ, КТО ИСПОЛЬЗУЕТ ФАЙЛ В LINUX? Мы можем использовать команду lsof (которая является аббревиатурой от List Of Opened Files), чтобы узнать, использует ли кто-то файл, и если да, то кто. Он читает память ядра в поиске открытых файлов и перечисляет все открытые файлы. В этом случае открытый файл может быть обычным файлом, каталогом, специальным файлом блока, специальным файлом символов, потоком, сетевым файлом и многими другими, поскольку в Linux все является файлом. Lsof используется в файловой системе, чтобы определить, кто использует какие-либо файлы в этой файловой системе. Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах для процессов, использующих файл, как показано в следующих выходных данных. $ lsof /dev/null Список всех от

В этой статье мы объясним, как узнать, кто использует тот или иной файл в Linux. Это поможет вам узнать системного пользователя или процесс, который использует открытый файл.

КАК УЗНАТЬ, КТО ИСПОЛЬЗУЕТ ФАЙЛ В LINUX?

Мы можем использовать команду lsof (которая является аббревиатурой от List Of Opened Files), чтобы узнать, использует ли кто-то файл, и если да, то кто. Он читает память ядра в поиске открытых файлов и перечисляет все открытые файлы. В этом случае открытый файл может быть обычным файлом, каталогом, специальным файлом блока, специальным файлом символов, потоком, сетевым файлом и многими другими, поскольку в Linux все является файлом.

Lsof используется в файловой системе, чтобы определить, кто использует какие-либо файлы в этой файловой системе. Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах для процессов, использующих файл, как показано в следующих выходных данных.

$ lsof /dev/null

Список всех открытых файлов в Linux

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1480 merionet 0r CHR 1,3 0t0 6 /dev/null
sh 1501 merionet 0r CHR 1,3 0t0 6 /dev/null
sh 1501 merionet 1w CHR 1,3 0t0 6 /dev/null
dbus-daem 1530 merionet 0u CHR 1,3 0t0 6 /dev/null
xfce4-ses 1603 merionet 0r CHR 1,3 0t0 6 /dev/null
xfce4-ses 1603 merionet 1w CHR 1,3 0t0 6 /dev/null
at-spi-bu 1604 merionet 0r CHR 1,3 0t0 6 /dev/null
dbus-daem 1609 merionet 0u CHR 1,3 0t0 6 /dev/null
at-spi2-r 1611 merionet 0u CHR 1,3 0t0 6 /dev/null
xfconfd 1615 merionet 0u CHR 1,3 0t0 6 /dev/null
xfwm4 1624 merionet 0r CHR 1,3 0t0 6 /dev/null
xfwm4 1624 merionet 1w CHR 1,3 0t0 6 /dev/null
xfce4-pan 1628 merionet 0r CHR 1,3 0t0 6 /dev/null
xfce4-pan 1628 merionet 1w CHR 1,3 0t0 6 /dev/null
Thunar 1630 merionet 0r CHR 1,3 0t0 6 /dev/null
Thunar 1630 merionet 1w CHR 1,3 0t0 6 /dev/null
xfdesktop 1632 merionet 0r CHR 1,3 0t0 6 /dev/null
xfdesktop 1632 merionet 1w CHR 1,3 0t0 6 /dev/null
....

Чтобы вывести список файлов, открытых для конкретного пользователя, выполните следующую команду: замените merionet вашим именем пользователя.

$ lsof -u merionet

Список файлов, открытых пользователем:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1480 merionet cwd DIR 8,3 4096 2 /
systemd 1480 merionet rtd DIR 8,3 4096 2 /
systemd 1480 merionet txt REG 8,3 1595792 3147496 /lib/systemd/systemd
systemd 1480 merionet mem REG 8,3 1700792 3150525 /lib/x86_64-linux-gnu/libm-2.27.so
systemd 1480 merionet mem REG 8,3 121016 3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9
systemd 1480 merionet mem REG 8,3 84032 3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
systemd 1480 merionet mem REG 8,3 43304 3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
systemd 1480 merionet mem REG 8,3 34872 2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0
systemd 1480 merionet mem REG 8,3 432640 3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
systemd 1480 merionet mem REG 8,3 18680 3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd 1480 merionet mem REG 8,3 18712 3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd 1480 merionet mem REG 8,3 27112 3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd 1480 merionet mem REG 8,3 14560 3150485 /lib/x86_64-linux-gnu/libdl-2.27.so
...

Еще одно важное использование lsof - выяснение процесса прослушивания определенного порта. Например, определите процесс, прослушивающий порт 80, с помощью следующей команды.

$ 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)

Примечание: поскольку lsof читает память ядра при поиске открытых файлов, быстрые изменения в памяти ядра могут привести к непредсказуемым результатам. Это один из основных недостатков использования команды lsof.

Для получения дополнительной информации, смотрите справку lsof:

$ man lsof

На этом все! В этой статье мы объяснили, как узнать, кто использует тот или иной файл в Linux.