web-dev-qa-db-ja.com

どのSysRq関数が有効になっているかを確認するにはどうすればよいですか?

ファイル/proc/sys/kernel/sysrqには、次のような単一の番号が含まれています。

  • 1(すべてのSysRqコマンドを有効にする)、
  • 0(すべて無効)、
  • または、バイナリビットマスクとして機能する10進数の正の整数で、関数のサブセットを有効にします。

ビットマスクが438に設定されている場合、どのSysRq関数が許可/禁止されるかを誰かに教えてもらえますか?


$ cat /proc/sys/kernel/sysrq
438
16
user001

使用可能な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で私のために働きます。

23
William Jackson

これは、有効なオプションを印刷する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
2
kenorb