proc (procfs) и sys (sysfs) — виртуальные файловые системы, предоставляющие пользовательскому пространству доступ к данным и механизмам управления ядра Linux через файловый интерфейс.

Обе файловые системы:

  • не имеют постоянного хранения (in-memory)
  • формируются ядром динамически
  • монтируются обычно в /proc и /sys

/proc (procfs)

Назначение

Предоставление:

  • информации о процессах
  • агрегированного состояния системы
  • интерфейса к параметрам ядра (через /proc/sys)

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

  • Иерархия частично отражает процессы (/proc/<pid>)
  • Остальные файлы представляют собой логические представления состояния ядра
  • Формат данных не стандартизирован (чаще текст, иногда сложные структуры)

Интерфейс

Тип операций:

  • read — получение состояния
  • write — изменение параметров (в ограниченных случаях)

Пример:

  • /proc/meminfo — агрегированные метрики памяти
  • /proc/<pid>/status — состояние процесса
  • /proc/sys/net/ipv4/ip_forward — параметр ядра

Свойства

  • Отсутствие строгой схемы
  • Возможны агрегированные и многозначные представления
  • Исторически сложившийся интерфейс
  • Частично заменяется sysfs для новых подсистем

/sys (sysfs)

Назначение

Экспорт внутренней объектной модели ядра (device model) в пользовательское пространство.

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

  • Основана на kobject
  • Иерархия напрямую соответствует структурам ядра
  • Каждый файл представляет один атрибут объекта

Интерфейс

Тип операций:

  • read — получение значения атрибута
  • write — изменение конфигурации объекта (если разрешено)

Пример:

  • /sys/devices/... — дерево устройств
  • /sys/class/net/eth0/ — сетевой интерфейс
  • /sys/block/sda/queue/read_ahead_kb — параметр блочного устройства

Свойства

  • Строгая структура (один файл = одно значение)
  • Типизированная модель (атрибуты объектов)
  • Стабильный ABI (в рамках user-space контрактов)
  • Предпочтительный интерфейс для драйверов и устройств

Сравнение

Семантика

  • /proc:
    • представление состояния (state-oriented)
    • допускает агрегацию и форматирование
  • /sys:
    • представление объектов (object-oriented)
    • атомарные атрибуты

Структура

  • /proc:
    • частично иерархическая
    • не отражает внутренние структуры ядра напрямую
  • /sys:
    • строго иерархическая
    • отражает device model

Контракт интерфейса

  • /proc:
    • менее формализован
    • возможны изменения форматов
  • /sys:
    • формализованный ABI
    • требования к стабильности пользовательского интерфейса

Использование

  • /proc:
    • диагностика
    • мониторинг
    • работа с процессами
    • sysctl (/proc/sys)
  • /sys:
    • управление устройствами
    • настройка драйверов
    • introspection device model

Практические ограничения

  • Не гарантируется стабильность всех файлов /proc
  • В /sys запрещены:
    • сложные форматы
    • множественные значения в одном файле
  • Запись в оба интерфейса требует учета прав доступа и side effects

Рекомендации

  • Для новой функциональности:
    • использовать sysfs
  • Для работы с процессами:
    • использовать procfs
  • Для изменения параметров ядра:
    • использовать sysctl (поверх /proc/sys) или специализированные интерфейсы /sys

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

  • /proc — интерфейс состояния системы и процессов
  • /sys — интерфейс объектной модели устройств ядра