在linux下一些常用的關機/重啟命令有shutdown、halt、reboot、及init,它們都可以達到重啟系統的目的,但每個命令的內部工作過程是不同的,透過本文的介紹,希望你可以更靈活的運用各種關機指令。
1.shutdown 命令安全地將系統關機。
有些使用者會使用直接斷掉電源的方式來關閉linux,這是十分危險的。因為linux與windows不同,其後台運行著許多進程,所以強制關機可能會導致進程的數據丟失,使系統處於不穩定的狀態,甚至在有的系統中會損壞硬體設備。
而在系統關機前使用shutdown指令,系統管理員會通知所有登入的使用者係統將要關閉,並且login指令會被凍結,即新的使用者不能再登入。直接關機或延遲一定的時間才關機都是可能的,還可能重啟。這是由所有流程〔process〕都會收到系統所送達的訊號〔signal〕決定的。這讓像vi之類的程式有時間儲存目前正在編輯的文檔,而像處理郵件〔mail〕和新聞〔news〕的程式則可以正常地離開等等。 shutdown執行它的工作是送信號〔signal〕給init程式,要求它改變runlevel。
Runlevel 0被用來停機〔halt〕
runlevel 6是用來重新啟動〔reboot〕系統
假設沒有-h也沒有-r參數給shutdown。想了解在停機〔halt〕或重新開機(reboot〕過程中做了哪些動作,你可以在這個文件/etc/inittab裡看到這些runlevels相關的資料。 shutdown 參數說明:
[-t] 在改變到其它runlevel之前,告訴init多久以後關機。
[-r] 重啟計算器。
[] 並不真正關機,只是發送訊號給每位登入者 [ ] h] 關機後關掉電源〔halt〕。
[-n] 不用init,而是自己來關機。 c] cancel current process取消目前正在執行的關機程序。重啟計算器〔reboot]時忽略fsck。
[-F] 重新啟動計算器〔reboot〕時強迫fsck。 2.halt-- --最簡單的關機指令
其實halt就是呼叫shutdown -h。 -n] 防止sync系統調用,它用在用fsck修補根分區之後,以阻止核心用舊版的超級塊〔superblock〕覆蓋修補過的超級塊。 ,只是寫wtmp〔/var/log/wtmp〕紀錄。 。 halt一樣,不過它是引發主機重啟,而halt是關機。關於的使用者進程,守護程式等。 。另外還有 telinit指令可以改變init的運作級別,例如,telinit -iS可讓系統進入單一使用者模式,且無法獲得使用shutdown時的資訊和等待時間。
init詳解
一、INIT: init是Linux系統作業中不可或缺的程式之一。
所謂的init進程,它是一個由核心啟動的使用者級進程。核心自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程式和資料結構等)之後,就透過啟動一個用戶級程式init的方式,完成引導進程。所以,init始終是第一個行程(其行程編號永遠是1)。核心會在過去曾使用過init的幾個地方找到它,它的正確位置(對Linux系統來說)是/sbin/init。如果核心找不到 init,它就會試著運行/bin/sh,如果運行失敗,系統的啟動也會失敗。
二、運作等級
簡單的說,運作等級就是作業系統目前正在運作的功能等級。這個等級從1到6 ,具有不同的功能。不同的運作等級定義如下:(可以參考Red Hat Linux 裡面的/etc/inittab)
# 0 - 停機(千萬不能把initdefault 設定為0 ) 用戶,沒有NFS
# 3 - 完全多用戶模式(標準的運作等級)
# 4 - 6 - 重新啟動(千萬不要把initdefault 設定為6 )
這些等級在/etc/inittab 文件中指定。這個文件是init 程式尋找的主要文件,最先執行的服務是放在/etc/rc.d 目錄下的文件。在大多數的Linux 發行版本中,啟動腳本都是位於 /etc/rc.d/init.d中的。這些腳本被用ln 指令連接到 /etc/rc.d/rcn.d 目錄。 (這裡的n 就是運行級0-6)
三、運行等級的設定
運轉等級的配置是在/etc/inittab行內進行的,如下圖:
/ 1212 / 12/122 2/122 2/122 2/122 20725:2005 init.d / rc 2
第一個欄位是一個任意指定的標籤;
第二個欄位表示此行適用於執行那個等級(這裡是2); 第二個欄位表示此行適用於執行該等級(這裡是2); 〠。 ,init應該運行第四個欄位內的命令一次,而且init應該等待該命令結束。 /etc/init.d/rc指令執行啟動和終止輸入以便進入執行等級2時所需的任何指令。
第四個欄位中的指令執行設定運作等級時的一切「雜活」。它啟動已經沒有運作的服務,終止不應該再在新運作等級內執行的服務。根據Linux版本的不同,採用的具體命令也不同,而且運行等級的配置也是有差別的。
init啟動時,它會在/etc/inittab內尋找一個程式碼行,這一行指定了預設的運作等級: id : 2 : initdefault :
.這是透過為內核指定一個“single”或“emergency” 命令列參數來實現的。比如說,核心命令列參數的指定可透過LILO來執行。這樣一來,你就可以選擇單一使用者模式了(即運行等級1)。系統正在運作時,telinit指令可變更運行等級。當運行等級發生變化時, init 就會從/etc/inittab執行對應的指令。
四、/etc/inittab中的特殊配置
/etc/inittab中,有幾個特殊的特性,允許init重新啟動特殊事件。這些特殊特性都是用第三個欄位中的特殊關鍵字標記出來的。例如:
1. powerwait 允許init在電源被切斷時,關閉系統。其前提是具有U P S和監視U P S並通知init電源已被切斷的軟體。
2. ctrlaltdel 允許init在使用者於控制台鍵盤上按下C t r l + A l t + D e l組合鍵時,重新啟動系統。請注意,如果系統放在一個公共場所,系統管理員可將C t r l + A l t + D e l組合鍵配置為別的行為,例如忽略等。
3. sysinit 系統啟動時準備執行的指令。比如說,這個指令將會清除/tmp。
上面列出的特殊關鍵字尚不完整。其他的關鍵字及其使用詳情,可參考你的inittab手冊頁。
更多Linux關機指令詳解及 init詳解 相關文章請追蹤PHP中文網!