LINUX遠程強制重啓/proc/sys/kernel/sysrq /proc/sysrq-trigger----觸發器html
https://www.cnblogs.com/yanghong-hnu/p/5880417.html (linux
數據結構(/include/linux/leds.h))
1. # echo 1 > /proc/sys/kernel/sysrq windows
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鍵呢?dom
在x86平臺上,組合鍵"<ALT> + SysRq + <command key>"組成SysRq鍵以完成各類功能。可是,在一些鍵盤上可能沒有SysRq鍵。SysRq鍵實際上就是"Print Screen"鍵。而且可能有些鍵盤不支持同時按三個按鍵,因此你能夠按住"ALT鍵",按一下"SysRq鍵",再按一下"<command key>鍵",若是你運氣好的話,這個會有效果的。不過放心,如今的鍵盤通常都支持同時按3個或3個以上的鍵。ide
<command key>有不少,這裏只挑幾個來講,其餘的能夠參考sysrq.txt文件。post
· 'b' —— 將會當即重啓系統,而且不會管你有沒有數據沒有寫回磁盤,也不卸載磁盤,而是完徹底全的當即關機ui
· '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上是沒法使用的。因此,你先要轉換到文本
虛擬終端下。若是你當前是在圖像界面,
在串口終端上,要想得到一樣的效果,須要先在終端上發送Break信號,而後在5秒內輸入sysrq組合鍵。
若是你在機器上有
root權限,你能把commandkey字符寫入到/proc/sysrq-trigger文件。這能幫助你經過
腳本或你不在系統終端上的時候觸發sysrq事件。
# echo 'm' > /proc/sysrq-trigger
當我觸發一個sysrq事件的時候,結果保存在什麼地方?
當一個sysrq命令被觸發,內核將會打印信息到內核的環形緩衝並輸出到系統控制檯。此信息通常也會經過syslog輸出到/var/log/messages.
有時候,可能系統已沒法響應,syslogd可能沒法記錄此信息。在這種狀況下,建議你設置一個串口終端來收集這個信息。
那些類型的sysrq事件能被觸發?
sysrq功能被打開後,有幾種sysrq事件能被觸發。不一樣的
內核版本可能會有些不一樣。但有一些是共用的:
* p - 導出當前CPU寄存器信息和標誌位的信息,
* c - 故意讓
系統崩潰(在使用netdump或diskdump的時候有用),
* s - 即時同步全部掛載的文件系統,
* u - 即時從新掛載全部的文件系統爲只讀,
* b - 即時從新啓動系統,
* o - 即時關機(若是機器設置並支持此項功能)。
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 連接到當前正在運行的進程