วิธีตรวจสอบฟังก์ชั่น SysRq ที่เปิดใช้งาน


15

ไฟล์ /proc/sys/kernel/sysrqมีหมายเลขเดียวเช่น:

  • 1 (เปิดใช้งานคำสั่ง SysRq ทั้งหมด)
  • 0 (ปิดการใช้งานทั้งหมด)
  • หรือเลขจำนวนเต็มบวกฐาน 10 ซึ่งทำหน้าที่เป็น bitmask แบบไบนารี่ทำให้สามารถใช้ฟังก์ชันย่อยได้

ใครช่วยกรุณาบอกฉันว่าฟังก์ชั่น SysRq ได้รับอนุญาต / ไม่อนุญาตเมื่อ bitmask มีการตั้งค่า438?


$ cat /proc/sys/kernel/sysrq
438

คำตอบ:


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 ใน hex คือ 438 ในทศนิยม) ฉันคิดyว่ามันได้รับการเปิดใช้งาน จะให้ 2 คะแนนขึ้นไปถ้าฉันทำได้
user001

1
ใน Linux distros ส่วนใหญ่การกำหนดค่าจะถูกเก็บไว้ในเคอร์เนลตัวเองไม่ใช่ใน/bootดังนั้นคำสั่ง check จะเป็นzgrep SYSRQ /proc/config.gz(หรือgunzip -c /proc/config.gz | grep SYSRQ)
1686

2

นี่คือ Bash one-liner ซึ่งจะพิมพ์ตัวเลือกที่เปิดใช้งานให้คุณ:

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

ฟังก์ชัน SysRq ใดที่ได้รับอนุญาต / ไม่อนุญาตเมื่อ bitmask ถูกตั้งค่าเป็น 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.