slackware啟動指令碼詳解(轉)
我們知道,kernel成功啟動之後,在init/main.c中呼叫execve執行程式/sbin/init。init程式被稱為初始化程式,因為它負責系統的啟動。
我以我的slackware10為例(不光因為它是我用的套件,而且啟動指令碼十分清晰明瞭),講一講啟動的具體過程:
(史前時期)loadlin,grub,lilo把核心引數傳給kernel,如(BOOT_IMAGE=Linux ro root=307),,儲存在/proc/cmdline中。
核心啟動成功後,把它的引數傳給1號程式(init),因為也許有一些引數應被使用者程式解釋。
init程式將從上到下的讀取/etc/inittab檔案,只要狀態符合當前執行級就會去執行指令碼。
inittab由幾行組成,每行被三個冒號分隔成四個部分,每個部分具有不同的含義。格式如下:
行識別符號:狀態:動作:命令
行識別符號是你的執行級指令碼的名字,不能使用重複的行識別符號。
狀態是表示執行級指令碼何時應該執行的數字。狀態由0,1,2,3,4,5,6和S一個或多個數字字母組成。如果狀態為空,就是系統啟動必須執行的指令碼。
下面是slackware的狀態定義:
0 = halt
1 = single user mode
2 = unused (but configured the same as runlevel 3)
3 = multiuser mode (default Slackware runlevel)
4 = X11 with KDM/GDM/XDM (session managers)
5 = unused (but configured the same as runlevel 3)
6 = reboot
S同狀態1相同。
動作有once, wait, respawn, sysinit, crtlaltdel, initdefault組成,說明了init執行指令碼的方式。
once:init在進入後只執行一次。init不等待命令的結束。
wait:和once不同的是,init等待命令的結束。
respawn:命令結束後會被重起。
sysinit:init最先執行的執行級指令碼,狀態被忽略。說穿了就是無論何是都優先執行的指令碼,應指向系統初始化指令碼。
ctrlaltdel:當“三指禪”被按下時,該執行級被啟動,一般是指向重啟指令碼。
initdefault:指定系統啟動時的預設執行級。在sysinit後執行。
對於slackware的inittab:
id:3:initdefault:
id指出預設為多使用者字元介面(3),不要把它設定成0或6!注意沒有命令。
si:S:sysinit:/etc/rc.d/rc.S
si指出系統初始化執行級,其中S等同於狀態1,它指向/etc/rc.d/rc.S,也就是說init第一個去執行的shell指令碼。
rc:2345:wait:/etc/rc.d/rc.M
rc指出多使用者啟動執行級,當狀態為2,3,4,5時被執行,init等待命令的結束,這也是為什麼啟動時沒有shell可用的原因。
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c1指出控制檯1,當它被殺死時init將重啟它。它開啟一個終端tty1供你使用。
x1:4:wait:/etc/rc.d/rc.4
x1指出多使用者GUI執行級,指向指令碼rc.4。
rc.S(系統初始化執行級指令碼)做的事:
- 安裝proc檔案系統。
- 決定是否有需要使用Hotplug自動檢測硬體。
- 啟動devfsd。
- 安裝devfs。
- 為2.6核心啟動udev。
- 開啟交換分割槽,其中要讀取/etc/fstab中獲取分割槽資訊。
- 檢查根分割槽是否為只讀,因為只有只讀時才能檢查硬碟。
- 如有需要檢查根分割槽。
- 安裝sysfs到/proc/sys。
- 設定硬體時鐘。
- 配置isa裝置。
- 執行/etc/rc.d/rc.modules (這個檔案將剩下的核心模組裝入核心,稍後再講)。
- 初始化lvm卷,不要問我為什麼。
- 檢查非根分割槽。
- 安裝本地硬碟分割槽。
- 刪除臨時檔案。
- initrd被安裝在/initrd中,它用來在核心啟動第一時間載入一些核心模組和必需程式(如fsck)等。現在解除安裝它。
- 建立utmp。
- 如果你是用的zipslack(一個工作在vfat上的linux套件),配置umsdos。
- 把Linux 2.4.27寫入你的mtod檔案
- 執行rc.sysvinit。(不像rh,slackware是一個“叛徒”。它的init指令碼結構不像大多數linux套件(基於SVR4),而像BSD,所以只是一個假檔案。)
- 執行rc.serical。(串列埠)
- 安裝隨機數種子
rc.modules:
- 決定核心版本,到目錄”/lib/modules/你的核心版本號/“去尋找模組
- 更新核心模組依賴關係。
- 裝入APM高階管理,它被註釋掉了,建議你啟用它以正常關機。
- 一大堆被註釋掉了的硬體模組,如果hotplug找不到你的硬體就到這裡來。
rc.S執行完成後,slackware將執行預設的執行級(3),也就是先執行rc.M(多使用者程式級)。
- 設定黑屏時間。
- 設定主機名,主機名儲存在/etc/HOSTNAME裡,預設為darkstar.example.net。
- 設定dmesg緩衝區的大小。越多越好。
- 執行rc.syslog,開啟syslog和klogd。
- 執行rc.pcmcia,初始化PCMCIA卡,我不懂。
- 執行rc.inet1,設定網路。重點。
- 執行rc.hotplug,即插即用。
- 執行rc.inet2,網路守護程式。重點。
- 把所有的鎖檔案刪掉。
- 把黑洞裝置和臨時目錄設成777。
- 執行ldconfig,更新共享庫,我喜歡關掉。
- 更新X字型快取,關掉吧。不過安了新字型後自己要手動執行一次”fc-cache"而已。
- 執行rc.CUPS,UNIX列印守護程式。
- 開啟appletalk。關了吧。
- 開啟使用者限額。請看/usr/doc/Linux-HowTOs/Quota。
- 執行rc.acpid。高階能源管理。
- 執行rc.alsa。alsa聲音系統。
- 執行rc.font。使用者自己的字型。
- 執行rc.keymap。使用者自己的keymap。
- 把你的一大堆網路standalone程式開啟。
- 執行rc.gpm。字元介面上用滑鼠。
- 又執行rc.sysinit一次。BUG?
- 執行rc.local。最後,執行使用者你的自己的配置檔案。
rc.inet1:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-941377/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Slackware啟動指令碼與System V啟動指令碼的區別何在?(轉)指令碼
- Slackware的啟動(init)過程(轉)
- Linux開機啟動程式或指令碼詳解Linux指令碼
- [ 轉載 ] HBASE啟動指令碼/Shell解析指令碼
- FreeBSD系統啟動指令碼(轉)指令碼
- Debian系統啟動指令碼(轉)指令碼
- 【轉】javascript日期操作詳解(指令碼之家整理)JavaScript指令碼
- httpd啟動指令碼httpd指令碼
- 【zookeeper原始碼】啟動流程詳解原始碼
- nmap指令碼詳解指令碼
- LILO啟動問題詳解 (轉)
- MacOS 啟動 -- Redis指令碼MacRedis指令碼
- Tomcat啟動指令碼Tomcat指令碼
- SQL Server啟動指令碼SQLServer指令碼
- ORACLE的啟動指令碼Oracle指令碼
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- 網路卡自動啟動指令碼指令碼
- Linux下XWindow系統啟動指令碼分析(轉)Linux指令碼
- RedHat Linux下Oracle啟動指令碼的建立(轉)RedhatLinuxOracle指令碼
- 用Slackware官方核心原始碼和指令碼來打造適合自己機器的核心(轉)原始碼指令碼
- 解決slackware關機問題(轉)
- Tomcat 7 啟動分析(一)啟動指令碼Tomcat指令碼
- linux-啟動指令碼Linux指令碼
- Linux自啟動指令碼Linux指令碼
- UNIX下oracle啟動指令碼Oracle指令碼
- Shell指令碼之sed詳解指令碼
- windows下oracle自動啟動指令碼WindowsOracle指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- CentOS7 nginx啟動指令碼CentOSNginx指令碼
- MYSQL Slave開機啟動指令碼MySql指令碼
- 指令碼快速啟動工具:FastScripts for mac指令碼ASTMac
- storm叢集啟動停止指令碼ORM指令碼
- tomcat開機啟動指令碼Tomcat指令碼
- centos6.5PHP啟動指令碼CentOSPHP指令碼
- 開機自啟動Powershell指令碼指令碼
- tomcat定時啟動指令碼Tomcat指令碼
- Memcached安裝及啟動指令碼指令碼
- Windows XP 系統八種啟動模式詳解(轉)Windows模式