Как проверить, какие функции SysRq включены?

15

Файл /proc/sys/kernel/sysrqсодержит одно число, например:

  • 1 (включить все команды SysRq),
  • 0 (отключить все),
  • или положительное целое число из 10, которое действует как двоичная битовая маска, позволяя выполнять поднабор функций.

Может кто-нибудь сказать мне, какие функции SysRq разрешены / запрещены, когда битовая маска установлена ​​в 438?


$ cat /proc/sys/kernel/sysrq
438
user001
источник

Ответы:

22

Это доступные функции 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.

Уильям Джексон
источник
Ах, это просто линейная комбинация отдельных битовых масок. Огромное спасибо.
user001
Одно последующее замечание: если ничего не происходит, когда я выполняю Alt + SysRq + (командная клавиша), то я предполагаю, что это означает, что sysrq не был включен, когда было установлено ядро. Есть ли простой способ проверить, включен ли sysrq или нет (например, могу ли я найти состояние CONFIG_MAGIC_SYSRQгде-нибудь)?
user001
3
Я добавил возможный способ проверки CONFIG_MAGIC_SYSRQ.
Уильям Джексон
Благодарю. У меня тоже работал на Debian. Выход: CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_MASK=0x01b6(01b6 в шестнадцатеричном виде - 438 в десятичном виде). Я полагаю, yзначит, это было включено. Я бы отдал 2 голоса "за", если бы мог.
user001
1
Во многих дистрибутивах Linux конфигурация хранится в самом ядре, а не в нем /boot, поэтому команда проверки будет zgrep SYSRQ /proc/config.gz(или gunzip -c /proc/config.gz | grep SYSRQ).
user1686
2

Вот одна строчка Bash, которая напечатает вам включенные опции:

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

Какие функции SysRq разрешены / запрещены, когда битовая маска установлена ​​на 438?

$ 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
kenorb
источник