Найти параметр
2>/dev/null прячет строки permission denied on key; с sudo видны все
параметры.
sysctl читает и меняет параметры ядра; -w действует до перезагрузки, постоянно — файл в /etc/sysctl.d/.
sysctl vm.swappiness
прочитать параметр
sysctl -n vm.swappiness
только значение
sudo sysctl -w vm.swappiness=10
до перезагрузки
echo 'vm.swappiness = 10' \
| sudo tee /etc/sysctl.d/90-swappiness.conf
постоянно
sudo sysctl --system
применить все файлы
sudo sysctl -p /etc/sysctl.d/90-swappiness.conf
один файл
sysctl -a 2>/dev/null | grep forward
найти параметр
Параметры ядра — числа и строки, которые меняют его поведение на ходу:
склонность к swap, пересылку пакетов, лимиты файлов. sysctl читает и
меняет их без перезагрузки. Изменение через sysctl -w живёт до
перезагрузки; постоянное значение записывают в файл в /etc/sysctl.d/.
Каждый параметр — файл в /proc/sys (см. proc-filesystem).
Имя параметра — путь к файлу, где косые черты заменены точками:
vm.swappiness — это /proc/sys/vm/swappiness.
Первая часть имени — подсистема: vm — память, net — сеть, fs —
файлы, kernel — само ядро. Ученику sysctl -a показывает около 900
параметров; часть он прочитать не может и получает permission denied on
key в поток ошибок.
Ключ -w (sudo sysctl -w net.ipv4.ip_forward=1) делает то же, его можно
не писать.
Пробелов вокруг = в командной строке быть не должно (см. неполадки).
Значение живёт до перезагрузки.
При загрузке значения берутся из файлов *.conf в трёх каталогах:
| Каталог | Чьи файлы |
|---|---|
/etc/sysctl.d/ |
администратора — сюда кладёшь свои |
/run/sysctl.d/ |
временные, до перезагрузки (на машине тренажёра его нет) |
/usr/lib/sysctl.d/ |
пакетов: 10-apparmor.conf, 50-pid-max.conf |
Файлы из всех каталогов сортируются по имени и применяются по порядку:
параметр из файла, который идёт позже, перекрывает ранний. Поэтому имя
начинают с числа — 90-swappiness.conf применится после 10-… и 50-….
Файл в /etc с тем же именем, что в /usr/lib, заменяет его целиком.
Последним применяется /etc/sysctl.conf; в /etc/sysctl.d/ на него
указывает ссылка 99-sysctl.conf.
Строка файла — имя = значение, пробелы вокруг = здесь разрешены:
sysctl --system применяет все файлы так же, как при загрузке, и печатает
каждый файл и каждое значение. Читаются только файлы *.conf: файл
99-z.txt или 99-sysctl.conf.bak в том же каталоге пропускается без
сообщений.
Частые параметры:
| Параметр | Зачем |
|---|---|
vm.swappiness |
склонность к swap (60 по умолчанию) |
net.ipv4.ip_forward |
пересылка пакетов: маршрутизатор, NAT, контейнеры |
fs.nr_open |
потолок лимита открытых файлов на процесс |
fs.file-max |
открытых файлов на всю систему |
fs.inotify.max_user_watches |
наблюдатели inotify (редакторы, tail -f) |
kernel.pid_max |
наибольший PID (4194304 в Ubuntu) |
kernel.dmesg_restrict |
1 — dmesg только для root |
kernel.hung_task_timeout_secs |
через сколько секунд в D ядро пишет о зависшей задаче |
net.core.somaxconn |
очередь соединений к слушающему сокету |
Ключи самой команды — в таблице ниже.
| Ключ | Что делает | Пример |
|---|---|---|
-w param=value |
Изменить параметр сейчас; действует до перезагрузки. | sudo sysctl -w net.ipv4.ip_forward=1 |
-a |
Показать все параметры ядра — на машине тренажёра их около 900, обычно с фильтром grep. | sysctl -a 2>/dev/null | grep forward |
--system |
Применить все файлы sysctl.d и sysctl.conf в правильном порядке. | sudo sysctl --system |
-p FILE |
Применить параметры из конкретного файла (по умолчанию /etc/sysctl.conf). | sudo sysctl -p /etc/sysctl.d/99-forward.conf |
-n |
Вывести только значение, без имени параметра — удобно в скриптах. | sysctl -n vm.swappiness |
Ничего не найдено. Попробуй запрос короче.
2>/dev/null прячет строки permission denied on key; с sudo видны все
параметры.
Если sysctl --system вернул нужное значение, при загрузке будет то же:
служба systemd-sysctl читает те же файлы в том же порядке.
sysctl --system сначала печатает все строки * Applying … по порядку,
потом — все значения. Какой файл последним задал параметр, нагляднее
показывает systemd-analyze: файлы в порядке применения, перед каждым —
строка # /путь:
Значение из файла, который в этом списке ниже, перекрывает верхние.
Удали свой файл из /etc/sysctl.d/ и задай значение руками
(sudo sysctl -w vm.swappiness=60) или перезагрузи машину — sysctl
--system старых значений не возвращает, он только применяет файлы.
sysctl -w и запись в /proc/sys живут до перезагрузки. Нужен файл
*.conf в /etc/sysctl.d/ (раздел «Постоянно» выше).
Без sudo sysctl печатает строку с новым значением и код 0, но значение
не меняет. Ошибка — в потоке ошибок. Повтори с sudo и проверь чтением.
.conf — файл пропущен молча.grep -r <параметр> /etc/sysctl.d/ /usr/lib/sysctl.d/ /etc/sysctl.conf.sysctl --system пропускает её без
сообщения и с кодом 0. sudo sysctl -p <файл> покажет
cannot stat /proc/sys/…: No such file or directory и вернёт 1.Ответ — sysctl: cannot stat /proc/sys/net/ipv4/no_such: No such file or
directory.
Такого параметра нет: опечатка или параметр появляется только с модулем
ядра (например, net.netfilter.* — после загрузки nf_conntrack, см.
kernel-modules).
В командной строке имя=значение пишется без пробелов. В файлах
sysctl.d пробелы вокруг = разрешены.
--dry-run должен только показать, что будет применено. В procps 4.0.4
важен порядок ключей: sudo sysctl --dry-run --system значения не
меняет, а sudo sysctl --system --dry-run применяет файлы по-настоящему.
Проверено на машине тренажёра: после второй команды vm.swappiness
сменился с 60 на 33. Для пробы файла — sudo sysctl --dry-run -p <файл>.
/proc/sys и остальной /proc.vm.swappiness и swap.fs.nr_open и лимиты процесса.Есть неточность? Сообщить об ошибке в статье