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: Имя файла или сетевой адрес.