sysctl -a 从哪里打印所有内核参数?

sysctl -a 从哪里打印所有内核参数?

我们有一台 Linux 机器(Redhat 6)

当我们打印所有参数时,/etc/sysctl.conf我们只能看到大约 20 个,但当我们执行时,sysctl -a我们会看到超过 200 个。

那么从哪里sysctl -a打印所有这些参数呢?

或者例如当我们这样做时

sysctl -w variable=value

如何知道变量应该保存在哪里?

如何知道每个参数是动态的还是静态的?

答案1

系统控制寄存器设置存储在内核中。这些设置会影响内核行为;基本上,它们是系统上运行的程序可以读取和写入的内核变量。

当内核启动时,每个 sysctl 设置都有一个默认值。该值可以通过命令等程序随时更改sysctl,或者在 Linux 下通过写入/proc/sys.

该文件/etc/sysctl.conf不会在运行时确定设置的值。它仅在启动时使用,以更改编译到内核中的默认值的某些设置。如果您对 进行了一些更改/etc/sysctl.conf,则可以通过重新启动 sysctl“服务”来将它们作为一个整体应用 - sysctl 服务不对应于正在运行的进程,它是一个伪服务,仅在以下情况下将设置加载到内核中:开始。

如果您想更改设置以便在重新启动后保留该值,请将其添加到/etc/sysctl.conf.要临时应用设置或尝试设置,请使用sysctlecho … >/proc/sys/…

答案2

如何知道每个参数是动态的还是静态的?

中的所有内核参数sysctl都是动态的。当你根据你的内核版本检查这个数字时,sysctl -a | wc -l它应该超过 1000。

要读取这些值,您有几个智能选​​项:

sysctl net.ipv4.ip_forward          # display specific parameter
sysctl net.ipv4                     # display all net.ipv4.* parameters
sysctl -a                           # display all parameters

要持久写入值,您可以使用目录/etc/sysctl.conf中的任何conf文件/etc/sysctl.d/,一旦更新conf文件,您需要重新加载配置文件。

sysctl -p [filename]

当然,您可以sysctl按照 Gilles 的概述重新启动“服务”。

sysctl -a 从哪里打印所有内核参数?

来自伪文件系统 procfs (man procfs)。它提供了内核数据结构的接口。它通常/proc由系统自动安装。

相关内容