查看当前内核参数?

pwn*_*bow 1 kernel sysctl perf-event kernel-parameters

我在我的系统日志中kernel.perf_event_max_sample_rate看到发生了变化。

我想知道我是否可以编写一个快速脚本来每隔几分钟记录一次这个变量。目前是:

sysctl -a | grep kernel.perf_event_max_sample_rate
Run Code Online (Sandbox Code Playgroud)

在手册页 sysctl 中说

sysctl - 在运行时配置内核参数

这是否意味着我的脚本将获得内核启动时设置的参数?它会带来变化吗?

Pet*_*tro 7

因此,学习 Unix 的重要事情之一就是阅读该死的手册页:

我不仅仅是一个脾气暴躁的老人,那里确实有有价值的信息。在这种情况下:

说明 sysctl 用于在运行时修改内核参数。可用的参数列在 /proc/sys/ 下。Linux 中的 sysctl 支持需要 Procfs。您可以使用 sysctl 来读取和写入 sysctl 数据。

所以我们可以:

$sudo sysctl -a | grep kernel.perf_event_max_sample_rate
kernel.perf_event_max_sample_rate = 50000
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.enp3s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.wlp1s0.stable_secret"
Run Code Online (Sandbox Code Playgroud)

通过阅读手册页,我们了解到 -a 是“显示当前可用的所有值”,但我们也可以看到:

概要

  sysctl [options] [variable[=value]] [...]
Run Code Online (Sandbox Code Playgroud)
  sysctl -p [file or regexp] [...]
Run Code Online (Sandbox Code Playgroud)

这意味着我们可以将上述命令缩短为:

$ sudo sysctl kernel.perf_event_max_sample_rate
kernel.perf_event_max_sample_rate = 50000    
Run Code Online (Sandbox Code Playgroud)

或者我们可以:

$ more /proc/sys/kernel/perf_event_max_sample_rate 
50000
Run Code Online (Sandbox Code Playgroud)

所以,TL;DR:

  1. 是的,您可以每隔几分钟编写一个脚本来记录此变量,但是如果它会在更改时显示在日志中,为什么要这样做?

  2. 从 /proc/sys/kernel/perf_event_max_sample_rate 读取值可能比使用 sysctl 更有效,并且从 sysctl 请求特定值比使用 grep 更有效。