Преимущество Linux в том, что вы можете легко просматривать и управлять всем: от процесса загрузки до установки пакетов программного обеспечения. Здесь мы обсудим, как использовать команду lsof в Linux для просмотра открытых файлов и процессов, использующих их. Знание того, как это просмотреть, поможет вам понять, как работает система, и даже предпринять необходимые действия для конкретных процессов.
Команда Lsof
Для просмотра открытых файлов и ответственных за них пользователей или процессов мы используем утилиту lsof
. По умолчанию в большинстве дистрибутивов предустановлен lsof
.
Однако, если он у вас не установлен, вы можете использовать менеджер пакетов, чтобы установить
Contents
Команда Lsof
Debian/Ubuntu
В Debian выполните команду:
sudo apt-get install lsof
Арка/Манджаро
В Manjaro и других дистрибутивах на основе Arch используйте pacman, выполнив команду:
sudo pacman -S lsof
CentOS/REHL/Fedora
Для CentOS и семейства REHL вы можете использовать dnf:
sudo dnf install lsof
Используйте команду lsof для получения списка открытых файлов процесса Linux
Как и большинство команд Linux, утилита lsof невероятно проста в использовании. Начните с ввода команды lsof
:
sudo lsofDebian/Ubuntuолнения приведенной выше команды lsof должен вернуть информацию об открытых файлах в системе.Арка/Манджаро
TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096CentOS/REHL/Fedora
>2 / init 1 root rtd DIR 8,48 4096Используйте команду lsof для получения списка открытых файлов процесса Linuxot txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
Примечание. если у вас есть привилегии sudo, запустите команду с помощью sudo
, чтобы избежать ошибок «отказано в разрешении» для определенных файлов.
Как показано в приведенном выше выводе, вывод lsof имеет следующие столбцы:
Столбец | Представление |
---|---|
Команда | Показывает имя процесса, использующего целевой файл. |
PID | Уникальный идентификатор процесса, использующего файл. |
TID | В столбце отображается идентификатор потока. |
TASKCMD | Имя команды задачи. |
USER | Имя пользователя или UID пользователь, запускающий процесс. |
FD | Файловый дескриптор файла и режимов. |
TYPE | Узел, связанный с целевым файлом. |
УСТРОЙСТВО | Номер устройства, разделенный запятыми. | SIZE/OFF | Размер файла в байтах по размеру смещения файла |
NODE | Значение индексного дескриптора локального файла. Вы можете использовать команду stat, чтобы показать inode информацию о файле. |
NAME | Точка монтирования файла. |
Теперь, когда вы понимаете, что представляет собой содержимое распечатки команды lsof, давайте воспользуемся этой командой для фильтрации конкретной информации.
Как фильтровать определенный процесс
Чтобы фильтровать только определенные файлы, открытые определенным процессом, мы можем использовать либо имя процесса, либо значение PID.
Например, чтобы показать файлы, используемые процессом Firefox, мы можем использовать команду:
sudo lsof -c firefox
Команда покажет все файлы, открытые процессом Firefox.
Чтобы фильтровать по идентификатору процесса, мы можем использовать параметр -p
и передать идентификатор процесса. Вы можете использовать команду top
, чтобы получить идентификатор целевого процесса.
Например, чтобы получить PID процесса Firefox, мы можем использовать команду:
sudo ps aux | grep firefox
После получения PID целевого процесса используйте lsof, чтобы отобразить открытые файлы:
sudo lsof -p 2121
Приведенная выше команда распечатает файлы, открытые процессом с указанным PID.
Как фильтровать по конкретному пользователю
Чтобы просмотреть только файлы, открытые конкретным пользователем, мы можем использовать флаг -u
. Например, чтобы отфильтровать пользователя Debian, используйте команду:
sudo lsof -u debian
Как фильтровать определенный файл
Предположим, вы хотите знать только процесс и пользователя, открывшего определенный файл. Для этого передайте им
Как фильтровать определенный процесс
an> lsof /bin/sleepПриведенный выше пример будет фильтровать только конкретный файл и возвращать соответствующую информацию, включая пользователя, идентификатор процесса и т. д.
Подведение итогов
В этом простом руководстве мы обсудили, как запросить в системе информацию об открытых файлах с помощью команды lsof в Linux. Вот еще несколько команды для вывода списка содержимого каталогов в терминале.