Sobes.tech
Middle
101
questionbank

Как можно узнать, с какими файлами в данный момент работает программа в Linux?

Ответ от нейросети

sobes.tech AI

Используя утилиту lsof (list open files).

# Базовое использование lsof для вывода списка всех открытых файлов
lsof

Для получения списка открытых файлов определенным процессом (по PID):

# Вывести список открытых файлов для процесса с PID 1234
lsof -p 1234

Для получения списка открытых файлов определенной командой (по имени):

# Вывести список открытых файлов для всех процессов с именем "nginx"
lsof -c nginx

Для получения списка открытых файлов открытых определенным пользователем:

# Вывести список открытых файлов для пользователя "user1"
lsof -u user1

Дополнительные флаги lsof:

Флаг Описание
-i Вывести список сетевых соединений (сокеты)
-n Не преобразовывать IP-адреса в имена хостов
-P Не преобразовывать порты в имена сервисов
-r [N] Перезапускать lsof каждые N секунд

Пример использования для определения, какой процесс использует определенный файл:

# Какой процесс использует файл /var/log/syslog?
lsof /var/log/syslog

Вывод lsof включает следующие колонки:

  • COMMAND: Имя команды, запустившей процесс.
  • PID: Идентификатор процесса.
  • TID: Идентификатор потока (если применимо).
  • USER: Имя пользователя, запустившего процесс.
  • FD: Дескриптор файла (file descriptor).
  • TYPE: Тип узла файла (DIR, REG, FIFO, CHR, BLK, SOCK, etc.).
  • DEVICE: Идентификатор устройства.
  • SIZE/OFF: Размер файла или смещение.
  • NODE: Номер inode.
  • NAME: Имя файла или сетевой адрес.