![如何检查哪些 SysRq 功能已启用?](https://linux22.com/image/1300827/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E5%93%AA%E4%BA%9B%20SysRq%20%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%90%AF%E7%94%A8%EF%BC%9F.png)
该文件/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