學習筆記:Linux的系統停止與重啟動命令詳解(轉)

BSDLite發表於2007-08-15
學習筆記:Linux的系統停止與重啟動命令詳解(轉)[@more@]宣告:可以自由轉載本文,但請務必保留本文的完整性。
作者:張子堅說明:本文所涉及示例均在fedora core3下得到。

--------------------------------------------------------------------------------
按照正確的過程來關閉Linux系統是很重要的。如果你沒有這樣做,你的檔案系統很可能會變得毫無價值並且檔案也會變得混亂。這是因為Linux有一個磁碟緩衝,它不會將資料立刻寫入磁碟的,而是在一定的間隔時間。這極大地改進了效能,但也意味著如果你隨意地關閉電源,此時緩衝中可能儲存著許多資料並且磁碟上的資料會不完全而不能成為一個完整執行的檔案系統(因為只有一些資料被寫入硬碟)。

不能僅僅扳動電源開關的另一個理由是,在一個多工系統中,後臺可能正執行著許多程式,隨意地關閉電源損失會非常慘重的。透過進行適當的關機過程,你可以確信所有的後臺程式都能儲存它們的資料。

--------------------------------------------------------------------------------

以下詳細介紹停止與重啟動命令,它們分別為init,runlevel,telinit,halt,shutdown,reboot

init

init[option][runlevel]

系統管理命令。

選項
-t seconds
當執行級別改變時,在SIGTERM之後經過seconds秒傳送SIGKILL。預設值為20。
檔案
init是任意一臺Unix機器在啟動時都要執行的第一個程式。它驗證所有檔案系統的完整性,然後用fork和exec建立和執行其他程式,就像由/etc/inittab指定的那樣。哪一個程式可以執行由/runlevel控制。所有結束的程式都被記錄在/var/run/utmp/和/var/log/wtmp中。當執行級改變時,init給所有不能在新的執行級別上執行的程式傳送SIGTERM訊號,20秒後,傳送SIGKILL訊號。

執行級別
當前執行級別可以由telinit改變,telinit通常僅僅是到init的一個連結。預設的執行級別隨釋出版的不同而不同,但以下是標準級別:
0 停止系統。
1, s, S 單使用者模式。
6 重新啟動系統。
q,Q 重讀/etc/inittab。
可以在/etc/inittab檔案中查出自己系統的執行級別。

--------------------------------------------------------------------------------

runlevel

系統管理命令。顯示以前和當前系統的執行級別。

--------------------------------------------------------------------------------

telinit

telinit[option][runlevel]

系統管理命令。發訊號通知init改變系統的執行級別。init是所有程式的祖先,telinit實際上是到init的一個連結。

選項
-t seconds
在傳送SIGTERM訊號seconds秒之後傳送SIGKILL。預設值為20。執行級別
預設的執行級別隨釋出版的不同而不同,但是,也有一些標準:
0 停止系統。
1 , s, S 單個使用者。
6 重新啟動系統。
a, b , c 僅僅處理在/etc/inittab中執行級別被標記為a,b或c的條目。
q, Q 重讀/etc/inittab檔案。
在/etc/inittab檔案中查閱系統的執行級別。
--------------------------------------------------------------------------------

halt

halt[options]

系統管理命令。在檔案/var/log/wtmp中插入一條記錄日誌。如果系統處於執行級別0或6,則停止所有程式;否則呼叫shutdown -nf。

選項
-d 禁止在/var/log/wtmp中寫。
-f 即使在shutdown -nf被正常呼叫時也呼叫halt(也就是說,即使不是執行級別0或6,也強制呼叫halt)。
-n 禁止對sync的正常呼叫。
-w 禁止正常執行,只把記錄日誌寫到/var/log/wtmp中。

--------------------------------------------------------------------------------

shutdown[options]when[message]

系統管理命令。終止所有程式。when可以是指定的時間(以hh:mm格式)、要等待的分鐘數(以+m格式),或者now。一條廣播訊息通知所有使用者離開系統。給程式傳送SIGTERM訊號,以讓它們體面地退出。呼叫/etc/init執行是的關機,其操作之一是把系統置於執行級別1。只有特權使用者才能執行shutdown命令。在預設或者有定義的情況下,廣播訊息在寬限期期間以規則的間隔進行廣播,越臨近關閉時間,訊息的廣播越頻繁。

選項
-c 取消正在進行中的關閉操作。
-f 快速重新啟動,在重新啟動時禁止對fsck的常規呼叫。
-h 當關閉完成時停止系統。
-k 輸出警告資訊,但禁止實際的關閉。
-n 不呼叫init就執行關閉。
-r 當關閉完成時重新啟動系統。
-t sec 在殺死程式與改變執行級別之間確保延時sec秒。

例:

# shutdown -h +10 'We will install a new disk. System should
> be back on-line in three hours.'

這將警告所有使用者系統將在十分鐘後關閉,並且他們最好馬上退出以防止資料的丟失。警告資訊將顯示在所有登入的使用者的終端上。

--------------------------------------------------------------------------------

reboot

reboot[options]
系統管理命令,停止檔案系統,關閉系統,然後重新啟動系統。因為這條命令立即停止所有的程式,所以它應該只在單使用者模式下執行。如果系統不在0級或6級上執行,reboot就呼叫shutdown -nf。

選項
-d 禁止寫/var/log/wtmp。
-f 即使要正常呼叫shutdown,也呼叫reboot。
-n 禁止對sync的常規呼叫。
-w 禁止正常執行;只是寫/var/log/wtmp。
--------------------------------------------------------------------------------

uptime

輸出當前時間,聯機操作的時間量、當前登陸的使用者數(可以包括同一使用者的多次登陸)以及系統負載平均值。這種輸出也可以由w命令的第一行產生。
--------------------------------------------------------------------------------

說明:

SIGTERM訊號,SIGKILL訊號,sync,fsck

有兩個訊號可以停止程式:SIGTERM和SIGKILL。 SIGTERM比較友好,程式能捕捉這個訊號,根據您的需要來關閉程式。在關閉程式之前,您可以結束開啟的記錄檔案和完成正在做的任務。在某些情況下,假如程式正在進行作業而且不能中斷,那麼程式可以忽略這個SIGTERM訊號。

對於SIGKILL訊號,程式是不能忽略的。這是一個 “我不管您在做什麼,立刻停止”的訊號。假如您傳送SIGKILL訊號給程式,Linux就將程式停止在那裡。

有些人喜歡使用三次sync來關閉系統,等待磁碟I/O停止,然後關閉電源。如果沒有程式執行著,那麼這和使用shutdown是等同的。然而,這樣做沒有解除安裝任何檔案系統並且可能會導致ext3fs的“乾淨檔案系統”標誌。三次使用sync來關閉系統的方法不值得推薦。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960197/,如需轉載,請註明出處,否則將追究法律責任。

相關文章