В Части 13 этой серии LFCS (Linux Foundation Certified Sysadmin) мы объяснили, как использовать GRUB для изменения поведения системы, передавая параметры ядру для текущего процесса загрузки.
Точно так же вы можете использовать командную строку в работающей системе Linux для изменения определенных параметров ядра во время выполнения в качестве одноразовой модификации или постоянно, отредактировав файл конфигурации.
Таким образом, вы можете включать или отключать параметры ядра на лету без особых затруднений, когда это необходимо из-за требуемого изменения способа работы системы.
Введение в файловую систему /proc
Последняя спецификация Стандарта иерархии файловой системы указывает, что /proc
представляет собой метод по умолчанию для обработки информации о процессах и системе, а также другой информации о ядре и памяти. В частности, /proc/sys
– это место, где можно найти всю информацию о устройствах, драйверах и некоторых функциях ядра.
Фактическая внутренняя структура /proc/sys
сильно зависит от используемого ядра, но вы скорее всего найдете следующие каталоги внутри. В свою очередь, в каждом из них будут содержаться другие подкаталоги, в которых поддерживаются значения для каждой категории параметров:
dev
: параметры для конкретных устройств, подключенных к машине.fs
: конфигурация файловой системы (квоты и иноды, например).- ядро: специфическая конфигурация ядра.
net
: конфигурация сети.vm
: использование виртуальной памяти ядра.
Для изменения параметров ядра во время выполнения мы будем использовать команду sysctl
. Точное количество параметров, которые можно изменить, можно просмотреть с помощью:
# sysctl -a | wc -l
Если вы хотите просмотреть полный список параметров ядра, просто выполните:
# sysctl -a
Поскольку вывод вышеуказанной команды будет состоять из МНОГИХ строк, мы можем использовать конвейер, за которым следует less, чтобы более внимательно его изучить:
# sysctl -a | less
Давайте взглянем на первые несколько строк. Обратите внимание, что первые символы в каждой строке совпадают с названиями каталогов внутри /proc/sys
:

Например, выделенная строка:
dev.cdrom.info = drive name: sr0
указывает на то, что sr0
является псевдонимом для оптического привода. Другими словами, так ядро “видит” этот диск и использует это имя для обращения к нему.
В следующем разделе мы объясним, как изменить другие “более важные” параметры ядра в Linux.
Как изменить или модифицировать параметры ядра Linux
Исходя из того, что мы объяснили до сих пор, легко видеть, что имя параметра соответствует структуре каталогов внутри /proc/sys
, где его можно найти.
Например:
dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward
Проверьте параметры ядра Linux
Говоря об этом, мы можем просмотреть значение определенного параметра ядра Linux, используя либо sysctl
, за которым следует имя параметра, либо чтение соответствующего файла:
# sysctl dev.cdrom.autoclose # cat /proc/sys/dev/cdrom/autoclose # sysctl net.ipv4.ip_forward # cat /proc/sys/net/ipv4/ip_forward

Установка или изменение параметров ядра Linux
Для установки значения параметра ядра мы также можем использовать sysctl
, но с использованием опции -w
и за ним идет имя параметра, знак равенства и желаемое значение.
Другим методом является использование echo
для перезаписи файла, связанного с параметром. Другими словами, следующие методы эквивалентны для отключения функции пересылки пакетов в нашей системе (которая, кстати, должна быть значением по умолчанию, когда устройство не должно передавать трафик между сетями):
# echo 0 > /proc/sys/net/ipv4/ip_forward # sysctl -w net.ipv4.ip_forward=0
Важно отметить, что параметры ядра, установленные с помощью sysctl
, будут применяться только во время текущей сессии и исчезнут при перезагрузке системы.
Чтобы установить эти значения постоянно, отредактируйте /etc/sysctl.conf
с нужными значениями. Например, чтобы отключить пересылку пакетов в /etc/sysctl.conf, убедитесь, что эта строка присутствует в файле:
net.ipv4.ip_forward=0
Затем выполните следующую команду, чтобы применить изменения к работающей конфигурации.
# sysctl -p
Другие примеры важных параметров времени выполнения ядра:
fs.file-max
указывает максимальное количество файловых дескрипторов, которые ядро может выделить для системы. В зависимости от предполагаемого использования вашей системы (веб- / базы данных / файловый сервер, чтобы назвать несколько примеров), вам может потребоваться изменить это значение, чтобы соответствовать потребностям системы.
В противном случае вы получите сообщение об ошибке “Слишком много открытых файлов“, в лучшем случае, и в худшем случае, это может предотвратить загрузку операционной системы.
Если по невнимательности вы оказались в последней ситуации, загрузитесь в однопользовательский режим (как объяснено в Части 13 – Настройка и устранение неполадок загрузчика Linux Grub) и отредактируйте /etc/sysctl.conf, как описано ранее. Чтобы установить тот же ограничение на пользователя, обратитесь к Части 14 – Мониторинг и установка ограничений использования процессов в Linux этой серии.
kernel.sysrq
используется для активации клавиши SysRq на клавиатуре (также известной как клавиша печати экрана), чтобы разрешить определенные комбинации клавиш вызывать аварийные действия, когда система перестает реагировать.
Значение по умолчанию (16) указывает, что система будет учитывать комбинацию Alt+SysRq+клавиша
и выполнять действия, перечисленные в документации sysrq.c, найденной на сайте kernel.org (где клавиша – одна буква из диапазона b-z). Например, Alt+SysRq+b
перезагрузит систему насильственно (используйте это в качестве последнего средства, если ваш сервер не отвечает).
Предупреждение! Не пытайтесь нажимать эту комбинацию клавиш на виртуальной машине, потому что это может привести к перезагрузке вашей хост-системы!
Когда установлено значение 1, net.ipv4.icmp_echo_ignore_all будет игнорировать запросы ping и отбрасывать их на уровне ядра. Это показано на изображении ниже – обратите внимание, как запросы ping теряются после установки этого параметра ядра:

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d
, grouping them by categories.
Например, вместо установки net.ipv4.ip_forward=0 и net.ipv4.icmp_echo_ignore_all=1 в /etc/sysctl.conf, мы можем создать новый файл с именем net.conf
внутри /etc/sysctl.d:
# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf # echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf
Если вы выберете использовать этот подход, не забудьте удалить те же строки из /etc/sysctl.conf
.
Итог
В этой статье мы объяснили, как изменять параметры ядра во время выполнения, как постоянно, так и непостоянно, используя sysctl, /etc/sysctl.conf и файлы внутри /etc/sysctl.d.
В документации по sysctl вы можете найти больше информации о значении других переменных. Эти файлы представляют собой наиболее полный источник документации о параметрах, которые можно установить через sysctl.
Вы нашли эту статью полезной? Мы надеемся, что да. Не стесняйтесь сообщить нам, если у вас есть какие-либо вопросы или предложения по улучшению.
Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/