Как узнать, какие файлы читает процесс в Linux?

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

Ответ

Для мониторинга файлов, открытых процессом, в DevOps-практике часто используются следующие инструменты:

1. Основной инструмент: lsof (List Open Files)

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

# Фильтровать только регулярные файлы, открытые для чтения
lsof -p 1234 | grep 'REG.*READ'

# Найти все процессы, читающие конкретный файл (например, конфигурацию)
lsof /etc/nginx/nginx.conf

2. Прямой доступ через виртуальную файловую систему /proc

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

# Узнать, на какой файл указывает конкретный дескриптор
readlink /proc/1234/fd/3

3. Для мониторинга в реальном времени (DevOps-сценарии)

# Отслеживать, какие файлы открывает процесс при запуске
strace -e open,openat -p 1234 2>&1 | grep -v ENOENT

# Использовать в скриптах для аудита безопасности
for pid in $(pgrep nginx); do
    echo "PID $pid открывает:"
    lsof -p $pid | grep REG
done

Практическое применение в DevOps:

  • Диагностика утечек файловых дескрипторов у веб-серверов
  • Аудит доступа к конфиденциальным файлам (сертификаты, ключи)
  • Оптимизация производительности приложения (поиск частых операций I/O)
  • Расследование инцидентов безопасности