← Назад к вопросам

Что такое /proc в Linux?

2.0 Middle🔥 153 комментариев
#Linux и администрирование

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое /proc в Linux?

/proc — это виртуальная файловая система (pseudo-filesystem), предоставляющая интерфейс для взаимодействия с ядром Linux и процессами в реальном времени. Она существует только в оперативной памяти и не занимает места на диске. Файлы в /proc являются динамически генерируемыми ядром и содержат информацию о системных ресурсах, конфигурации и выполняемых процессах.

Ключевые особенности /proc

  • Виртуальность: Файлы не хранятся на диске, а создаются ядром "на лету" при обращении к ним.
  • Интерфейс ядра: Это основной способ получения информации о системе и её состоянии из пользовательского пространства (userspace).
  • Только для чтения и записи: Большинство файлов доступны только для чтения, но некоторые (например, /proc/sys/) позволяют изменять параметры ядра в реальном времени.

Основные категории информации в /proc

1. Информация о системе:

  • /proc/cpuinfo — детальная информация о процессоре (модель, частота, кэш).
  • /proc/meminfo — данные об использовании оперативной памяти и swap.
  • /proc/version — версия ядра Linux и компилятора.
  • /proc/filesystems — список файловых систем, поддерживаемых ядром.

Пример чтения информации о CPU:

cat /proc/cpuinfo | grep "model name" | head -1

Вывод может быть: model name : Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz.

2. Информация о процессах:

Каждый запущенный процесс имеет собственную директорию /proc/<PID>, где <PID> — его идентификатор.

  • /proc/<PID>/cmdline — командная строка запуска процесса.
  • /proc/<PID>/status — основная информация о процессе (состояние, PID, PPID, использование памяти).
  • /proc/<PID>/exe — символическая ссылка на исполняемый файл процесса.
  • /proc/<PID>/fd/ — директория, содержащая файловые дескрипторы, открытые процессом.

Пример проверки текущей рабочей директории процесса:

ls -la /proc/self/cwd

3. Настройка ядра в реальном времени (/proc/sys/):

Эта поддиректория позволяет модифицировать параметры ядра без перезагрузки системы. Изменения обычно временные и сбрасываются после перезагрузки.

  • /proc/sys/kernel/ — общие настройки ядра (например, hostname).
  • /proc/sys/net/ — параметры сетевого стека.
  • /proc/sys/vm/ — настройки управления виртуальной памятью.

Пример изменения максимального количества открытых файлов (для текущей сессии):

# Чтение текущего значения
cat /proc/sys/fs/file-max
# Запись нового значения (требует прав root)
echo 100000 > /proc/sys/fs/file-max

4. Сетевая информация (/proc/net/):

Содержит статистику и конфигурацию сетевых интерфейсов и протоколов.

  • /proc/net/tcp — информация об открытых TCP-сокетах.
  • /proc/net/dev — статистика по сетевым интерфейсам (принято/отправлено пакетов).

Практическое значение для DevOps-инженера

  • Мониторинг и диагностика: Быстрый сбор метрик о системе (загрузка CPU, память, сеть) без установки дополнительных утилит.
  • Отладка процессов: Поиск утечек памяти, анализ открытых файловых дескрипторов, определение причин зависаний.
  • Тюнинг производительности: Оптимизация параметров ядра (например, vm.swappiness, net.ipv4.tcp_tw_reuse) для улучшения работы приложений под нагрузкой.
  • Безопасность: Аудит системы на предмет нежелательных процессов или открытых сетевых портов.
  • Автоматизация: Написание скриптов для сбора системной информации, которая затем может передаваться в системы мониторинга (Prometheus, Zabbix).

Пример скрипта для сбора базовой информации

#!/bin/bash
# Скрипт для сбора ключевой системной информации из /proc

echo "=== System Information ==="
echo "CPU Model: $(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2)"
echo "Kernel Version: $(cat /proc/version)"
echo "Uptime: $(cat /proc/uptime | awk '{print int($1/86400)" days "int($1%86400/3600)" hours"}')"

echo -e "\n=== Memory Usage ==="
grep -E "MemTotal|MemAvailable|SwapTotal|SwapFree" /proc/meminfo

echo -e "\n=== Top 5 Processes by Memory Usage ==="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -6

Важно помнить, что хотя /proc предоставляет мощный низкоуровневый интерфейс, для постоянного мониторинга и управления в production-средах чаще используются более высокоуровневые утилиты (top, htop, vmstat, sysctl) и специализированные системы мониторинга, которые, в свою очередь, часто получают данные именно из /proc.

Что такое /proc в Linux? | PrepBro