直接查看运行时内核参数当前值最可靠方式是sysctl加参数全名,如sysctl net.core.somaxconn;脚本取值用-n选项,如sysctl -n net.core.somaxconn;也可cat /proc/sys/对应路径,点号需替换为斜杠。

直接看运行时内核参数的当前值,别去翻配置文件——sysctl 和 /proc/sys/ 读的是真实生效值,/etc/sysctl.conf 里写的只是“下次重启想变成什么样”。
用 sysctl 查单个参数的实际值
最常用也最可靠的方式就是 sysctl 加参数全名,比如确认 TCP 连接队列上限是否已调高:
-
sysctl net.core.somaxconn输出net.core.somaxconn = 4096,等号右边就是当前生效值 - 脚本里取纯数字必须加
-n:执行sysctl -n net.core.somaxconn只返回4096 - 参数名拼错或内核根本不支持(如
net.ipv4.tcp_tw_recycle在 Linux 4.12+ 已移除),会报No such file or directory - 某些参数(如
kernel.random.uuid)每次读都变,不能用-n做稳定判断
绕过 sysctl,直接 cat /proc/sys/
适合最小化环境、容器或 shell 条件判断,路径里的点号要换成斜杠:
-
net.ipv4.ip_forward对应/proc/sys/net/ipv4/ip_forward,执行cat /proc/sys/net/ipv4/ip_forward即可 - 脚本中建议清理换行符:
$(cat /proc/sys/net/ipv4/ip_forward | tr -d '\n') - 只读参数(如
kernel.version)可读不可写,echo 1 > /proc/sys/xxx会提示Permission denied -
/proc/sys/net/ipv4/下没有tcp_tw_recycle文件——不是你漏了,是它真没了
查哪些参数被人工改过(不是默认值)
sysctl --show-config 不是列出全部参数,而是只显示“被显式设置过”的项,帮你快速区分哪些是运维动过的:
- 刚往
/etc/sysctl.d/99-custom.conf写了vm.swappiness = 10,执行该命令就能立刻看到这行 - 它不反映临时修改(
sysctl -w),只体现持久化配置的实际加载结果 - 若没改过任何参数,命令可能无输出——不代表出错,只是全用内核默认值
- 输出格式和配置文件一致:
参数名 = 值,可直接用于备份或迁移
真正决定当前值的是内核运行时状态,不是 /etc/sysctl.conf 的内容;哪怕你改了配置文件但没执行 sysctl --system 或 sysctl -p,那些改动就只是文本,不会生效。











