use*_*001 19 linux bash bitmaps linux-kernel sysrq
该文件/proc/sys/kernel/sysrq包含一个数字,例如:
1 (启用所有 SysRq 命令),0 (禁用所有),有人能告诉我当位掩码设置为 时允许/禁止哪些 SysRq 函数438吗?
$ cat /proc/sys/kernel/sysrq
438
Run Code Online (Sandbox Code Playgroud)
Wil*_*son 26
这些是可用的 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
根据您的发行版,您可以CONFIG_MAGIC_SYSRQ使用以下命令判断内核是否编译:
$ grep SYSRQ /boot/config-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
这在 Ubuntu 上对我有用。
这是一个 Bash one-liner,它将为您打印启用的选项:
for i in $(seq 1 8); do (( ($(</proc/sys/kernel/sysrq) & $((1<<$i))) > 0 )) && echo $((1<<$i)); done
Run Code Online (Sandbox Code Playgroud)
当位掩码设置为 438 时,允许/禁止哪些 SysRq 功能?
$ for i in $(seq 1 8); do (( (438 & $((1<<$i))) > 0 )) && echo $((1<<$i)); done
2
4
16
32
128
256
Run Code Online (Sandbox Code Playgroud)
其含义请参考威廉的回答。
要启用所有选项,请运行:
echo 1 | sudo tee /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)
要使其持久化,请运行:
echo kernel.sysrq=1 | sudo tee /etc/sysctl.d/20-sysrq.conf
Run Code Online (Sandbox Code Playgroud)