/proc/sys/kernel/sysrq /proc/sysrq-trigger----強制重啟/觸發器


LINUX遠程強制重啟/proc/sys/kernel/sysrq /proc/sysrq-trigger----觸發器

https://www.cnblogs.com/yanghong-hnu/p/5880417.html  (

數據結構(/include/linux/leds.h))

1.     # echo 1 > /proc/sys/kernel/sysrq  

2.     # echo b > /proc/sysrq-trigger  

 

1. /proc/sys/kernel/sysrq

向sysrq文件中寫入1是為了開啟SysRq功能。根據linux/Documentations/sysrq.txt中所說:SysRq代表的是Magic System Request Key。開啟了這個功能以后,只要內核沒有掛掉,它就會響應你要求的任何操作。但是這需要內核支持(CONFIG_MAGIC_SYSRQ選項)。向/proc/sys/kernel/sysrq中寫入0是關閉sysrq功能,寫入1是開啟,其他選項請參考sysrq.txt。需要注意的是,/proc/sys/kernel/sysrq中的值只影響鍵盤的操作。

那么怎么使用SysRq鍵呢?

在x86平台上,組合鍵"<ALT> + SysRq + <command key>"組成SysRq鍵以完成各種功能。但是,在一些鍵盤上可能沒有SysRq鍵。SysRq鍵實際上就是"Print Screen"鍵。並且可能有些鍵盤不支持同時按三個按鍵,所以你可以按住"ALT鍵",按一下"SysRq鍵",再按一下"<command key>鍵",如果你運氣好的話,這個會有效果的。不過放心,現在的鍵盤一般都支持同時按3個或3個以上的鍵。

<command key>有很多,這里只挑幾個來說,其他的可以參考sysrq.txt文件。

· 'b' —— 將會立即重啟系統,並且不會管你有沒有數據沒有寫回磁盤,也不卸載磁盤,而是完完全全的立即關機

· 'o' —— 將會關機

· 's' —— 將會同步所有以掛在的文件系統

· 'u' —— 將會重新將所有的文件系統掛在為只讀屬性

 

2. /proc/sysrq-trigger

從文件名字就可以看出來這兩個是有關系的。寫入/proc/sysrq-trigger中的字符其實就是sysrq.txt中說的鍵所對應的字符,其功能也和上述一樣。

所以,這兩行命令先開啟SysRq功能,然后用'b'命令讓計算機立刻重啟。

 

/proc/sysrq-trigger該文件能做些什么事情呢? 

# 立即重新啟動計算機 (Reboots the kernel without first unmounting file systems or syncing disks attached to the system)

echo "b" > /proc/sysrq-trigger

# 立即關閉計算機(shuts off the system)

echo "o" > /proc/sysrq-trigger

# 導出內存分配的信息 (可以用/var/log/message 查看)(Outputs memory statistics to the console) 

echo "m" > /proc/sysrq-trigger

# 導出當前CPU寄存器信息和標志位的信息(Outputs all flags and registers to the console)

echo "p" > /proc/sysrq-trigger

# 導出線程狀態信息 (Outputs a list of processes to the console)

echo "t" > /proc/sysrq-trigger

# 故意讓系統崩潰 ( Crashes the system without first unmounting file systems or syncing disks attached to the system)

echo "c" > /proc/sysrq-trigger

# 立即重新掛載所有的文件系統 (Attempts to sync disks attached to the system)

echo "s" > /proc/sysrq-trigger

# 立即重新掛載所有的文件系統為只讀 (Attempts to unmount and remount all file systems as read-only)

echo "u" > /proc/sysrq-trigger

此外還有兩個,類似於強制注銷的功能

e — Kills all processes except init using SIGTERM

i — Kills all processes except init using SIGKILL

