如何检查哪些 SysRq 功能已启用?

如何检查哪些 SysRq 功能已启用?

该文件/proc/sys/kernel/sysrq包含一个数字,例如:

  • 1(启用所有 SysRq 命令),
  • 0(禁用所有),
  • 或以 10 为基数的正整数,其功能可用作二进制位掩码,从而启用一组功能。

有人能告诉我当位掩码设置为时哪些 SysRq 功能是允许/不允许的438吗?


$ cat /proc/sys/kernel/sysrq
438

答案1

这些是可用的 SysRq 函数:

0 - disable every SysRq function.
1 - enable every SysRq function.
2 - enable control of console logging level
4 - enable control of keyboard (SAK, unraw)
8 - enable debugging dumps of processes etc.
16 - enable sync command
32 - enable remount read-only
64 - enable signalling of processes (term, kill, oom-kill)
128 - allow reboot/poweroff
256 - allow nicing of all RT tasks

438= 2 + 4 + 16 + 32 + 128 + 256,因此只允许与这些数字相关的函数。在文档中阅读有关它的全部内容

如果转换438为基数为 2 ( 110110110) 则更容易看见。

1     1     0    1    1    0   1   1   0
^256  ^128  ^64  ^32  ^16  ^8  ^4  ^2  ^1

根据您的发行版,您可能能够判断内核是否CONFIG_MAGIC_SYSRQ使用以下命令进行编译:

$ grep SYSRQ /boot/config-$(uname -r)

这在 Ubuntu 上对我有用。

答案2

下面是一个 Bash 单行命令,它将打印出已启用的选项:

for i in $(seq 1 8); do (( ($(</proc/sys/kernel/sysrq) & $((1<<$i))) > 0 )) && echo $((1<<$i)); done

当位掩码设置为 438 时,哪些 SysRq 功能被允许/禁止?

$ for i in $(seq 1 8); do (( (438 & $((1<<$i))) > 0 )) && echo $((1<<$i)); done
2
4
16
32
128
256

欲了解其含义,请参阅威廉的回答


要启用所有选项,请运行:

echo 1 | sudo tee /proc/sys/kernel/sysrq

为了使其持久,请运行:

echo kernel.sysrq=1 | sudo tee /etc/sysctl.d/20-sysrq.conf

相关内容