歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

LINUX之系統啟動流程

系統的引導與關機

1、加載bios的硬件信息
2、讀取MBR的Boot Loader引導信息
3、加載內核
4、內核執行/sbin/init加載/etc/inittab信息執行rc.sysinit
5、啟動核心的外掛模塊(/etc/modules.conf)
6、init執行運行級的各個批處理文件(scripts)
7、執行/bin/login程序
8、登入後開始以shell管理主機

啟動過程
1. BIOS自檢:當識別出第一塊硬盤及其空間之後,系統控制將從 BIOS 傳遞到引導裝載程序。
2.引導裝載程序:裝載第一塊硬盤的前 512 個字節的物理數據扇區(主引導記錄,MBR)到內存中,位於此扇區開始位置的引導裝載程序(如:GRUB)將接管系統控制。引導裝載程序執行的命令決定了引導進程剩余的部分。引導裝載程序隨後將控制傳遞到實際的操作系統(Linux 內核)。
3. 加載RAM盤:提供了一個最小的 Linux 環境,可在裝入實際根文件系統之前執行程序。
4. 在RA M盤中運行init:

這個程序執行裝入真正的根文件系統所需的所有操作。裝載內核模塊:根據硬件配置的不同,可能需要一些特殊的驅動程序來訪問計算機的硬件部件(最重要的部件是硬盤)。要訪問最終的根文件系統,內核需要裝載適當的文件系統驅動程序。
管理 RA ID 和 LVM:若系統配置在 RAID 或 LVM 下保存根文件系統,則 init 將設置 LVM 或 RAID 以支持稍後對根文件系統的訪問。
加載最終的根文件系統:找到根文件系統後,對其進行錯誤檢查並裝入。

運行根文件系統上的 init:若上述操作成功,將清除RAM盤並讀取系統引導配置文件 /etc/inittab 執行真正的根文件系統上的 init 程序。
/etc/rc.d/rc.sysinit–系統初始化腳本

I. 掛載/proc文件系統
II. 設置系統時鐘
III. 系統一般的環境變量設置(如主機名等)
IV. 初始化USB和HID設備
V. 設置PnP
VI. 加載鍵盤映射
VII. 加載系統字體
VIII. 加載系統模塊(如聲音模塊等)
IX. 初始化 RAID
X. 初始化卷映射
XI. 檢查文件系統
XII. 掛載文件系統
XIII. 激活磁盤限額
XIV. 激活swap分區
XV. 初始化串口設備
XVI. 生成系統啟動信息的log文件
XVII. 等等
/etc/rc.d/rcX.d/[KS]* –根據運行級別(X)配置服務

5.

I. 終止以”K”開頭的服務
II. 啟動以”S”開頭的服務

/etc/rc.d/rc.local–執行本地特殊配置
其他–不同運行級別的特殊服務
I. mingetty (除了運行級別1)
II. xdm/gdm/kdm (運行級別5)
init進程
init進程是由Linux內核引導運行的,是系統中運行的第一個進程,其進程號(PID)永遠為”1″。init進程運行後將安裝其配置文件,引導運行系統所需的其他進程,init進程將作為這些進程的父進程。
init進程在運行時將讀取系統引導配置文件/etc/inittab中的信息。這些信息包括默認的運行級別和由init啟動的進程。 文件/etc/inittab中以#開頭的行為注釋行,其他的每一行包括如下四個字段(每個字段用”:”間隔):
id:runlevels: action:process
其中:
id : 是各有效行的標識符。對定義getty的各行來說,該標識符指定getty運行的終端(即設備文件/dev/tty之後的
數字字符);對其他行來說,除了有長度限制外沒有特殊要求,但該字段在整個文件中必須唯一。
runlevels : 指定運行級別,各運行級別由單個的數字表示,可以指定多個運行級別,但不能包含任何間隔符。
action : 指定運行狀態,可以有如下的取值
respawn : 當下一個字段指定的命令結束後,重新運行該命令
wait : 執行下一個字段指定的命令,並等待其結束再運行其他命令
once : 執行下一個字段指定的命令,不等待其結束
boot : 在系統啟動時執行下一個字段指定的命令,並忽略運行級別
bootwait : 在引導完成後執行下一個字段指定的命令,並等待其結束
off : 指示init撤消下一個字段指定的命令所對應的進程
initdefault : 指定首次啟動時所進入的運行級別狀態
sysinit : 在與系統控制台通訊時執行下一個字段指定的命令
powerwait : 當出現電源錯誤時執行下一個字段指定的命令,並等待其結束
powerfail : 當出現電源錯誤時執行下一個字段指定的命令,不等待其結束
powerokwait : 當電源恢復時執行下一個字段指定的命令
ctrlaltdel : 當按下C trl+Alt+De l組合鍵時執行下一個字段指定的命令
process : 該字段指定要運行的命令
下面是一個init進程配置文件/etc/inittab的例子:
# cat /etc/inittab
# 定義的各種運行級別:
# 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:
# 系統初始化
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
# 跟蹤CTRL-ALT-DELETE三鍵重啟
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# 當系統發現UPS電源故障後2分鐘後執行關機操作
pf::powerfail:/sbin/shutdown -f -h +2 “Power Failure; System Shutting Down”
# 如果在2分鐘之內UPS恢復正常則取消關機操作
pr:12345:powerokwait:/sbin/shutdown -c “Power Restored; Shutdown Cancelled”
# 在2、3、4、5運行級別中啟動6個虛擬控制台
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
# 在5運行級別中啟動xdm管理器
x:5:respawn:/etc/X11/prefdm -nodaemon
為什麼使用字符工作方式 ?
Linux是一種類UNIX操作系統。在UNIX發展的早期,類UNIX操作系統根本沒有圖形操作界面,只有字符工作模式。後來隨著GUI的發
展,在類UNIX操作系統上開發了X Window系統,使類UNIX系統有了圖形用戶界面。雖然圖形用戶界面操作簡單,但是字符操作方式仍
然沿用至今,這主要是因為:
在字符操作方式下可以高效地完成所有的任務,尤其是系統管理任務。
系統管理任務通常在遠程進行,而遠程登錄後進入的是字符工作方式。
由於使用字符界面不用啟動圖形工作環境,大大地節省了系統資源開銷。

