如何覆盖 /etc/sysctl.conf CentOS 7 中的设置?

How to override settings in /etc/sysctl.conf CentOS 7?

我试图在 Cent OS 7.5 上使用“/etc/sysctl.conf”文件设置某些内核参数。我将“/etc/sysctl.conf”文件复制到“/etc/sysctl.d/sysctl.conf”并更新了某些参数并使用 "sysctl --system" 重新加载了设置。 但我看到 "/etc/sysctl.conf" 中的参数覆盖了 (/etc/sysctl.d/sysctl.conf) 中存在的参数。 (当我执行命令时,我也可以看到相同的情况,即首先应用来自 /etc/sysctl.d/sysctl.conf 的设置,然后应用来自“/etc/sysctl.conf”的设置,这会导致问题。)

但是根据手册页,sysctl --system 应该忽略“/etc/sysctl.conf”中的设置,因为我在“/etc/sysctl.d/sysctl 中创建了同名文件.conf”首先读取。 (参考:http://man7.org/linux/man-pages/man8/sysctl.8.html)。

    --system
              Load settings from all system configuration files. Files are
              read from directories in the following list in given order
              from top to bottom.  ***Once a file of a given filename is
              loaded, any file of the same name in subsequent directories is
              ignored.***
              /run/sysctl.d/*.conf
              /etc/sysctl.d/*.conf
              /usr/local/lib/sysctl.d/*.conf
              /usr/lib/sysctl.d/*.conf
              /lib/sysctl.d/*.conf
              /etc/sysctl.conf ```

手册页与源代码不一致sysctl.c。根据 PreloadSystem() 函数的源代码,它处理各种 sysctl.d 搜索目录中的 *.conf 文件(跳过那些已经看到的 *.conf 文件名,如手册页所述).然后它处理默认的 /etc/sysctl.conf 文件(如果它存在)而不检查是否已经看到 sysctl.conf 文件名。

综上所述,/etc/sysctl.conf中的设置不能被/etc/sysctl.d/和其他sysctl.d目录下的*.conf文件覆盖,因为/etc/sysctl.conf中的设置=16=].conf 总是最后应用。