sysctl — это программная утилита некоторых Unix-подобных операционных систем, которая считывает и изменяет атрибуты ядра системы , такие как номер версии, максимальные ограничения и настройки безопасности. [1] Он доступен как системный вызов для скомпилированных программ, так и команда администратора для интерактивного использования и создания сценариев. Linux дополнительно предоставляет sysctl как виртуальную файловую систему .
В BSD эти параметры обычно представляют собой объекты в базе управляющей информации (MIB), которые описывают настраиваемые ограничения, такие как размер сегмента общей памяти, количество потоков, которые операционная система будет использовать в качестве клиента NFS , или максимальное количество процессов. в системе; или описать, включить или отключить поведение, такое как переадресация IP , ограничения безопасности для суперпользователя («уровень безопасности») или выходные данные отладки. [1]
В OpenBSD и DragonFly BSD sysctl также используется в качестве транспортного уровня для инфраструктуры hw.sensors для мониторинга оборудования , [2] тогда как NetBSD использует системный вызов ioctl для своего аналога sysmon envsys . И sysctl, и ioctl — это два системных вызова , которые можно использовать для добавления дополнительных функций ядра без добавления еще одного системного вызова ; [3] например, в 2004 году в OpenBSD 3.6, когда была представлена утилита tcpdrop, sysctl использовался в качестве основного системного вызова. [3] [4] Во FreeBSD , несмотря на отсутствие структуры датчиков, отдельные датчики температуры и другие датчики по-прежнему обычно экспортируются через дерево sysctl через Newbus, например, как и в случае с драйвером, aibs(4)
доступным во всех 4 BSD. системы, включая FreeBSD. [5] [6] [7]
В BSD для использования программами обычно предоставляется системный вызов или оболочка системного вызова, а также административная программа и файл конфигурации (для установки настраиваемых параметров при загрузке системы ).
Эта возможность впервые появилась в 4.4BSD . Его преимущество перед жестко закодированными константами заключается в том, что изменения параметров можно производить динамически, без перекомпиляции ядра.
Исторически, хотя сами переменные ядра можно было изменить с помощью sysctl, элементы, составляющие MIB дерева sysctl, были жестко запрограммированы во время компиляции, и по состоянию на 2019 год это в основном все еще имеет место в OpenBSD (за некоторыми исключениями, такими как hw.sensors , который управляет и предоставляет собственное динамическое поддерево). Во FreeBSD есть «внутренняя магия sysctl» для динамического управления деревом sysctl с 1995 года; В NetBSD с декабря 2003 года имеется собственная реализация динамического дерева системных файлов. [5] [6]
В Linux механизм интерфейса sysctl также экспортируется как часть procfs в каталог /proc/sys (не путать с каталогом /sys ). Эта разница означает, что проверка значения некоторого параметра требует открытия файла в виртуальной файловой системе , чтения его содержимого, его анализа и закрытия файла. Системный вызов sysctl существует в Linux, но он устарел и не имеет функции-обертки в glibc ; обычно он недоступен из-за того, что во многих дистрибутивах ядро настроено без CONFIG_SYSCTL_SYSCALL; поэтому не рекомендуется к использованию. [8]
Когда включена переадресация IP, ядро операционной системы будет действовать как маршрутизатор . В FreeBSD , NetBSD , OpenBSD , DragonFly BSD и Darwin / Mac OS X для параметра net.inet.ip.forwarding можно установить значение 1 , чтобы включить такое поведение. В Linux этот параметр называется net.ipv4.ip_forward .
В большинстве систем команда sysctl -w параметр =1 включает определенное поведение. Это сохранится до следующей перезагрузки. Если это поведение должно быть включено при каждой загрузке системы, параметр строки =1 можно добавить/переписать в файл /etc/sysctl.conf . Кроме того, некоторые переменные sysctl невозможно изменить после загрузки системы. Эти переменные (в зависимости от переменной, версии и версии BSD) должны быть установлены статически в ядре во время компиляции или установлены в /boot/loader.conf .
{{cite conference}}
: CS1 maint: bot: original URL status unknown (link)