不知不覺接觸linux半年了,今天有空來梳理下這個過程:
通常來講,全部的操做系統的啓動流程基本就是:html
通電-->BIOS自檢-->主引導記錄-->操做系統linux
細分的話 就如下幾步:shell
1)開機自啓,加載硬盤windows
2)讀取MBR主引導記錄bash
3)grub引導菜單(Boot Loader)服務器
4)加載內核kernel網絡
5)啓動init進程,依據initab文件設定運行級別ssh
6)init進程,依據init文件設定運行級別學習
7)啓動內核模塊,執行不一樣級別的腳本程序。ui
8)執行/etc/rc.d/rc.local
9)啓動mingetty,進入系統登陸界面。
加載內核
操做系統接管硬件之後,首先讀入 /boot 目錄下的內核文件。
啓動初始化進程
內核文件加載之後,就開始運行第一個程序 /sbin/init,它的做用是初始化系統環境。
因爲init是第一個運行的程序,它的進程編號(pid)就是1。其餘全部進程都從它衍生,都是它的子進程
肯定運行級別
許多程序須要開機啓動。它們在Windows叫作"服務"(service),在Linux就叫作"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啓動的程序。可是,不一樣的場合須要啓動不一樣的程序,好比用做服務器時,須要啓動Apache,用做桌面就不須要。Linux容許爲不一樣的場合,分配不一樣的開機啓動程序,這就叫作"運行級別"(runlevel)。也就是說,啓動時根據"運行級別",肯定要運行哪些程序。
Linux預置七種init運行級別(0-6):
0:關機模式 (至關於poweroff)
1:單用戶模式(破解root密碼的方法:linux系統root密碼遺忘的狀況下的解決辦法)
2:無網絡支持的多用戶模式
3:有網絡支持的多用戶模式(也就是文本模式,工做中最經常使用的模式)
4:保留,未使用
5:有網絡支持的X-windows支持多用戶模式(也就是桌面圖形模式)
6: 從新引導系統,即重啓 (至關於reboot)
加載開機啓動程序
前面提到,七種預設的"運行級別"各自有一個目錄,存放須要開機啓動的程序。不難想到,若是多個"運行級別"須要啓動同一個程序,那麼這個程序的啓動腳本,就會在每個目錄裏都有一個拷貝。這樣會形成管理上的困擾:若是要修改啓動腳本,豈不是每一個目錄都要改一遍?
Linux的解決辦法,就是七個 /etc/rcN.d 目錄裏列出的程序,都設爲連接文件,指向另一個目錄 /etc/init.d ,真正的啓動腳本都統一放在這個目錄中。init進程逐一加載開機啓動程序,其實就是運行這個目錄裏的啓動腳本。
這樣作的另外一個好處,就是若是你要手動關閉或重啓某個進程,直接到目錄 /etc/init.d 中尋找啓動腳本便可。
好比,我要重啓iptables服務器,就運行下面的命令:
[root@bastion-IDC ~]# /etc/init.d/iptables restart
Linuix默認的shell是Bash,它會讀入一系列的配置文件。上一步的三種狀況,在這一步的處理,也存在差別。
1)命令行登陸:首先讀入 /etc/profile,這是對全部用戶都有效的配置;而後依次尋找下面三個文件,這是針對當前用戶的配置。
~/.bash_profile
~/.bash_login
~/.profile
須要注意的是,這三個文件只要有一個存在,就再也不讀入後面的文件了。好比,要是 ~/.bash_profile 存在,就不會再讀入後面兩個文件了。
2)ssh登陸:與第一種狀況徹底相同。
3)圖形界面登陸:只加載 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 無論有沒有,都不會運行。
***************當你發現本身的才華撐不起野心時,就請安靜下來學習吧***************