Что такое виртуальная файловая система /proc в Linux?

Ответ

/proc — это псевдо-файловая система (procfs), которая предоставляет интерфейс ядра для доступа к данным о процессах и состоянии системы в виде иерархии файлов и каталогов. Файлы в /proc не существуют на диске — они создаются ядром «на лету» при обращении к ним.

Ключевые каталоги и файлы:

  • /proc/[PID]/ — Каталог для каждого запущенного процесса. Содержит:
    • cmdline — аргументы командной строки.
    • status — основная информация о процессе.
    • fd/ — символические ссылки на открытые файлы процесса.
    • maps — отображения памяти процесса.
  • /proc/cpuinfo — Детальная информация о процессоре(ах).
  • /proc/meminfo — Статистика использования оперативной и swap-памяти.
  • /proc/modules — Список загруженных модулей ядра.
  • /proc/sys/ — Каталог для динамической настройки параметров ядра (через sysctl).

Пример чтения /proc/meminfo на C++:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream meminfo("/proc/meminfo");
    std::string line;

    if (meminfo.is_open()) {
        while (std::getline(meminfo, line)) {
            // Выводим, например, информацию о свободной памяти
            if (line.find("MemFree") == 0) {
                std::cout << "Free memory: " << line << std::endl;
            }
        }
        meminfo.close();
    } else {
        std::cerr << "Failed to open /proc/meminfo" << std::endl;
    }
    return 0;
}

Важно: Большинство файлов в /proc доступны только для чтения. Изменения через /proc/sys/ действуют до перезагрузки. Это мощный инструмент для отладки и мониторинга как пользовательских процессов, так и самой системы.

Ответ 18+ 🔞

Э, слушай, вот есть такая штука — /proc. Это, блядь, не настоящая файловая система, а такая, ёпта, виртуальная приблуда, которую ядро тебе на ходу генерирует, когда ты туда лезешь. Файлов на диске нет нихуя, всё в оперативке рисуется. По сути, это такой интерфейс, чтобы ты мог посмотреть, что у тебя там внутри системы творится — какие процессы бегают, что с памятью, с процессором.

Что там внутри интересного?

  • /proc/[PID]/ — Вот это, блядь, самое сокровенное. Для каждого запущенного процесса своя папочка. Залез туда — и ты как бог. Там тебе и cmdline (чтобы посмотреть, с какими аргументами этот процесс запустили), и status (основная инфа, типа кто родитель, сколько памяти хавает), и fd/ (это вообще песня — там симлинки на все файлы, которые процесс открыл). А maps — это, сука, карта памяти процесса, можно разобраться, где что лежит.
  • /proc/cpuinfo — Тут тебе вся подноготная про твой камень. Ядро, частота, кэши — овердохуища информации.
  • /proc/meminfo — Статистика по памяти. Сколько свободно, сколько в свопе, сколько кешировано. Читаешь и понимаешь, почему всё тормозит.
  • /proc/modules — Список всех модулей ядра, которые вмандорены в систему.
  • /proc/sys/ — А вот это уже, блядь, не просто для чтения. Тут можно кое-что и поменять, настроить ядро на лету (через sysctl). Только осторожно, а то будет вам хиросима и нигерсраки.

Вот, например, как на C++ память посмотреть можно:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream meminfo("/proc/meminfo");
    std::string line;

    if (meminfo.is_open()) {
        while (std::getline(meminfo, line)) {
            // Выводим, например, информацию о свободной памяти
            if (line.find("MemFree") == 0) {
                std::cout << "Free memory: " << line << std::endl;
            }
        }
        meminfo.close();
    } else {
        std::cerr << "Failed to open /proc/meminfo" << std::endl;
    }
    return 0;
}

Важный момент, чувак: Почти всё в /proc только читается. Ну кроме, как я уже сказал, /proc/sys/. Но и там изменения — до первой перезагрузки. В общем, это такой ебаный швейцарский нож для того, кто хочет понять, что его система на самом деле творит. Инструмент мощный, но если не знаешь, что делаешь — можно такого наотлаживать, сам от себя охуеешь.