net.core.rmem_max
我已经修改了with的值sysctl
,现在我想将其设置回默认值。
如果我重新启动,net.core.rmem_max
将返回到其默认值(因为它没有在 中被覆盖/etc/sysctl.conf
),但是我可以在不重新启动的情况下知道这个值吗?
理想情况下,我应该sysctl net.core.rmem_max
在修改它之前运行读取该值,但我忘记了......
答案1
这通常是不可能的:内核不会保留原始值(至少在 Linux 下不会,对于其他 UNIX 变体来说可能也是如此)。设置的值存储在变量中;当您更改设置时,包含变量的内存将被不可逆转地更新。
对于大多数设置,变量的初始值是在编译时确定并存储在内核二进制文件中的常量。因此,原则上您可以检查内核二进制文件以查找默认值。您必须找到与您感兴趣的设置相对应的符号,并跟踪内核二进制文件中该符号的地址。在虚拟机中启动内核会减少工作量。
对于大多数设置,您可以查看内核源代码 -kernel/sysctl.c
和其他文件。你会看到类似的定义
{
.procname = "rmem_max",
.data = &sysctl_rmem_max,
…
},
(在net/core/sysctl_net_core.c
),从中您可以跟踪初始化sysctl_rmem_max
多变的。虽然这个是从常量初始化的,但需要大量阅读 C 代码才能扩展。
答案2
在我的 OpenBSD 机器上,/etc/sysctl.conf 列出了一堆默认的 sysctl 值,但这个列表并不详尽。
也许最好的方法是阅读 sysctl 代码或向运行相同操作系统的朋友询问他的值:)