Linux系統的啓動流程

linux的啓動流程

1.加載內核。操作系統接管硬件以後,首先讀入/boot目錄下的內核文件。

2.啓動初始化進程。內核文件加載以後,就開始運行第一個程序/sbin/init,它的作用是初始化系統環境。

3.確定運行級別。許多程序需要開機啓動,他們在Windows叫做“”服務“”(Service),在linux叫做“”“守護進程”(deamon)。

  init進程的主要任務就是運行這些開機啓動程序。Linux允許不同場合分配不同的開機啓動程序,這叫做“運行級別”(runlevel)。

  也就是說,啓動是根據“”運行級別“確定要運行那些程序”。

Linux 7個運行級別(0:關機,停機模式、1:單用戶模式、2:多用戶模式、3:完整的多用戶文本模式、4:系統未使用,保留一般不用、5:圖形化模式、6:重啓模式),運行級就是操作系統當前正在運行的功能級別。這個級別從0到6 ,具有不同的功能。


級別具體說明:

0: 系統停機(關機)模式,系統默認運行級別不能設置爲0,否則不能正常啓動,一開機就自動關機。
1:單用戶模式,root權限,用於系統維護,禁止遠程登陸,就像Windows下的安全模式登錄。
2:多用戶模式,沒有NFS網絡支持。
3:完整的多用戶文本模式,有NFS,登陸後進入控制檯命令行模式。
4:系統未使用,保留一般不用,在一些特殊情況下可以用它來做一些事情。例如在筆記本電腦的電池用盡時,可以切換到這個模式來做一些設置。
5:圖形化模式,登陸後進入圖形GUI模式或GNOME、KDE圖形化界面,如X Window系統。
6:重啓模式,默認運行級別不能設爲6,否則不能正常啓動,就會一直開機重啓開機重啓。

4.加載開機啓動程序。七種預設的"運行級別"各自有一個目錄,存放需要開機啓動的程序。不難想到,如果多個"運行級別"需要啓動同一個程序,那麼這個程序的啓動腳本,就會在每一個目錄裏都有一個拷貝。這樣會造成管理上的困擾:如果要修改啓動腳本,豈不是每個目錄都要改一遍?

Linux的解決辦法,就是七個 /etc/rcN.d 目錄裏列出的程序,都設爲鏈接文件,指向另外一個目錄 /etc/init.d ,真正的啓動腳本都統一放在這個目錄中。init進程逐一加載開機啓動程序,其實就是運行這個目錄裏的啓動腳本。

5.用戶登錄。

(1)命令行登錄:init進程調用getty程序(意爲get teletype),讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,覈對密碼(Debian還會再多運行一個身份覈對程序/etc/pam.d/login)。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啓動這個shell。

(2)ssh登錄:這時系統調用sshd程序(Debian還會再運行/etc/pam.d/ssh ),取代getty和login,然後啓動shell。

(3)圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器爲gdm(GNOME Display Manager),然後用戶輸入用戶名和密碼。如果密碼正確,就讀取/etc/gdm3/Xsession,啓動用戶的會話。

6.進入 login shell。所謂shell,簡單說就是命令行界面,讓用戶可以直接與操作系統對話。用戶登錄時打開的shell,就叫做login shell。Debian默認的shell是Bash,它會讀入一系列的配置文件。上一步的三種情況,在這一步的處理,也存在差異。

(1)命令行登錄:首先讀入 /etc/profile,這是對所有用戶都有效的配置;然後依次尋找下面三個文件,這是針對當前用戶的配    置。

~/.bash_profile
~/.bash_login
~/.profile

     需要注意的是,這三個文件只要有一個存在,就不再讀入後面的文件了。比如,要是 ~/.bash_profile 存在,就不會再讀入後面兩個文件了。

(2)ssh登錄:與第一種情況完全相同。

(3)圖形界面登錄:只加載 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 不管有沒有,都不會運行。

7.打開 non-login shell。用戶進入操作系統以後,常常會再手動開啓一個shell。這個shell就叫做 non-login shell,意思是它不同於登錄時出現的那個shell,不讀取/etc/profile和.profile等配置文件。

non-login shell的重要性,不僅在於它是用戶最常接觸的那個shell,還在於它會讀入用戶自己的bash配置文件 ~/.bashrc。大多數時候,我們對於bash的定製,都是寫在這個文件裏面的。

8.下面是整個過程的簡圖。

9.參考鏈接:

http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

https://www.cnblogs.com/ljs05/p/7325920.html

 

發佈了73 篇原創文章 · 獲贊 15 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章