sysctl.conf 是最后一场比赛吗?

Kol*_*arA 4 sysctl

我在哪里可以找到sysctl.conf基于最后一场比赛的官方文档?

因此,/etc/sysctl.conf文件中有两个条目:

vm.swappiness=10
vm.swappiness=11
Run Code Online (Sandbox Code Playgroud)

哪个会赢?最后一个?如果/etc/sysctl.d目录中有文件会发生什么?

Ste*_*itt 7

我不认为有任何这样的官方文件。sysctl条目由procpssystemd处理;但两个项目的文档都没有说明如何在同一配置文件中处理条目。

简短的版本是最后一个条目sysctl.conf获胜,即使存在其他文件(在其中/etc/sysctl.d或其他地方),无论使用哪个系统加载设置。

procps

要了解如何procps处理条目,我们需要看的源代码sysctl。这表明后面的条目在不知道早期条目的情况下被处理,所以最后一个获胜(看看Preload函数)。当在命令行上给出多个配置文件时,它们会按顺序处理,如手册页中所述

使用此选项意味着参数sysctl是文件,按指定的顺序读取这些文件。

有了这个--system选项,事情变得有点复杂,但至少有记录:

从所有系统配置文件加载设置。按照从上到下的顺序从以下列表中的目录中读取文件。一旦加载了给定文件名的文件,后续目录中的任何同名文件都将被忽略。

  • /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

文档不是很完整。如上所述,给定文件中的条目按顺序应用,并覆盖先前赋予相同设置的任何值。此外,查看该PreloadSystem函数表明文件是按名称顺序处理的,并且/etc/sysctl.conf是无条件处理的(较早目录中的同名文件不会覆盖它)。

系统

systemd有自己的sysctl处理程序,这是在记录sysctl.d手册页; 有一个关于优先级的部分:

配置文件从目录中读取/etc//run/以及/usr/lib/,在优先顺序。这些配置目录中的每个配置文件都应以. 在文件覆盖的文件,在相同的名称和。中的文件覆盖.filename.conf/etc//run//usr/lib//run//usr/lib/

[…] 所有配置文件都按字典顺序按文件名排序,无论它们驻留在哪个目录中。如果多个文件指定了相同的选项,则文件中具有字典序最新名称的条目将优先。建议在所有文件名前加上一个两位数字和一个破折号,以简化文件的排序。

同样,单个配置文件中较晚的条目会覆盖较早的条目。