前面講到了linux系統初始化的流程:
post-->bootsequence(bios)-->bootloader(mbr)-->kernel(ramdisk)-->rootfs(唯讀)-->init
這裡介紹/sbin/init如何運作?
以centos5為例:
不同的安全模式載入不同的驅動,只滿足基本的執行要求。
執行級別:為了系統的執行或維護等應用目的而設定,由init決定
0-6:7個級別
0:關機
1:單使用者模式(root,無需登陸),single,維護模式
2:多使用者模式,會啟動網路功能,但不會啟動nfs網路檔案系統,維護模式
3:多使用者模式,正常模式,文字介面(預設),
4:多使用者模式,預留級別,可同3級別
5:多使用者模式,正常模式,圖形介面
6:重啟
預設級別:
3,5切換級別:
init #
檢視級別:
who -r
runlevel 顯示上次的級別
關於配置檔案:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process
常用action:
wait 切換至此級別執行一次
respawn 此process終止,就重新啟動之
initdefault 設定預設執行級別,process省略
sysinit 設定系統初始化方式,此處一般為/etc/rc.d/rc.sysinit
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
...l6:6:wait:/etc/rc.d/rc 6
說明:rc 0 --->意味著讀取/etc/rc.d/rc0.d/
k* k##*按檔名排序,數字越小越先執行,數字越小的服務,通常為依賴到別的服務
s* s##*按檔名排序,數字越小越先執行,數字越小的服務,通常為被依賴到的服務
依賴的先執行
大概指令碼形式如下:
for srv in /etc/rc.d/rc0.d/k*;do
/etc/rc.d/rc0.d/$srv
$srv stop
done
for srv in /etc/rc.d/rc0.d/s*;do
/etc/rc.d/rc0.d/$srv
$srv start
done
一些檔案通過建立鏈結的形式存在於檔案目錄中,在每個級別中都存在相應的鏈結。
chkconfig命令:
檢視服務在所有級別的啟動或關閉設定情形
chkconfig --list可以檢視各服務在各級別下的運**況。
可以通過--level指定級別進行修改。
每個服務的配置檔案中,default-start和default-stop引數中可以對服務啟動情況進行定義
新增:sysv的服務指令碼放置於/etc/rc.d/init.d(/etc/init.d)
chkconfig --add name
格式#!/bin/bash
## chkconfig: llll nn nn
(寫到的為l,沒寫的為k)
例項:#!/bin/bash
## chkconfig: 345 66 33
# description: test srv script
echo "hello srv"
在345級別執行,啟動為第6級別,關閉為第3級別
刪除:chkconfig --del name
修改指定的鏈結型別
chkconfig [--level levels] name
--level llll:指定要設定的級別,省略時表示2345
注意:正常級別下,最後啟動乙個服務s99local沒有鏈結至/etc/rc.d/init.d乙個服務指令碼,而是指向了/etc/rc.d/rc.local指令碼,因此,不便或不需寫為服務指令碼放置於/etc/rc.d/init.d目錄,且又想開機時自動執行的命令,可直接放置於/etc/rc.d/rc.local(/etc/rc.d/rc3.d/s99local開機執行到最後一步的命令,即開機前如果需要執行的指令,直接寫在此指令碼)
到開機介面時,設定登陸終端
tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
...tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會呼叫login程式
/etc/rc.d/rc.sysinit:系統初始化指令碼
(1)設定主機名
(2)設定歡迎資訊
(3)啟用udev和selinux
(4)掛載/etc/fstab檔案中定義的檔案系統
(5)檢測根檔案系統,並以讀寫方式重新掛載根檔案系統
(6)設定系統時鐘
(7)啟用swap裝置
(8)根據/etc/sysctl.conf檔案設定核心引數
(9)啟用lvm及software raid裝置
(10)載入額外裝置的驅動程式
(11)清理操作
init流程總結:/sbin/init-->(/etc/inittab)-->設定預設執行級別--》執行系統初始指令碼,完成系統初始化-->關閉對應下需要關閉的服務,啟動需要啟動服務-->設定登陸終端
關於centos6的啟動
init程式為:upstart(ubuntu研發),其配置檔案
/etc/inittab,/etc/init/*.conf
注意:/etc/init/*.conf檔案語法遵循upstart配置檔案語法格式
Linux系統啟動流程
這是看linuxcast的筆記 linux系統啟動 使用grub引導 順序是 bios通電自檢,並找到512位元組的mbr 是grub引導的第一階段 把控制權交給mbr grub分兩個階段引導系統 第一階段mbr中的主引導引導程式加次引導載程式 第二階段次引導引導程式載入核心映像 核心映像建立進第乙...
Linux系統啟動流程
載入 bios 的硬體資訊與進行自我測試,並依據配置取得第乙個可啟動的裝置 讀取並執行第乙個啟動裝置內 mbr 的 boot loader 亦即是 grub,spfdisk 等程式 依據 boot loader 的配置載入 kernel kernel 會開始偵測硬體與載入驅動程式 在硬體驅動成功後,...
linux系統啟動流程
核心空間啟動主要流程 1 init main.c start kernel 2 init main.c rest init 3 init main.c kernel init 4 init main.c init post 核心至使用者空間啟動主要流程 openwrt使用者空間啟動主要流程 1 et...