说明
在 liunx系统中内核参数主要涉及到两处的配置文件: /etc/sysctl.conf 和这个目录/etc/sysctl.d下的所有.conf 结尾的文件。
/etc/sysctl.d/
存放的系统内核参数配置文件在系统启动时会被 sysctl
工具读取并应用。以下是关于这些文件的加载机制和如何避免相互覆盖的详细说明。
加载机制
-
文件命名规则:
- 文件名通常以数字开头,用于确定加载顺序。例如,
10-network-security.conf
会比20-other-settings.conf
先加载。 - 文件名通常以
.conf
结尾。
- 文件名通常以数字开头,用于确定加载顺序。例如,
-
加载过程:
- 系统启动时,
systemd
会调用sysctl
工具来读取/etc/sysctl.d
目录中的所有.conf
文件。 sysctl
会按照文件名的字母顺序依次读取并应用这些文件中的内核参数。
- 系统启动时,
-
命令行加载:
- 您也可以手动加载这些配置文件,使用
sysctl -p
命令。默认情况下,sysctl -p
会读取/etc/sysctl.conf
文件。要加载/etc/sysctl.d
目录中的所有文件,可以使用sysctl --system
命令。
- 您也可以手动加载这些配置文件,使用
避免相互覆盖
-
文件命名:
- 使用不同的数字前缀来控制加载顺序。例如,
10-network-security.conf
和20-other-settings.conf
。 - 确保每个文件中的参数名称唯一,避免重复定义相同的参数。
- 使用不同的数字前缀来控制加载顺序。例如,
-
参数覆盖:
- 如果多个文件中定义了相同的参数,后加载的文件中的值会覆盖先加载的文件中的值。因此,建议将通用或基础的配置放在编号较小的文件中,将特定或高级的配置放在编号较大的文件中。
示例
假设您有两个文件:
-
10-network-security.conf:
net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.tcp_syncookies = 1
-
20-other-settings.conf:
net.ipv4.tcp_syncookies = 0 fs.file-max = 100000
在这种情况下:
20-other-settings.conf
中的 net.ipv4.tcp_syncookies = 0
会覆盖
10-network-security.conf
中的 net.ipv4.tcp_syncookies = 1
手动加载
-
加载所有配置文件:
sudo sysctl --system
-
加载特定文件:
sudo sysctl -p /etc/sysctl.d/10-network-security.conf
验证参数
您可以使用 sysctl
命令来验证特定参数的当前值:
sudo sysctl net.ipv4.tcp_syncookies
总结
/etc/sysctl.d
目录中的文件在系统启动时会按字母顺序依次加载。为了避免参数覆盖,建议使用不同的数字前缀来控制加载顺序,并确保每个文件中的参数名称唯一。通过合理组织配置文件,您可以有效地管理内核参数,确保系统的稳定性和性能