В Linux команда sysctl
используется для чтения или изменения параметров ядра во время выполнения.
Содержание
- Возможности утилиты
- Синтаксис
- Опции
- Параметры
- Примеры использования команды sysctl в Linux
- Вывод всех параметров ядра
- Отображение имён параметров без значений
- Поиск конкретных параметров
- Отображение определённого значения параметра
- Отображение значения без имени параметра
- Изменение значения параметра
- Загрузка конфигурации из файла по умолчанию
- Загрузка конфигурации из пользовательского файла
- Загрузка всех файлов конфигурации системы
- Подавление сообщений об ошибках
- Заключение
Возможности утилиты
Утилита даёт возможность контроля и изменения настройки сети, операций ввода/вывода и управления памятью в режиме реального времени без перезагрузки.
Изменение параметров ядра влияет на поведение, производительность и безопасность системы. Всегда проверяйте изменения параметров в контролируемой среде, например на виртуальной машине, прежде чем применять их на промо-системе.
Синтаксис
Параметры ядра Linux находятся в каталоге /proc/sys/
. Команда sysctl
позволяет вносить структурированные изменения в эти параметры и сохранять изменения при перезагрузке без прямого взаимодействия с файлами /proc/sys/
. В Linux утилита имеет следующий синтаксис:
sysctl [options] [variable[=value] ...]
В синтаксисе командной строки квадратные скобки
Опции
- sysctl
- Имя команды
- [опции]
- Команда принимает необязательные флаги для настройки поведения
- [переменная]
- Имя параметра ядра, который вы хотите прочитать или изменить. Введите переменную без значения, чтобы прочитать только текущее значение переменной
- [=значение]
- Если команда содержит переменную, вы можете присвоить ей значение. Ввод значения установит новое значение для переменной
- ...
- Три точки означают, что в одной команде можно указать несколько пар переменная=значение
Синтаксис утилиты является гибким и позволяет пользователям вводить команду с опциями или без них, читать существующие значения или определять новые значения для определённых параметров ядра.
Параметры
- -а
- Отображение всех переменных и значений
- -n
- Отображать только значения для указанных переменных
- -e
- Не отображать ошибки для несуществующих переменных
- -w [parameter]=[value]
- Измените значение указанной переменной
- -p [file]
- Загрузить значения из указанного файла конфигурации. Система по умолчанию загружает значения из файла
/etc/sysctl.conf
, если файл не указан - -q
- Сообщения об ошибках для значений параметров ядра стандартного вывода подавляются
- -f
- Загрузить настройки из всех файлов конфигурации системы
- -r [pattern]
- Перечислите только те переменные, которые соответствуют определённому шаблону
- -V
- Вывести версию утилиты
Примеры использования команды sysctl в Linux
Только пользователь sudo
или root
может изменять значения параметров. Действия чтения обычно не требуют прав sudo
или root
.
Вывод всех параметров ядра
Для вывода всех параметров ядра и их текущего значения используется опция -a
:
oleg@mobile:~:$ sysctl -a
abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 0
dev.cdrom.check_media = 0
dev.cdrom.debug = 0
dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17
dev.cdrom.info =
dev.cdrom.info = drive name: sr0
dev.cdrom.info = drive speed: 24
...
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.page_lock_unfairness = 5
vm.panic_on_oom = 0
vm.percpu_pagelist_high_fraction = 0
vm.stat_interval = 1
sysctl: permission denied on key 'vm.stat_refresh'
vm.swappiness = 60
vm.unprivileged_userfaultfd = 0
vm.user_reserve_kbytes = 57155
vm.vfs_cache_pressure = 100
vm.watermark_boost_factor = 15000
vm.watermark_scale_factor = 10
vm.zone_reclaim_mode = 0
oleg@mobile:~:$
Отображение имён параметров без значений
Для этого команда используется с опциями -a
и -N
:
oleg@mobile:~:$ sysctl -a -N
abi.vsyscall32
debug.exception-trace
debug.kprobes-optimization
dev.cdrom.autoclose
dev.cdrom.autoeject
dev.cdrom.check_media
dev.cdrom.debug
dev.cdrom.info
dev.cdrom.lock
...
vm.numa_stat
vm.numa_zonelist_order
vm.oom_dump_tasks
vm.oom_kill_allocating_task
vm.overcommit_kbytes
vm.overcommit_memory
vm.overcommit_ratio
vm.page-cluster
vm.page_lock_unfairness
vm.panic_on_oom
vm.percpu_pagelist_high_fraction
vm.stat_interval
vm.stat_refresh
vm.swappiness
vm.unprivileged_userfaultfd
vm.user_reserve_kbytes
vm.vfs_cache_pressure
vm.watermark_boost_factor
vm.watermark_scale_factor
vm.zone_reclaim_mode
oleg@mobile:~:$
Поиск конкретных параметров
Объединив опцию -a
с утилитой grep
можно выполнить поиск определённого параметра ядра. Следующая команда, например, ищет все параметры, связанные с маршрутизацией IPv6:
oleg@mobile:~:$ sudo sysctl -a | grep net.ipv6.route net.ipv6.route
net.ipv6.route.gc_elasticity = 9
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_min_interval = 0
net.ipv6.route.gc_min_interval_ms = 500
net.ipv6.route.gc_thresh = 1024
net.ipv6.route.gc_timeout = 60
net.ipv6.route.max_size = 2147483647
net.ipv6.route.min_adv_mss = 1220
net.ipv6.route.mtu_expires = 600
net.ipv6.route.skip_notify_on_dev_down = 0
oleg@mobile:~:$
Отображение определённого значения параметра
При использовании команды с именем параметра ядра можно отобразить его значение. Следующая команда, например, отображает значение подкачки системы:
oleg@mobile:~:$ sysctl vm.swappiness
vm.swappiness = 60
oleg@mobile:~:$
Отображение значения без имени параметра
При желании получить значение параметра без его имени, например, для целей сценариев, используйте опцию -n
:
oleg@mobile:~:$ sysctl -n vm.swappiness
60
oleg@mobile:~:$
Изменение значения параметра
Использование утилиты с опцией -w
позволяет изменять существующее значение параметра ядра. Следующая команда устанавливает значение swappiness
равным 30
:
oleg@mobile:~:$ sudo sysctl -w vm.swappiness=30
vm.swappiness = 30
oleg@mobile:~:$
Уровень подкачки системы влияет на поведение ядра при подкачке.
Загрузка конфигурации из файла по умолчанию
Для перезагрузки значений по умолчанию из файлов /etc/sysctl.conf
и /etc/sysctl.d/
команда используется с опцией -p
:
oleg@mobile:~:$ sysctl -p
oleg@mobile:~:$
Вывода нет, и значения перезагружаются без перезагрузки.
Загрузка конфигурации из пользовательского файла
Для загрузки настроек из пользовательского файла конфигурации используется следующая команда:
sysctl -p [/path/to/custom-sysctl.conf]
Замените [/path/to/custom-sysctl.conf/]
фактическим путём к вашему файлу конфигурации.
Загрузка всех файлов конфигурации системы
Для загрузки значений из всех мест конфигурации системы утилита используется с опцией -f
:
sysctl -f
Система загружает настройки из следующих файлов конфигурации: /run/sysctl.d/*.conf
, /etc/sysctl.d/*.conf
, /usr/local/lib/sysctl.d/*.conf
, /usr/lib/sysctl.d/*.conf
, /lib/sysctl.d/*.conf
и /etc/sysctl.conf
.
Подавление сообщений об ошибках
Пропуск ошибок для несуществующих параметров приводит к более чистому выводу и уменьшению ненужного шума в журналах. Используйте опцию -q
для подавления сообщений об ошибках для указанного параметра:
sysctl -q [non_existent_parameter]
Замените [non_existent_parameter]
фактическим именем переменной.
Заключение
Изучив работу команды sysctl
и протестировав эти несложные команды можно уже получить достаточное представление об управлении ядром Linux.