Linux 魔法 SysRq 键中的 176 是什么意思

sta*_*biz 3 security kernel networking

这是在 中设置的值Ubuntu 22.04

root@test:~# cat /proc/sys/kernel/sysrq
176
Run Code Online (Sandbox Code Playgroud)

我无法从此链接找到该值:

https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html

这是什么意思?

Han*_*nnu 6

为了解释 SysReq 值,您需要将其转换为二进制,
然后检查哪些“位”1表明相应的功能是否已启用。

键入例如

$ python -c 'print( bin(176) )'
0b10110000
Run Code Online (Sandbox Code Playgroud)

...在 bash 提示符下将告诉以 a 开头的位0b(表示“二进制”)。注意:从右侧开始,使用第一位的
值,然后是下一位,向左每一步将值加倍。12

如果您希望打印实际的位值,则需要更多代码;

$ cat cvt.py 
#!/bin/env python

import sys

b=bin(int(sys.argv[1])).replace("0b","")
v=2**(len(b)-1)
for bit in b: 
  print( f"{v:>4}", "bit" if bit=="1" else "bit, not included" )
  v=v//2
Run Code Online (Sandbox Code Playgroud)

执行的结果显示:

$ python cvt.py 176
 128 bit
  64 bit, not included
  32 bit
  16 bit
   8 bit, not included
   4 bit, not included
   2 bit, not included
   1 bit, not included
Run Code Online (Sandbox Code Playgroud)

所以,176意味着

 16 =  0x10 - enable sync command
 32 =  0x20 - enable remount read-only
128 =  0x80 - allow reboot/poweroff
Run Code Online (Sandbox Code Playgroud)

...功能已启用。

注:16+32+128 = 176

$ echo ' 16+32+128' | bc
176
Run Code Online (Sandbox Code Playgroud)