Как определить, с какими файлами работает процесс в Linux?

«Как определить, с какими файлами работает процесс в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для анализа открытых файлов процесса используется утилита lsof (List Open Files). Это критически важный инструмент для диагностики проблем с файловыми дескрипторами, блокировками файлов или утечками ресурсов.

Базовое использование:

# Показать все открытые файлы для процесса по его PID
lsof -p <PID>

# Найти PID процесса и сразу посмотреть его открытые файлы
lsof -p $(pgrep nginx | head -n1)

# Фильтрация по имени процесса (без знания PID)
lsof -c nginx

Практические примеры для DevOps:

# 1. Какие файлы конфигурации открыты процессом?
lsof -p $(pgrep nginx) | grep '.conf$'

# 2. Какие лог-файлы пишет процесс?
lsof -p $(pgrep app) | grep '.log$'

# 3. Какие сетевые соединения установлены?
lsof -p <PID> -i

# 4. Показать только обычные файлы (исключая сокеты, pipes и т.д.)
lsof -p <PID> | grep 'REG'

# 5. Найти процесс, блокирующий конкретный файл (например, при unmount)
lsof /path/to/locked/file

Ключевые опции lsof:

  • -p PID — фильтр по идентификатору процесса
  • -c name — фильтр по имени команды/процесса
  • -u user — фильтр по пользователю
  • -i — показать сетевые файлы (сокеты)
  • +D /dir — рекурсивно показать файлы в директории

Альтернативный метод через procfs:

# Посмотреть файловые дескрипторы процесса
ls -la /proc/<PID>/fd/

# Узнать, на какие файлы они ссылаются
ls -la /proc/<PID>/fd/* | grep '->'

В DevOps-практике lsof часто используется для:

  • Диагностики "Too many open files" ошибок
  • Поиска утечек файловых дескрипторов
  • Определения, какие файлы блокируют размонтирование диска
  • Анализа активности процессов при инцидентах