Proc в Linux — как читать /proc

Если вы посмотрите на файловую систему Linux, вы, вероятно, заметите каталог /proc с множеством числовых папок и других файлов внутри. Что делает этот каталог? На самом деле он содержит много полезной информации о вашей системе Linux и запущенных процессах.
Что такое файловая система proc
Файловая система proc (procfs) — это идея, заимствованная из исследовательской системы Plan 9 из Bell Labs, наследника оригинального Unix. Она реализует принцип «всё — файл» и представляет каждую запущенную задачу в системе как иерархию файлов, которые можно просматривать стандартными инструментами.

Основная полезная информация для анализа системы часто содержится в отдельных файлах внутри /proc. Например, файл cpuinfo показывает данные о процессоре. Чтобы просмотреть его, выполните:
cat /proc/cpuinfoЕсли у вас много физических или логических ядер, вывода может быть много — в таком случае удобнее использовать постраничный просмотрщик, например less или most.
Другие полезные файлы в /proc:
- /proc/meminfo — состояние оперативной памяти.
- /proc/mounts — смонтированные файловые системы.
- /proc/uptime — время работы системы.
Все эти файлы можно анализировать стандартными инструментами обработки текста в Linux (grep, awk, sed и т. п.).
Информация о процессах через procfs
В procfs каждая запущенная задача имеет свою папку, имя которой равно ее PID (идентификатор процесса). Например, процесс с PID 1 (init или systemd) имеет каталог /proc/1.

Чтобы найти PID интересующего процесса, используйте ps, top, htop или pgrep. Затем перейдите в соответствующий каталог в /proc.
Внутри каталога процесса вы найдёте файлы и ссылки с разной информацией:
- exe — символьная ссылка на исполняемый файл, который запустил процесс.
- environ — переменные окружения процесса (строки разделяются нулевыми байтами).
- cmdline — аргументы командной строки, с которыми запущен процесс.
- status — множество метрик процесса в читаемом формате (UID, GID, состояние, память).
- fd/ — каталог с дескрипторами открытых файлов (символьные ссылки).
Пример чтения cmdline или status:
cat /proc/1234/cmdline
cat /proc/1234/status
ls -l /proc/1234/fdПошаговый метод исследования процесса
- Найдите PID: ps aux | grep <имя> или pgrep -a <имя>.
- Откройте /proc/
/status для общей информации. - Просмотрите /proc/
/cmdline и /proc/ /environ для аргументов и переменных. - Проверьте /proc/
/exe, чтобы узнать реальное исполняемое. - Загляните в /proc/
/fd, чтобы увидеть открытые файлы и сокеты. - При необходимости используйте lsof или strace для глубокого анализа.
Важно: доступ к файлам процесса может быть ограничен правами. Для чтения данных чужих процессов часто требуется root.
Быстрая шпаргалка команд
# Общая информация о CPU
cat /proc/cpuinfo
# Информация о памяти
cat /proc/meminfo
# Список смонтированных систем
cat /proc/mounts
# Информация о конкретном процессе
ps aux | grep nginx
cat /proc//status
ls -l /proc//fd
readlink -f /proc//exe Когда procfs даёт не ту картину: ограничения и исключения
- procfs отражает состояние ядра и процессов в момент чтения; данные могут меняться мгновенно.
- В контейнерах (Docker, LXC) /proc может быть частично изолирован или псевдо-замаскирован, поэтому некоторые PID и данные будут относиться к пространству имён контейнера.
- Некоторые поля (например, счётчики производительности) агрегированы или доступны только с правами root.
- procfs не хранит длительную историю; для анализа трендов нужны внешние инструменты (логирование, мониторинг).
Альтернативные и смежные источники информации
- /sys (sysfs) — иерархия, отражающая устройства и их свойства; полезно для аппаратных деталей.
- lsof — список открытых файлов и сокетов систем-wide.
- ss / netstat — информация о сетевых соединениях.
- strace — трассировка системных вызовов для конкретного процесса.
- tools: top, htop — интерактивный обзор процессов.
Практические шаблоны для ролей
Для системного администратора:
- Проверить загрузку CPU: cat /proc/stat и посмотреть процессы в top.
- Найти «утечку» файлов: ls -l /proc/
/fd и lsof -p .
Для разработчика:
- Убедиться в аргументах запуска: cat /proc/
/cmdline. - Проверить переменные окружения: tr ‘\0’ ‘\n’ < /proc/
/environ.
Для инженера по безопасности:
- Сканировать неожиданные сетевые сокеты: ls -l /proc/
/fd | grep socket. - Проверить владельца и путь исполняемого файла: readlink -f /proc/
/exe и /proc/ /status.
Быстрый факт
- procfs не хранит реальные файлы на диске; это виртуальная (in-memory) интерфейсная файловая система, создаваемая ядром при загрузке.
Краткий словарь (одна строка)
- procfs: виртуальная файловая система, представляющая информацию ядра и процессов.
- PID: идентификатор процесса.
- /proc/[PID]/fd: дескрипторы файлов процесса.
Примечания по безопасности и приватности
Не публикуйте содержимое /proc//environ или /proc//cmdline публично — там могут содержаться секреты (ключи, пароли, токены). Если вы делитесь выводом, фильтруйте чувствительные значения.
Итог
/Proc — удобный и быстрый способ «заглянуть» внутрь ядра и процессов. Для повседневных задач администрирования и отладки достаточно чтения нескольких файлов в /proc и базовых команд. Для глубокого анализа комбинируйте данные из /proc с инструментами мониторинга и трассировки.
Сводка:
- /proc предоставляет доступ к состоянию ядра и процессов через файлы.
- Каждая запущенная программа имеет каталог /proc/
с метриками и ссылками. - Для безопасности фильтруйте чувствительную информацию перед публикацией.