Eu não acho que haja tal documentação oficial. sysctl
entradas são tratadas por procps
e systemd; mas nem a documentação dos projetos aborda como as entradas são processadas no mesmo arquivo de configuração.
A versão curta é que a última entrada em sysctl.conf
vence, mesmo quando outros arquivos estão presentes (em /etc/sysctl.d
ou em outro lugar), independentemente de qual sistema é usado para carregar as configurações.
procps
Para entender como procps
processa entradas, precisamos analisar o código-fonte para sysctl
. Isso mostra que as entradas posteriores são processadas sem o conhecimento das entradas anteriores, portanto, o último ganha (observe a função Preload
). Quando vários arquivos de configuração são fornecidos na linha de comando, eles são processados em ordem, conforme descrito em o homem página :
Using this option will mean arguments to
sysctl
are files, which are read in the order they are specified.
As coisas ficam um pouco mais complexas com a opção --system
, mas pelo menos isso está documentado:
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
A documentação não está completa. Como mencionado acima, as entradas em um determinado arquivo são aplicadas em ordem e sobrescrevem qualquer valor dado à mesma configuração anteriormente. Além disso, observar a função PreloadSystem
mostra que os arquivos são processados na ordem dos nomes e que /etc/sysctl.conf
é processado incondicionalmente ( ie um arquivo com nome idêntico em um diretório anterior não o substitui) ).
systemd
O systemd possui seu próprio manipulador sysctl
, que está documentado em sysctl.d
manpage ; que tem uma seção sobre precedência:
Configuration files are read from directories in
/etc/
,/run/
, and/usr/lib/
, in order of precedence. Each configuration file in these configuration directories shall be named in the style offilename
.conf
. Files in/etc/
override files with the same name in/run/
and/usr/lib/
. Files in/run/
override files with the same name in/usr/lib/
.[…] All configuration files are sorted by their filename in lexicographic order, regardless of which of the directories they reside in. If multiple files specify the same option, the entry in the file with the lexicographically latest name will take precedence. It is recommended to prefix all filenames with a two-digit number and a dash, to simplify the ordering of the files.
Novamente, as entradas posteriores em um único arquivo de configuração substituem as entradas anteriores.