最推荐使用 /etc/sysctl.d/ + sysctl --system 流程,因 /etc/sysctl.conf 易被覆盖、难维护且在 RHEL 8+/Ubuntu 22.04+ 等系统中会被 .d/ 下文件优先加载而静默失效;必须创建以 .conf 结尾的独立文件(如 99-custom.conf),执行 sudo sysctl --system 加载并验证运行值是否更新。

直接写进配置文件不等于永久生效,关键在“写对位置 + 加载到位”。现代 Linux 发行版(如 RHEL 8+/CentOS 8+、Ubuntu 18.04+)默认优先读取 /etc/sysctl.d/ 下的 .conf 文件,/etc/sysctl.conf 反而可能被忽略。只改 /etc/sysctl.conf 很容易白忙一场。
推荐方式:用 /etc/sysctl.d/ 写独立配置文件
这是最清晰、可维护、符合 systemd 规范的做法。
- 创建带数字前缀的配置文件,例如:
sudo tee /etc/sysctl.d/99-custom.conf <<EOF<br>net.ipv4.ip_forward = 1<br>vm.swappiness = 10<br>EOF
- 文件名必须以
.conf结尾,数字前缀控制加载顺序(越小越早) - 每行严格为
key = value格式,等号两侧允许空格,但不能在行尾加注释(#必须独占一行) - 保存后执行
sudo sysctl --system—— 它会重新加载/etc/sysctl.conf和全部/etc/sysctl.d/*.conf,并立即应用到运行内核
验证是否真正生效
别只看配置文件有没有写对,要确认内核运行值已更新:
- 查运行值:
sysctl net.ipv4.ip_forward或cat /proc/sys/net/ipv4/ip_forward,输出应为1 - 如果值没变,检查:
– 文件是否放在/etc/sysctl.d/目录下
– 文件权限是否为 root 可读(644即可)
– 参数名有无拼写错误(如ip_forwad少字母)
– 值类型是否匹配(如布尔参数不能写on,得写1)
不推荐但偶尔要用的方式:改 /etc/sysctl.conf
仅适用于老旧系统或简单场景,注意兼容性风险:
- 用
sudo nano /etc/sysctl.conf编辑,在末尾添加参数,例如:kernel.sysrq = 0 - 保存后必须执行
sudo sysctl -p(不带路径时默认加载该文件) - ⚠️ 注意:
sysctl -p不会加载/etc/sysctl.d/下的任何文件,容易漏配;且部分新发行版已不再默认读取此文件
临时修改不能替代永久配置
sysctl -w net.ipv4.conf.all.send_redirects=0 这类命令只写内存,重启即丢。它适合测试效果或应急处置,但所有 -w 操作都应同步记录到 /etc/sysctl.d/ 并执行 sysctl --system,否则交接时极易遗漏。


