虛擬控制台
當在系統啟動時直接進入字符工作方式後,系統提供了多個(默認為6個)虛擬控制台。每個虛擬控制台可以獨立使用,互不影響。
可以使用Alt+F1~Alt+F6進行多個虛擬控制台之間的切換。如果用戶使用startx命令在字符界面下啟動了圖形環境,那麼可以使用C trl+Alt+F1~C trl+Alt+F6切換字符虛擬終端,使用C trl+Alt+F7切換到圖形界面。

本地用戶注消
若要注銷登錄,用戶可以在當前的登錄終端上輸入logout命令或使用<C trl>+<d>快捷鍵進行。
超級用戶的提示符是”#”,普通用戶的提示符是”$”。退出系統直接輸入:#exit
1. Linux系統是嚴格區分大小寫的,無論用戶名,還是文件名、設備名都是如此。即:ABC、Abc、abc是三個不同的用戶名或文件名。
2. 基於安全的考慮,一般應該使用普通用戶登錄系統,不要使用root用戶登錄,當需要進行超級用戶的工作時可以使用 su – 命令切換為超級用戶身份。初學者尤其要注意這一點。
系統運行級別
Linux 系統任何時候都運行在一個指定的運行級上,並且不同的運行級的程序和服務都不同,所要完成的工作和所要達到的目的都不同。C e ntO S 設置了如下表所示的運行級,並且系統可以在這些運行級別之間進行切換,以完成不同的工作。
運行級說明
0 所有進程將被終止,機器將有序的停止,關機時系統處於這個運行級別
1 單用戶模式。用於系統維護,只有少數進程運行,同時所有服務也不啟動
2 多用戶模式。和運行級別3一樣,只是網絡文件系統(NFS)服務沒被啟動
3 多用戶模式。允許多用戶登錄系統,是系統默認的啟動級別
4 留給用戶自定義的運行級別
5 多用戶模式,並且在系統啟動後運行X-Window,給出一個圖形化的登錄窗口
6 所有進程被終止,系統重新啟動
1. 如果系統啟動後進入字符登錄界面,則說明系統默認的運行級別為3;如果系統啟動後進入圖形登錄界面,則說明系統默認的運行級別為5。
2. 如果用戶已經啟動了字符界面,想要進入圖形界面可以使用如下命令:#startx

運行級的查看和切換
用戶可以使用如下的命令查看當前系統的運行級
runlevel
用戶可以使用如下的命令切換運行級
init [0123456Ss]
即在 init 命令後跟一個參數,此參數是要切換到的運行級的運行級代號,如:
用 init 0 命令切換至運行級別 0 ,即關機
用 init 1 命令切換至運行級別 1 ,即進入單用戶運行模式
用 init 6 命令切換至運行級別 6 ,即重新啟動
也可以使用 telinit 命令,在 C e ntO S 中,telinit 命令是 init 命令的符號鏈接。

關機與重新命令
系統的關機和重新啟動,實際上是進行運行級別的切換。此次可以使用 init 命令進行關機和重啟,命令 init 用於立即關機或重啟,但是在多用戶系統中,若想給用戶發送關機警告信息以便各個用戶完成自己的工作並注銷登錄,則必須使用shutdown ;halt 關閉系統最簡單方式 ;reboot 快速的重新啟動 ;poweroff請linux關閉電源。
在多用戶環境下,通常使用 shutdown 命令關閉和重新啟動系統。shutdown 命令能夠以一種比較安全的方式來關閉系統,所有登錄到系統上的用戶將被通知系統將要關閉,而新的登錄操作將被阻止;同時所有的進程也將被通知系統將要關閉,這樣有些程序,如 vi 將能夠及時保存用戶編輯的文件並退出。
shutdown 命令的格式為:
shutdown [參數] time [warning-message]
其中:
time :設置多長時間後執行 shutdown 指令,可以使用如下三種格式:
hh:mm :指定絕對時間,hh用於指定小時,m m 用於指定分鐘
+m :指定相對時間,m 為數字,單位為分鐘
now :現在立刻進行,相當於 +0
warning-message :用於設置發給用戶的警告信息
常用參數如下:

-t sec :送出警告信息和刪除信息之間要延遲多少秒再通知 init 執行運行級切換
-k :並不真的關閉系統,只是給每個用戶發送警告信息
-r :關閉之後重新啟動系統
-h :關閉之後停止系統
-f :重新啟動後不用fsck檢查磁盤
-F :重新啟動後強制用fsck檢查磁盤


例如:
# # 警告所有用戶系統將在5分鐘後重新啟動系統
# shutdown -r +5 ” System will be reboot in 5 minites, Please save your work.”
# # 立即關閉系統
# shutdown -h now
# # 立即重新啟動系統,並在重新啟動後強制用fsck檢查磁盤
# shutdown -h -F now

Copyright © Linux教程網 All Rights Reserved