Ответ
Для анализа открытых файлов процесса используется утилита 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" ошибок
- Поиска утечек файловых дескрипторов
- Определения, какие файлы блокируют размонтирование диска
- Анализа активности процессов при инцидентах