/proc (procfs) — виртуальная файловая система, предоставляющая доступ к:

  • информации о процессах
  • состоянию ядра
  • параметрам конфигурации системы

Файловая система формируется ядром динамически и не хранит данные на диске.

Тип монтирования:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

Назначение

procfs решает три основные задачи:

  1. Экспорт информации о процессах
  2. Предоставление агрегированного состояния системы
  3. Интерфейс управления параметрами ядра (через /proc/sys)

Модель данных

Общая структура

Иерархия /proc состоит из:

  • каталогов процессов (/proc/<pid>)
  • системных информационных файлов (/proc/*)
  • конфигурационного пространства (/proc/sys)

Структура не является строгим отражением внутренних структур ядра.


Представление данных

  • Формат преимущественно текстовый
  • Часто содержит:
    • key-value пары
    • табличные данные
    • агрегированные метрики
  • Один файл может содержать несколько логически независимых значений

Пример:

cat /proc/meminfo

Каталоги процессов

Каждый процесс представлен каталогом:

/proc/<pid>/

Основные файлы

  • cmdline — аргументы запуска
  • status — состояние процесса (читаемый формат)
  • stat — состояние (машиночитаемый формат)
  • maps — карта памяти
  • fd/ — открытые файловые дескрипторы
  • environ — переменные окружения
  • exe — символическая ссылка на исполняемый файл
  • cwd — текущая рабочая директория

Особенности

  • Данные обновляются в реальном времени
  • Некоторые файлы требуют повышенных привилегий
  • Форматы могут различаться между версиями ядра

Системные файлы

Общая информация

  • /proc/cpuinfo — информация о CPU
  • /proc/meminfo — использование памяти
  • /proc/uptime — время работы системы
  • /proc/loadavg — средняя нагрузка
  • /proc/version — версия ядра

Поведение

  • Представляют агрегированные данные
  • Формат ориентирован на человека и парсинг
  • Не гарантируют стабильный ABI

/proc/sys (sysctl)

Назначение

Интерфейс для настройки параметров ядра во время выполнения.

Альтернативный доступ:

sysctl -a
sysctl -w key=value

Структура

Иерархия отражает подсистемы ядра:

  • /proc/sys/net/ — сеть
  • /proc/sys/vm/ — управление памятью
  • /proc/sys/fs/ — файловые системы
  • /proc/sys/kernel/ — общие параметры ядра

Пример:

/proc/sys/net/ipv4/ip_forward

Семантика

  • Значения читаются через read
  • Изменяются через write
  • Изменения применяются немедленно
  • Обычно не сохраняются после перезагрузки (если не настроен sysctl.conf)

Интерфейс и операции

Поддерживаемые операции

  • open
  • read
  • write (ограниченно)
  • readdir

Особенности

  • Размер файлов может быть динамическим
  • Некоторые файлы генерируются при каждом чтении
  • Запись может иметь побочные эффекты

Ограничения и особенности

  • Отсутствие строгой схемы данных
  • Нестабильность форматов (особенно для парсинга)
  • Возможны race conditions при чтении изменяющихся данных
  • Некоторые интерфейсы считаются устаревшими

Безопасность

  • Доступ контролируется правами файлов и capability
  • Некоторые данные скрываются для непривилегированных пользователей
  • Возможны ограничения через:
    • hidepid
    • namespaces (PID namespace)

Практическое использование

Диагностика

  • анализ процессов
  • проверка состояния системы
  • отладка

Мониторинг

  • сбор метрик
  • интеграция с агентами мониторинга

Управление

  • изменение параметров через /proc/sys
  • настройка сетевых и системных параметров

Ограничения для разработки

  • Не рекомендуется полагаться на стабильность форматов
  • Для новых интерфейсов предпочтительнее sysfs
  • Для сложных взаимодействий использовать:
    • netlink
    • ioctl
    • специализированные API

12. Краткое определение

/proc — виртуальная файловая система, предоставляющая доступ к состоянию процессов, агрегированным данным системы и параметрам ядра через файловый интерфейс.