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

Linux kernel 如何覆盖/etc/sysctl.conf CentOS 7中的设置?,linux-kernel,centos,centos7,sysctl,Linux Kernel,Centos,Centos7,Sysctl,我试图使用CentOS7.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中的设置

我试图使用CentOS7.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的手册页,系统应该忽略“/etc/sysctl.conf”中的设置,因为我在“/etc/sysctl.d/sysctl.conf”中创建了一个同名文件,该文件首先读取。(参考:)


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

总之,/etc/sysctl.d/和其他sysctl.d目录中的*.conf文件不能覆盖/etc/sysctl.conf中的设置,因为/etc/sysctl.conf中的设置总是最后应用

    --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 ```