设置 Linux 内核运行时参数的正确方法是什么?

slm*_*slm 4 linux kernel parameter sysctl

设置 Linux 内核运行时参数的规定方法是什么?我有时看到人们会将这些设置在诸如/etc/rc.local.

这真的是这样做的正确方法吗?

slm*_*slm 5

您可以使用sysctl来设置一些内核参数,特别是/proc/sys. 这些可以在文件中设置/etc/sysctl.conf或添加到目录中的单个文件(某些发行版如 Fedora 的首选方法)/etc/sysctl.d。在具有此目录的发行版上,它用于自定义。

摘自 sysctl 的手册页

   sysctl - configure kernel parameters at runtime
Run Code Online (Sandbox Code Playgroud)

例子

您可以使用以下命令获取当前设置的内核参数的部分列表:

$ sudo sysctl -a | head -5
abi.vsyscall32 = 1
debug.exception-trace = 1
debug.kprobes-optimization = 1
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 0
Run Code Online (Sandbox Code Playgroud)

做出改变

/etc/sysctl.conf

只需将规则添加到文件中sysctl.conf

# sysctl.conf sample
#
kernel.domainname = example.com
; this one has a space which will be written to the sysctl!
kernel.modprobe = /sbin/mod probe
Run Code Online (Sandbox Code Playgroud)

您还可以使用sysctl.conf命令行编辑此文件,而无需直接编辑它。

$ sysctl -w kernel.domainname="example.com"
Run Code Online (Sandbox Code Playgroud)

进行任何更改后,请务必使它们处于活动状态。

$ sysctl -p
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.d

要添加您对此参数的覆盖,只需将其放入与/etc/sysctl.d目录中已存在的文件名称相似的文件中。

$ ls -l /etc/sysctl.d
total 40
-rw-r--r-- 1 root root   77 Jul 16  2012 10-console-messages.conf
-rw-r--r-- 1 root root  490 Jul 16  2012 10-ipv6-privacy.conf
-rw-r--r-- 1 root root  726 Jul 16  2012 10-kernel-hardening.conf
-rw-r--r-- 1 root root 1184 Jul 16  2012 10-magic-sysrq.conf
-rw-r--r-- 1 root root  509 Jul 16  2012 10-network-security.conf
...
Run Code Online (Sandbox Code Playgroud)

在名为99-myparam.conf.

$ more 10-console-messages.conf 

# the following stops low-level messages on console
kernel.printk = 4 4 1 7
Run Code Online (Sandbox Code Playgroud)

其中参数名在左边,对应的值在右边。

有关sysctl更多详细信息,请参阅的手册页。