引用自 http://www.jollen.org/blog/2005/09/embedded_linux_2_etcfstab_etci.html
/etc/inittab 設定
init process
init 是在核心 mount 進 root 後,第一個執行的程式 (第一個 process),init 所負責的工作包括:
- 執行 /etc/rc.d/rc?.d/ 裡的 scripts
- 將系統由開機狀態 (boot-up state) 切換至多使用者狀態 (multiuser state)
- 負責載入 tty (本地端) 的 login shell
- 負責開機與關機的程序 (procedure)。
開 機完成後,init 仍會保持在背景執行,並同時監視與修改系統執行狀態。init 監視許多系統的動作,適時改變系統的狀態,這些動作定義在 /etc/inittab 檔案裡。系統狀態劃分成七個等級,稱之為 run level,/etc/inittab 即告訴 init,在不同的 run level 下所要執行的程式與命令,Linux 下的 run level 有共七個,分別為:
- run level 0 關機
- run level 1 單一使用者模式
- run level 2 多使用者模式(沒有NFS)
- run level 3 多使用者模式
- run level 4 保留
- run level 5 X11
- run level 6 重開機
以 Red Hat Linux 的 /etc/inittab 為例
不正確的 /etc/inittab 設會使得系統不正常,而且無法登入,所以修改 /etc/inittab 前請先做好備分,/etc/inittab 的設定如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 ## inittab This file describes how the INIT process should set up# the system in a certain run-level.## Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org># Modified for RHS Linux by Marc Ewing and Donnie Barnes## Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode# 4 - unused# 5 - X11# 6 - reboot (Do NOT set initdefault to this)#id:3:initdefault:# System initialization.si::sysinit:/etc/rc.d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6# Things to run in every runlevel.ud::once:/sbin/update# 處理 [ctrl]-[alt]-[del] 的按鍵ca::ctrlaltdel:/sbin/shutdown -t3 -r now# 如果我們有 UPS,這一行的設定會在斷電時通知我們,並在 2 分鐘後自動關機。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 tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6# gdm 程式。x:5:respawn:/etc/X11/prefdm -nodaemon
每個欄位所代表的義意如下:
- 第一個欄位,是 init 內部使用的名稱,用來辨認每一個項目,執行命令 “ps ax” 所看到的名稱。
- 第二個欄位,表示這個項目的 run level。
- 第 三個欄位,關鍵字欄位,其中 respawn 是一個重要的關鍵字。以 “5:2345:respawn:/sbin/mingetty tty5” 為例說明,init 會依據設定,在本地端開啟一個終端機,當這個終端機超過時間沒有人 login 或太久沒有按鍵時,這個終端機就會結束執行,respawn 即在告訴 init 再重新執行這個終端機,否則,在一段時間後,我們會發現這個終端機消失了,無法利用 [alt]-[f5] 切換終端機。
- 第四個欄位:要執行的命令與參數
第一行的 “id:3:initdefault:” 是很重要的一行,用來告訴 init,預設的 run level,在這裡我們設定開機後的預設 run level 為 3,那麼下面設定的命令都會被執行:
123456789101112 l3:3:wait:/etc/rc.d/rc 3ud::once:/sbin/updateca::ctrlaltdel:/sbin/shutdown -t3 -r nowpf::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 tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6
第二個如果是空白,則表示在所有的 run level 都會執行,例如:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
表示在按下 [ctrl]-[alt]-[del] 的事件發生時,在所有 run level 狀態下,都會去執行/sbin/shutdown -t3 -r now 的命令。這一欄也可以指定多個 run level,例如:
6:2345:respawn:/sbin/mingetty tty6
表示在進入 run level 2/3/4/5 時,都會執行 “/sbin/mingetty tty6″。
改變 run level
如果我們將預設 run level 改為 5:
id:3:initdefault:
那麼:
x:5:respawn:/etc/X11/prefdm -nodaemon
這一行便會生效,”/etc/X11/prefdm -nodaemon” 的命令就會被執行,也就是我們熟悉的gdm。
我們可藉由 telinit 指令來改變目前的 run level,例如在 run level 3 狀態下執行:
linux# telinit 5
就會馬上進入 run level 5,執行 gdm。在 gdm 下如果想回到 console 模式,可以按下[ctrl]-[alt]-[f1],後然再執行:
linux# telinit 3
即可。
鳥哥也有提到喔!
http://linux.vbird.org/linux_basic/0510osloader.php#startup_init
讓我們解析一下這個檔案吧!首先,這個檔案的語法是利用冒號 (:) 將設定分隔成為四個欄位,每個欄位的意義與說明如下:
1 [設定項目]:[run level]:[init 的動作行為]:[指令項目]
- 設定項目:最多四個字元,代表 init 的主要工作項目,只是一個簡單的代表說明。
- run level:該項目在哪些 run level 底下進行的意思。如果是 35 則代表 runlevel 3 與 5 都會執行。
- init 的動作項目:主要可以進行的動作項目意義有:
inittab 設定值 意義說明 initdefault 代表預設的 run level 設定值 sysinit 代表系統初始化的動作項目 ctrlaltdel 代表 [ctrl]+[alt]+[del] 三個按鍵是否可以重新開機的設定 wait 代表後面欄位設定的指令項目必須要執行完畢才能繼續底下其他的動作 respawn 代表後面欄位的指令可以無限制的再生 (重新啟動)。舉例來說, tty1 的 mingetty 產生的可登入畫面, 在你登出而結束後,系統會再開一個新的可登入畫面等待下一個登入。
(ex) ttyS1::respawn:/bin/sh更多的設定項目請參考 man inittab 的說明。
- 指令項目:亦即應該可以進行的指令,通常是一些 script 囉。