sysctl против записи непосредственно в /proc/*

На типичной машине с Linux вы можете изменить конфигурацию ядра, изменив файлы, расположенные по адресу /proc/*,

Например, для IPv6 accept_dad параметр конкретного сетевого интерфейса (скажем, eth0), вы бы изменили следующий файл:

/proc/sys/net/ipv6/conf/eth0/accept_dad

Но, как я недавно обнаружил, есть широко распространенный инструмент, sysctl, который имеет ту же цель и работает так:

sysctl -w net.ipv6.conf.eth0.accept_dad=1

У меня вопрос, когда мы должны использовать какой инструмент? Мой инстинкт говорит, что если вы знаете, что делаете, вы должны написать в файл напрямую, но, если вам нужны проверки, а что нет, вы должны использовать sysctl,

поскольку sysctl это еще один слой над чем-то, что мы можем контролировать напрямую, я думаю, что используя его, мы подвергаем себя потенциальным ошибкам, которых в противном случае можно избежать путем прямой записи в файлы.

1 ответ

sysctl это инструмент для чтения и изменения различных атрибутов ядра. Он доступен во многих Unix-подобных операционных системах, включая, например, не только Linux, но также OpenBSD и FreeBSD. sysctl обычно доступен как в качестве команды оболочки, так и в виде системного вызова.

В Linux sysctl механизм дополнительно представлен как часть виртуальной файловой системы procfs, под /proc/sys,

Обратите внимание, что sysctl системный вызов устарел в Linux; рекомендуется использовать /proc/sys вместо этого (напрямую или через sysctl командная оболочка).

Рекомендации:

  • Manpage для sysctl системный вызов в Linux
  • Manpage для sysctl команда оболочки в Linux

sysctl это утилита для взаимодействия с /proc, В общем, они выполняют одно и то же. Я полагаю, что годы (десятилетия?) Назад единственным способом настройки параметров ядра было редактирование "файлов" в /proc вручную и sysctl позже появился как более цивилизованный способ поиска и изменения параметров ядра.

Примечательно, редактирует в /proc не пережить перезагрузку. Это удобно, если вы экспериментируете. Файл /etc/sysctl.conf это место для хранения ваших sysctl изменения, которые вы хотите сохранить при загрузке. Если вам действительно нравится редактировать файлы, вы можете просто внести свои изменения там и позвонить sysctl -p выполнить изменения.

Другие вопросы по тегам