Немного о директории /proc в Linux

Немного о директории /proc/proc — это не настоящая файловая система. Она виртуальная. Ее основная задача — получение состояния системы и частично выполнение управляющих действий. К сожалению, не так много людей знают, что находится внутри и как этим пользоваться. Поэтому немного расскажу, чем эта директория может быть вам полезна.

Информация о процессах в директории /proc

Информация о процессах хранится в директориях /proc/N, где N — числовой идентификатор процесса. В этой директории содержатся различные псевдо-файлы, которые содержат информацию о самом процессе и связанном с ним окружении.

/proc/N/cmdline — Содержимое командной строки, которой был запущен процесс.

/proc/N/environ — Описание окружения, в котором работает процесс. Оно может быть полезно для просмотра содержимого окружения, если вам надо, например, посмотреть, была ли установлена переменная окружения перед запуском программы.

/proc/N/exe — Символическая ссылка на выполнимый файл запущенной программы.

/proc/N/limits — Лимиты на использование системных ресурсов, актуальные для работающего процесса.

/proc/N/mounts — Список смонтированных ресурсов, которые доступны процессу

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

В этой же директории содержится несколько псевдо-директорий:

/proc/N/cwd — Текущая директория для процесса. Представлена символической ссылкой на директорию. Если рабочая директория для процесса изменится, изменится и ссылка.

/proc/N/fd — Файловые дескрипторы, которые используются процессом. Для программы bash, например, там по умолчанию будут дескрипторы 0, 1, 2 и 255, указывающие на виртуальный терминал, в котором запущен процесс, например, /dev/pts/6.

/proc/N/fdinfo — Информация о файловых дескрипторах. Каждый файл в этой директории содержит поля pos (позиция курсора), flags (флаги, с которыми этот дескриптор был открыт) и mnt_id (идентификатор точки монтирования из списка, содержащегося в файле /proc/N/mountinfo)

/proc/N/root — Символическая ссылка на директорию, которая для данного процесса является корневой

/proc/N/net — Сетевые системные ресурсы и их параметры, действующие для конкретного процесса.

Общесистемные псевдо-файлы и псевдо-директории

/proc/acpi — директория, связанная с управлением питанием и различным устройствами. От компьютера к компьютеру содержимое этой директории отличается. Через эту директорию можно посылать управляющие сигналы устройствам. Например: в моем ноутбуке есть кнопка включения подсветки для клавиатуры. Сочетание клавиш, которые для этого используются, — это Fn плюс кнопка с изображением лампочки на клавиатуре. Но я могу включать и выключать подсветку программно.
Включить:

echo "on" > /proc/acpi/ibm/light

Выключить:

echo "off" > /proc/acpi/ibm/light

Таким образом, можно на некоторое событие в системе повесить обработчик (на баше), который будет мигать лампочкой, если пришло письмо или произошло еще что-нибудь. Однако, возможность таким образом работать с устройствами зависит от модели ноутбука и обычно драйверов устройств. Устройства именуются очень часто по-разному, и вам надо будет предварительно посмотреть, что у вас есть и как это можно использовать.

Через директорию /proc/acpi также, например, можно проверить, открыт или закрыт ноутбук. Для этого на моем ноутбуке можно проверить содержимое файла /proc/acpi/button/lid/LID/state. Если в файле содержится «state:   open», значит крышка открыта.

/proc/asound — директория, связанная со звуковыми устройствами. Например, файл /proc/asound/cards содержит звуковые карты, доступные в системе.

/proc/bus — информация о системных шинах и устройствах, которые к ним подключены. Например, файл /proc/bus/input/devices содержит информацию о различных устройствах, список можно получить такой командой:

grep "Name" /proc/bus/input/devices

/proc/fs — Информация о файловых системах. Например, вам нужно посмотреть опции, с которыми в данный момент работает файловая система ext4, размещенная на разделе sda2. Это можно сделать командой

cat /proc/fs/ext4/sda2/options

/proc/sys — Псевдо-директория, содержащая массу информации о системе. К примеру, файл /proc/sys/dev/cdrom/info содержит информацию о CD/DVD-ROM, который установлен в системе. Выглядит эта информация так:

CD-ROM information, Id: cdrom.c 3.20 2003/12/17

drive name:             sr0
drive speed:            24
drive # of slots:       1
Can close tray:         1
Can open tray:          1
Can lock tray:          1
Can change speed:       1
Can select disk:        0
Can read multisession:  1
Can read MCN:           1
Reports media changed:  1
Can play audio:         1
Can write CD-R:         1
Can write CD-RW:        1
Can read DVD:           1
Can write DVD-R:        1
Can write DVD-RAM:      1
Can read MRW:           1
Can write MRW:          1
Can write RAM:          1

В общем-то, всё понятно. Название устройства и различные его характеристики, названные человеческими словами. Как видно выше, мой DVD-RW много чего умеет, но не умеет выбирать диски.

/proc/sys/fs — Как понятно по названию, псевдо-директория, содержащая информацию о подсистеме, связанной с файловыми системами. Опять же, пример: /proc/sys/fs/pipe-max-size. Этот псевдо-файл содержит максимальный размер буфера пайпа. Поэтому если вдруг у вас некорректно работает какой-то скрипт, в котором данные передаются через пайп, есть повод задуматься, какого размера у вас буфер пайпа и заглянуть в этот псевдо-файл. Возможно вы после этого захотите воспользоваться командами «exec» и «read» с опцией «-u».

/proc/sys/net — Общесистемные сетевые параметры. Например:

echo "1" > /proc/sys/net/ipv4/ip_forward

Включить форвардинг пакетов между двумя сетевыми интерфейсами.

/proc/sys/vm — Параметры виртуальной памяти. Например, вы можете сбросить кэш и освободить немного памяти, используемой под кэш командой

echo "3" > /proc/sys/vm/drop_caches

В общем, для начала знакомства с этой директорией достаточно, но я рекомендую по возможности более плотно познакомиться с этой директорией и ее содержимым. Более подробную информацию можно найти в странице руководств в 5 разделе

man 5 proc

Когда вы познакомитесь с (псевдо)директорией /proc, вы сможете получать массу информации о системе без всяких утилит, просто при помощи команды cat.