sysctl.conf 文件的结构是否始终为 /etc/sysctl.conf?

Is the sysctl.conf file always structured as /etc/sysctl.conf?

我需要知道 Linux 的所有发行版是否都在 sysctl.conf/etc/sysctl.conf

有人告诉我 Arch Linux 没有。在上述路径下设置的配置是否可以被某些发行版中的另一个文件覆盖?

不总是。 RHEL8 有一个虚拟文件引用了 sysctl.d.

的手册页

man sysctl.d能读到不少地方。

NAME
       sysctl.d - Configure kernel parameters at boot

SYNOPSIS
       /etc/sysctl.d/*.conf

       /run/sysctl.d/*.conf

       /usr/lib/sysctl.d/*.conf

RHEL8 上 sysctl --system 的 运行 按以下顺序评估文件:

sysctl --system
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /etc/sysctl.d/50-libreswan.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...

来自 man sysctl.conf:

       /etc/sysctl.d/*.conf
       /run/sysctl.d/*.conf
       /usr/local/lib/sysctl.d/*.conf
       /usr/lib/sysctl.d/*.conf
       /lib/sysctl.d/*.conf
       /etc/sysctl.conf

       The paths where sysctl preload files usually exist.  See also sysctl
       option --system.

来自man sysctl

   --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.
          /etc/sysctl.d/*.conf
          /run/sysctl.d/*.conf
          /usr/local/lib/sysctl.d/*.conf
          /usr/lib/sysctl.d/*.conf
          /lib/sysctl.d/*.conf
          /etc/sysctl.conf

在现代系统上 sysctl 配置在启动时加载 systemd-sysctl.service。来自 man systemd-sysctl:

   systemd-sysctl.service is an early boot service that configures sysctl(8) kernel parameters by invoking
   /usr/lib/systemd/systemd-sysctl.

   When invoked with no arguments, /usr/lib/systemd/systemd-sysctl applies all directives from configuration files listed in
   sysctl.d(5).

据我所知,文件是从上到下加载的,因此存储在 /etc/sysctl.conf 中的配置可能会覆盖之前设置的配置。

专业提示:/usr/lib/systemd/systemd-sysctl --cat-config

任何分发、供应商和包管理员以及其他分发文件的人都可以将配置存储在任何这些目录中。包将在 /usr/lib/sysctl.d/*.conf 中存储配置。通常 /etc/sysctl.conf/etc/sysctl.d/*.conf 仅供管理员手动工作。