В ОС Linux виртуальная файловая система /proc содержит файлы с текущей информацией о процессах и системе в целом. Файловая система создается в оперативной памяти компьютера в процессе загрузки и используется в качестве интерфейса обмена данными со структурами ядра. Использование файлов /proc/* в большинстве случаев позволяет избавиться от необходимости чтения и записи в устройство /dev/kmem. Большинство расположенных в структуре /proc файлов доступны пользователям только для чтения, а для записи требуют полномочий root.
Для поддержки виртуальной файловой системы /proc при компиляции ядра должна быть включена опция /proc file system support.
Для поддержки различных бинарных форматов нужно сначала смонтировать файловую систему binfmt_misc с помощью команды
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
Для регистрации нового типа бинарных файлов нужно поместить в файл /proc/sys/fs/binfmt_misc/register строки описания формата, имеющие вид
:name:type:offset:magic:mask:interpreter:
Таблица 5 Поля описания формата бинарных файлов
Поле
|
Описание
|
name
|
Строка идентификации формата (имя). В каталоге /proc/sys/fs/binfmt_misc будет создан файл с соответствующим именем.
|
type
|
Способ распознавания формата – M для распознавания по сигнатуре, E для распознавания по расширению.
|
offset
|
Смещение сигнатуры в бинарном файле, заданное в байтах. По умолчанию предполагается нулевое смещение.
|
magic
|
Сигнатура, используемая для идентификации формата. Сигнатуры могут содержать буквы, цифры и шестнадцатеричные коды символов (например, x0a или xA4).
Если вы задали распознавание по расширению имени, в качестве сигнатуры нужно указать строку расширения без точки перед ней. Строки расширения задаются в символьном виде с учетом регистра.
|
mask
|
Необязательная маска, для исключения некоторых битов при сравнении с заданной сигнатурой. При сравнении сигнатуры маска накладывается с помощью логической операции AND (И). По умолчанию значение маски равно 0xff.
|
interpreter
|
Полный путь к программе, которая должна использоваться для загрузки (запуска) бинарного файла.
|
Для добавления строк описания фв файл можно использовать команду echo, как показано в приведенных ниже примерах
Ограничения
-
размер строки регистрации формата не должен превышать 255 символов;
-
сигнатура должна располагать в первых 128 байтах файла (т. е., сумма смещения и размера сигнатуры не должна превышать 127);
-
размер поля interpreter не должен превышать 127 символов.
Примеры использования
Для использования различных бинарных форматов требуется сначала смонтировать файловую систему binfmt_misc. Вы можете сделать это вручную с помощью команды
mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
или добавить строку
none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0
в файл /etc/fstab для автоматического монтирования при загрузке системы.
Чтобы включить поддержку приложений em86 можно использовать команду:
echo ':i386:M::x7fELFx01x00x00x00x00x00x00x00x00x00x00x00x02x00x03:xffxffxffxffxffxfexfexffxffxffxffxffxffxffxffxffxfbxffxff:/bin/em86:' > /proc/sys/fs/binfmt_misc/register
или
echo ':i486:M::x7fELFx01x00x00x00x00x00x00x00x00x00x00x00x02x00x06:xffxffxffxffxffxfexfexffxffxffxffxffxffxffxffxffxfbxffxff:/bin/em86:' > /proc/sys/fs/binfmt_misc/register
Для включения поддержки упакованных приложений DOS подойдет команда:
echo ':DEXE:M::x0eDEX::/usr/bin/dosexec:' > /proc/sys/fs/binfmt_misc/register
Для использования исполняемых файлов Windows с помощью прогграммы wine можно ввести команду:
echo ':DOSWin:M::MZ::/usr/local/bin/wine:' > /proc/sys/fs/binfmt_misc/register
Для включения поддержки приложений Java можно использовать команды:
echo ':Java:M::xcaxfexbaxbe::/usr/local/bin/javawrapper:' > /proc/sys/fs/binfmt_misc/register
для Jar-файлов:
echo ':ExecutableJAR:E::jar::/usr/local/bin/jarwrapper:' > /proc/sys/fs/binfmt_misc/register
для Java-апплетов:
echo ':Applet:E::html::/usr/bin/appletviewer:' > /proc/sys/fs/binfmt_misc/register
или:
echo ':Applet:M:: /proc/sys/fs/binfmt_misc/register
Для того, чтобы включить или отключить поддержку binfmt_misc или отдельного типа бинарных файлов можно воспользоваться командой echo, передающей 0 (выключить) или 1 (включить) в общий файл /proc/sys/fs/binfmt_misc/status или файлы для отдельных форматов (/proc/.../<имя>). Для просмотра текущего состояния можно воспользоваться командой cat.
Для удаления записей можно также воспользоваться командой echo
echo -1 > /proc/sys/fs/binfmt_misc/status
будет удалять все записи, а
echo -1 > /proc/sys/fs/binfmt_misc/<имя>
запись для указанного формата.
Файлы /proc/sys/fs
Таблица 6 Файлы каталога /proc/sys/fs
Файл
|
Описание
|
dentry-state
|
Шесть чисел:
nr_dentry – номер записи dentry;
nr_unused – число неиспользованных записей dentry;
age_limit – количество секунд, по истечении которых запись может быть удалена при нехватке памяти;
want_pages – число страниц, запрашиваемых системой
2 пустых значения.
|
dir-notify-enable
|
Включает (1) или отключает (0) интерфейс уведомлений dnotify для функции fcntl в масштабе всей системы.
|
dquot-max
|
Максимальное число кэшированных записей для дисковых квот.
|
dquot-nr
|
Количество выделенных и свободных дисковых квот.
|
file-max
|
Верхнее ограничение числа открытых файлов в масштабе системы.
|
file-nr
|
Доступный только для чтения файл, показывающий общее число открытых в системе файлов. Первое значение показывает число выделенных файловых дескрипторов, второе – число свободных дескрипторов, а третье число указывает максимальное число файловых дескрипторов для данной системы (file-max).
|
inode-max
|
Максимальное число хранящихся в памяти индексных дескрипторов inode. Это число должно в 3-4 раза превышать максимальное значение числа файловых дескрипторов, заданное в file-max.
|
inode-nr
|
Два первых значения из файла inode-state.
|
inode-state
|
Содержит 7 числовых параметров:
nr_inodes – число выделенных системой индексных дескрипторов;
nr_free_inodes – число свободных индексных дескрипторов;
preshrink – отличное от нуля значение, если nr_inodes > inode-max и системе нужно уничтожить группу индексных дескрипторов вместо выделения новых;
4 пустых значения.
|
lease-break-time
|
Задает продолжительность периода, в течение которого процесс может удерживать взятый файл после того, как ядром был передан сигнал, уведомляющий о запросе другого процесса на открытие этого файла. Если держатель файла не освободит его или не снизит уровень владения в течение заданного времени, ядро прервет принадлежность файла данному процессу.
|
leases-enable
|
Включает или отключает поддержку функций “аренды” (lease) файлов в масштабе системы. Нулевое значение запрещает аренду, 1 – разрешает.
|
overflowgid
|
Максимальное значение идентификатора владельца UID при записи файлов.
|
overflowuid
|
Максимальное значение идентификатора группы GID при записи файлов.
|
super-max
|
Определяет максимальное число суперблоков (superblock) и, следовательно, ограничивает число монтируемых файловых систем.
|
super-nr
|
Число смонитрованных файловых систем.
|
Каталог sys/kernel
Таблица 7 Файлы каталога /proc/sys/kernel
Файл
|
Описание
|
acct
|
Файл содержит 3 значения highwater, lowwater и frequency.
Если при компиляции ядра была включена опция BSD process accounting, эти значения управляют запись учетной информации в журнальный файл системы. Если процент свободного пространства на диске для записи журнальных файлов становится ниже значения lowwater, запись учетной информации прекращается и будет восстановлена лишь после того, как процент свободного пространства превысит значение highwater. Параметр frequency определяет период проверки свободного пространства (в секундах).
По умолчанию используются значения 4, 2 и 30. Запись учетной информации прекращается при снижении объема свободного пространства до 2% и восстанавливается при наличии 4% свободного пространства. Проверка осуществляется каждые 30 секунд.
|
cap-bound
|
Используемая ядром маска ограничения возможностей приложений. Заданное в файле десятичное значение маски накладывается на значение поля возможностей приложения с помощью операции AND.
|
core_pattern
|
Имя, используемое для записи дампа памяти при аварийном завершении приложений.
|
core_uses_pid
|
Этот файл управляет именами файлов с дампом памяти, записываемыми при аварийном закрытии приложений. Если файл содержит ненулевое значение, дамп памяти будет записываться в файл с именем core.PID, в противном случае, имя файла не будет содержать идентификатора аварийного процесса..
|
ctrl-alt-del
|
Определяет режим обработки клавиатурных прерываний Ctrl-Alt-Del. При нулевом значении информация о нажатии клавиш Ctrl-Alt-Del перехватывается и передается функции init для корректного выполнения операции перезагрузки. Отличное от нуля значение разрешает незамедлительную перезагрузку системы без синхронизации файловой системы, что может вызвать проблемы при следующей загрузке.
Отметим, что некоторые программы (типа dosemu), использующие клавиатуру в raw-режиме, могут самостоятельно обрабатывать прерывания Ctrl-Alt-Del еще до того, как информация о нажатии клавиш попадет в ядро.
|
domainname
|
Доменное имя NIS/YP. Отметим, что это имя отличается от доменного имени DNS.
|
hostname
|
Имя хоста.
|
hotplug
|
Указывает местоположение программы hotplug. |
modprobe
|
Указывает местоположение программы modprobe, используемой для проверки и загрузки модулей ядра. |
msgmax
|
Максимальный размер сообщения, записываемого в очередь System V. По умолчанию 8192 байта.
|
msgmnb
|
Максимальный размер очереди сообщений System V. По умолчанию 16384 байта.
|
msgmni
|
Максимальное значение идентификаторов сообщений в очереди System V. По умолчанию 16.
|
osrelease
|
Номер версии используемого системой ядра.
|
ostype
|
|
overflowgid
|
Дубликат файла /proc/sys/fs/overflowgid, определяющего максимальное значение идентификатора группы (GID).
|
overflowuid
|
Дубликат файла /proc/sys/fs/overflowuid, определяющего максимальное значение идентификатора пользователя (UID).
|
panic
|
Определяет поведение системы при невозможности загрузки ядра (kernel panic). При нулевом значении система будет ожидать реакции пользователя, а отличные от нуля значения задают время (в секундах), по истечении которого будет выполнена автоматическая перезагрузка.
|
printk
|
Этот файл содержит 4 целых числа определяющих вывод и протоколирование сообщений об ошибках:
console_loglevel – уровень сообщений, с которого начинается вывод на консоль;
default_message_loglevel – уровень приоритета, используемый по умолчанию для сообщений, уровень которых не задан;
minimum_console_level – минимальное значение, которое может быть установлено в поле console_loglevel;
default_console_loglevel – используемый по умолчанию уровень console_loglevel.
|
random
|
Подкатлог, содержащий файлы, управляющие работой системного генератора случайных чисел /dev/random.
|
rtsig-max
|
Максимальное число сигналов POSIX, которые могут находиться в очереди.
|
rtsig-nr
|
Текущее число сигналов POSIX в очереди.
|
sem
|
Параметры управления семафорами System V IPC:
SEMMSL – максимальное число семафоров в одном наборе;
SEMMNS – максимальное число операций, которые могут быть заданы при вызове функции semop;
SEMMNI – максимальное число идентификаторов семафоров.
|
shmall
|
Максимальное число страниц разделяемой памяти System V.
|
shmmax
|
Максимальный размер сегмента разделяемой памяти System V IPC.
|
shmmni
|
Максимальное число создаваемых сегментов разделяемой памяти System V IPC.
|
version
|
Номер и время создания ядра.
|
Каталог sys/net
Переменные каталога /proc/sys/net/* описаны в отдельной статье.
Каталог sys/proc
Этот каталог может быть пустым.
Каталог sys/sunrpc
Параметры Sun RPC для использования NFS.
Каталог sys/vm
Параметры управления распределением памяти, буферами и кэшированием.
Каталог sysvipc
Этот каталог содержит файлы msg, sem и shm, описывающие связи между процессами System V IPC. Файлы включают заголовки, облегчающие понимание приведенных значений.
|