¿Cómo verificar qué funciones SysRq están habilitadas?

15

El archivo /proc/sys/kernel/sysrqcontiene un solo número, como:

  • 1 (habilite todos los comandos SysRq),
  • 0 (Desactivar todo),
  • o un entero positivo de base 10 que funciona como una máscara de bits binaria, lo que permite un subconjunto de funciones.

¿Podría alguien decirme qué funciones SysRq están permitidas / no permitidas cuando la máscara de bits está configurada 438?


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

Respuestas:

22

Estas son las funciones SysRq disponibles:

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, por lo que solo se permiten las funciones asociadas con esos números. Lea todo al respecto en la documentación .

Si convierte 438a base 2 ( 110110110), es aún más fácil de ver.

1     1     0    1    1    0   1   1   0
^256  ^128  ^64  ^32  ^16  ^8  ^4  ^2  ^1

Dependiendo de su distribución, puede saber si el núcleo se compiló con CONFIG_MAGIC_SYSRQeste comando:

$ grep SYSRQ /boot/config-$(uname -r)

Esto funciona para mí en Ubuntu.

William Jackson
fuente
Ah, es solo una combinación lineal de las máscaras de bits individuales. Muchas gracias.
user001
Un seguimiento: si no sucede nada cuando hago Alt + SysRq + (una tecla de comando), entonces supongo que esto significa que sysrq no estaba habilitado cuando se instaló el kernel. ¿Hay una manera simple de verificar si sysrq está habilitado o no (por ejemplo, ¿puedo encontrar el estado de CONFIG_MAGIC_SYSRQalgún lugar)?
user001
3
Agregué una posible forma de verificar CONFIG_MAGIC_SYSRQ.
William Jackson
Gracias. También me funcionó en Debian. La salida: CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_MASK=0x01b6(01b6 en hexadecimal es 438 en decimal). Supongo que ysignifica que se ha habilitado. Daría 2 votos a favor si pudiera.
user001
1
En muchas distribuciones de Linux, la configuración se mantiene en el núcleo en sí, no dentro /boot, por lo que el comando de verificación sería zgrep SYSRQ /proc/config.gz(o gunzip -c /proc/config.gz | grep SYSRQ).
user1686
2

Aquí hay una línea básica de Bash que le imprimirá las opciones habilitadas:

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

¿Qué funciones SysRq están permitidas / no permitidas cuando la máscara de bits se establece en 438?

$ for i in $(seq 1 8); do (( (438 & $((1<<$i))) > 0 )) && echo $((1<<$i)); done
2
4
16
32
128
256

Para el significado, consulte la respuesta de William .


Para habilitar todas las opciones, ejecute:

echo 1 | sudo tee /proc/sys/kernel/sysrq

Para hacerlo persistente, ejecute:

echo kernel.sysrq=1 | sudo tee /etc/sysctl.d/20-sysrq.conf
kenorb
fuente