這是一組“ 魔術組合鍵”,只要 內核沒有被完全鎖住,不管內核在做什么事情,使用這些組合鍵能即時打印出內核的信息。
使用sysrq組合鍵是了解系統目前運行情況的最佳方式。如果系統出現掛起的情況或在診斷一些和內核相關,比較怪異,比較難重現的問題的時候,使用sysrq鍵是個比較好的方式。
怎么打開和關閉SysRq組合鍵?
為了安全起見,在紅帽企業版Linux里面,默認SysRq組合鍵是關閉的。 打開這個功能,運行:
# echo 1 > /proc/sys/kernel/sysrq
關閉這個功能:
# echo 0 > /proc/sys/kernel/sysrq
如果想讓此功能一直生效,在/etc/sysctl.conf里面設置kernel.sysrq的值為1. 重新啟動以后,此功能將會自動
打開。
kernel.sysrq = 1
因為打開sysrq鍵的功能以后,有終端訪問權限的用戶將會擁有一些特別的功能。因此,除非是要調試,解決問題,一般情況下,不要打開此功能。如果一定要打開,請確保你的終端訪問的安全性。
怎么觸發一個sysrq事件?
有幾種方式能觸發sysrq事件。在帶有AT鍵盤的 一般系統上,在 終端上輸入一下組合鍵:
Alt+PrintScreen+[CommandKey]
例如,要讓內核導出內存信息(CommandKey "m"),你應該同時按下Alt 和 Print Screen 鍵,然后按下 m 鍵.
提示: 此組合鍵在Xwindows上是無法使用的。所以,你先要轉換到文本 虛擬終端下。如果你當前是在圖像界面,
能按Ctrl+Alt+F1轉換到 虛擬終端
在串口終端上,要想獲得同樣的效果,需要先在終端上發送Break信號,然后在5秒內輸入sysrq組合鍵。
如果你在機器上有 root權限,你能把commandkey字符寫入到/proc/sysrq-trigger文件。這能幫助你通過 腳本或你不在系統終端上的時候觸發sysrq事件。
# echo 'm' > /proc/sysrq-trigger
當我觸發一個sysrq事件的時候,結果保存在什么地方?
當一個sysrq命令被觸發,內核將會打印信息到內核的環形緩沖並輸出到系統控制台。此信息一般也會通過syslog輸出到/var/log/messages.
有時候,可能系統已無法響應,syslogd可能無法記錄此信息。在這種情況下,建議你設置一個串口終端來收集這個信息。
那些類型的sysrq事件能被觸發?
sysrq功能被打開后,有幾種sysrq事件能被觸發。不同的 內核版本可能會有些不同。但有一些是共用的:
* m - 導出關於 內存分配的信息,
* t - 導出 線程狀態信息,
* p - 導出當前CPU寄存器信息和標志位的信息,
* c - 故意讓 系統崩潰(在使用netdump或diskdump的時候有用),
* s - 即時同步所有掛載的文件系統,
* u - 即時重新掛載所有的文件系統為只讀,
* b - 即時重新啟動系統,
* o - 即時關機(如果機器設置並支持此項功能)。
 

Linux下/proc目錄的作用

1. /proc目錄

Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。

用戶和應用程序可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。下面列出的這些文件或子文件夾,並不是都是在你的系統中存在,這取決於你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。 Sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴於內核配置。例如,如果系統不支持scsi,則scsi目錄不存在。

除了以上介紹的這些,還有的是一些以數字命名的目錄,他們是進程目錄。系統中當前運行的每一個進程都有對應的一個目錄在/proc下,以進程的PID號為目錄名,他們是讀取進程信息的接口。而self目錄則是讀取進程本身的信息接口,是一個link。

2.子文件或子文件夾

/proc/buddyinfo 每個內存區中的每個order有多塊可用,和內存碎片問題有關

/proc/cmdline  啟動時傳遞給kernel的參數信息

/proc/cpuinfo  cpu的信息

/proc/crypto  內核使用的所有已安裝的加密密碼及細節

/proc/devices  已經加載的設備並分類

/proc/dma  已注冊使用的ISA DMA 頻道列表

/proc/execdomains Linux 內核當前支持的execution domains

/proc/fb  幀緩沖設備列表,包括數量和控制它的驅動

/proc/filesystems  內核當前支持的文件系統類型

/proc/interrupts x86 架構中的每個IRQ中斷數

/proc/iomem  每個物理設備當前在系統內存中的映射

/proc/ioports  一個設備的輸入輸出所使用的注冊端口范圍

/proc/kcore代表系統的物理內存,存儲為核心文件格式,里邊顯示的是字節數,等於RAM大小加上4kb

/proc/mdstat 多硬盤,RAID配置信息(md=multiple disks)

/proc/loadavg 根據過去一段時間內CPU和IO的抓鬼呢太得出的負載狀態,與uptime命令有關

/proc/meminfo   RAM使用的相關信息

/proc/misc 其他的主要設備(設備號為10)上注冊的驅動

/proc/modules  所有加載到內核的模塊列表

/proc/mounts  系統中使用的所有掛載

/proc/partitions  分區中的塊分配信息

/proc/stat  所有的cpu活動信息

/proc/uptime  系統已經運行了多久

/proc/swaps  交換空間的使用情況

/proc/fs  文件系統信息

/proc/ide  ide設備信息

/proc/net  網卡設備信息

/proc/vmsat  虛擬內存統計信息

/proc/vmcore  內核panic時的內存映像

/proc/diskstats  取得磁盤信息

/proc/scsi  scsi設備信息

 

以下是/proc目錄中進程信息

/proc/N   pid為N的進程信息

/proc/N/cmdline  進程啟動命令

/proc/N/cwd  鏈接到進程當前工作目錄

/proc/N/exe  鏈接到進程的執行命令文件

/proc/N/fd  包含進程相關的所有的文件描述符

/proc/N/maps  與進程相關的內存映射信息

/proc/N/mem  指代進程持有的內存,不可讀

/proc/N/stat  進程的狀態

/proc/N/status  進程狀態信息,比stat/statm更具可讀性

/proc/self  鏈接到當前正在運行的進程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM