Linux啟動程序
首頁

  Linux系統的啟動程序

 

bulletLinux的啟動


bullet

系統啟動與 Process
bullet

init是系統載入核心後的第一個Process

bullet

init讀入/etc/inittab,並依據/etc/inittab設定內容,依序啟動各個相關的Process,第一個被啟動的程序為/etc/rc.sysinitrc.sysinit負責系統相關運作環境的初始化,其中包括:系統預設 執行檔案搜尋路徑、 置換空間(Swap)的啟動、網路環境設定(Hostname、IP AddressDomain Name...)、 檔案系統檢查(With fsck)、重新以read/write模式掛上檔案系統...

bullet

rc.sysinit完成系統初始設定後,init依據/etc/inittab設定之default run level進入/etc/rc.d/rcx.d啟動相關服務。

bullet

/etc/init.d目錄下存放著各個系統服務啟動的設定檔案(Scripts)

bullet

/etc/init.d/rc.local是系統完成開機前所執行的最後一個shell scrip,因此其優先權高於所有系統啟動程序,此一檔案內容預設值為空檔。

 

bullet

Linux Runlevel
bullet

7 RunLevel
因應不同需求,Linux(UNIX)可以分為七種不同啟動模式,或七種不同執行等級,一般正常使用的系統多開啟為Level 3 或5

Runlevel

代表意義

0 關機
1 單人模式(Single User Mode)
2 多人使用模式,無NFS功能(網路是啟動的)
3 完整多人使用模式
4 unused
5 完整多人使用模式,xdm啟動(圖形Login畫面)
6 重新開機(Reboot)
bullet

Run Level的改變
root可以使用inittelinit切換到不同Run Level
init 0 = shutdown -h 
init 6 = reboot

bullet

/etc/inittab內容解讀

bullet

/etc/inittab內容(Just For RedHAT Linux)

id : 3 : initdefault :
si : : sysinit: /etc/rc.d/rc.sysinit

l0 : 0 : wait: /etc/rc.d/rc 0
l1 : 1 : wait: /etc/rc.d/rc 1
l2 : 2 : wait: /etc/rc.d/rc 2
l3 : 3 : wait: /etc/rc.d/rc 3
l4 : 4 : wait: /etc/rc.d/rc 4
l5 : 5 : wait: /etc/rc.d/rc 5
l6 : 6 : wait: /etc/rc.d/rc 6

ud : : once : /sbin/update
ca : : ctrlaltdel : /sbin/shutdown -t3 -r now
pf : : powerfail :/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr : 12345 : powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

1 : 2345 : respawn : /sbin/mingetty tty1
2 : 2345 : respawn : /sbin/mingetty tty2
3 : 2345 : respawn : /sbin/mingetty tty3
4 : 2345 : respawn : /sbin/mingetty tty4
5 : 2345 : respawn : /sbin/mingetty tty5
6 : 2345 : respawn : /sbin/mingetty tty6

x : 5 : respawn : /etc/X11/prefdm -nodaemon

bullet

/etc/inittab每一行的意義
Format: code:runlevels:action:process

code: 這是每"項目"()的識別碼,他的格式可以是一個字元或兩個字元,某些特殊動作必須搭配特酥識別碼,系統預定的識別碼建議不要更動它。

runlevels:這是這個"項目"()指定的Run Level,他的格式可以是0~6任何數目字元的組合,只要系統目前Run Level符合這個項目指定的層級,則這行的內容會自動生效,這行所指定的Command也將會被執行。 空白欄位代表涵括所有Run Level
例如:當系統開機至
Run Level 5時,項目『x : 5 : respawn : /etc/X11/prefdm -nodaemon』就會被執行,當系統開機至Run Level 2345時,項目『1 : 2345 : respawn : /sbin/mingetty tty1』都會生效。

action:這個欄位告訴"init"如何處理這個項目,可用選項有:initdefaultwaitrespawn等共15種不同的值,他們所代表的意義請用"man initttab"一窺究竟。

process:要執行的命令與參數。

bullet

id : 3 : initdefault :
action "initdefault"告訴 init 將系統開至Run Level 3

bullet

si : : sysinit: /etc/rc.d/rc.sysinit
runlevel
欄位空白告訴init不管系統開到哪一個Run Level都要執行這一項目(rc.sysinit)
action "sysinit"
告訴init優先執行這個項目。
"sysinit"
將忽略runlevel欄位。

bullet

 ca : : ctrlaltdel : /sbin/shutdown -t3 -r now
action "ctrlaltdel"
告訴init當系統收到SIGINT(or User同時按下Alt+Ctrl+Del),執行這個項目(/sbin/shutdown -t3 -r now)。如果你不希望你的系統因為有人在Console按下Alt+Ctrl+Del而重新開機時,你可以修改這個項目。

bullet

5 : 2345 : respawn : /sbin/mingetty tty5
表示在進入RunLevel 2/3/4/5/6時執行 "/sbin/mingetty tty5 "action "respawn"表示在一個session結束後(Userlogout Console tty5),在執行一次"/sbin/mingetty tty5 ",如果此處不用repawn的話,當User Logout tty5,這個Virtual Terminal將一去不復返,也就是"Alt+F5"將不再發生作用。

bullet

/etc/rc.d/rcx.d
bullet

x為相關之Run Level(/etc/rc.d/rc1.drc2.d....)

bullet

/etc/rc.d/rcx.d 目錄下所有檔案均為符號鏈結(Symbolic Link)、I目標指向/etc/init.d下的服務啟動程序(Scripts),執行方式則是利用program alias name的不同,來決定執行方式。

/etc/rc.d/rcx.d 目錄下所有檔案名稱為KnnServiceName SnnServiceName ,其中K代表當系統切換到此一Run level必須關閉的服務,S則是必須啟動的服務,nn則是服務關閉或啟動的順序,優先順序為由小而大,最大值為99。(That's why /etc/init.d/rc.local is the last script to run before system finishing its bootup process)