目錄shell
1 開機加載簡介小程序
2 常規加載流程bash
2.1 加載BIOS網絡
2.2 讀取MBRide
2.3 boot loaderthis
2.4 加載內核spa
2.5 init依據inittab文件來設定運行等級操作系統
2.6 init進程執行rc.sysinit繼承
2.7 啓動內核模塊進程
2.8 執行不一樣運行級別的腳本程序
2.9 執行/etc/rc.d/rc.local
2.10 執行/bin/login程序,進入登陸狀態
3 環境變量加載
3.1 加載順序說明
開機加載簡介
開機過程指的是從打開計算機電源直到LINUX顯示用戶登陸畫面的全過程。分析LINUX開機過程也是深刻了解LINUX核心工做原理的一個很好的途徑。
常規加載流程
一、加載BIOS
打開計算機電源,首先加載BIOS信息,BIOS信息是如此的重要,以致於計算機必須在最開始就找到它。BIOS中包含了CPU的相關信息、設備啓動順序信息、硬盤信息、內存信息、時鐘信息等等。
以後,計算機就知道應該去讀取哪一個硬件設備了。在BIOS將系統的控制權交給硬盤第一個扇區以後,就開始由Linux來控制系統了
二、讀取MBR
硬盤上第0磁道第一個扇區被稱爲MBR,也就是Master Boot Record,即主引導記錄,大小是512字節,可裏面卻存放了預啓動信息、分區表信息。
可分爲兩部分:第一部分爲引導(PRE- BOOT)區,佔了446個字節;第二部分爲分區表(PARTITION PABLE),共有66個字節,記錄硬盤的分區信息。預引導區的做用之一是找到標記爲活動(ACTIVE)的分區,並將活動分區的引導區讀入內存。
系統找到BIOS所指定的硬盤的MBR後,就會將其複製到0×7c00地址所在的物理內存中。被複制到物理內存的內容就是Boot Loader,到計算機系統層面那就是lilo或者grub了。
三、boot loader
Boot Loader 就是在操做系統內核運行以前運行的一段小程序。經過這段小程序,咱們能夠初始化硬件設備、創建內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便爲最終調用操做系統內核作好準備。
grub作爲引導系統的最經常使用的程序之一,咱們有必要去了解一下,下面是咱們AX3 SP3的grub引導文件
# grub.conf generated by anaconda
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0 #此項爲默認以啓動第一個title
timeout=5 #等待五秒
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Asianux Server 3 (Quartet SP4) (2.6.18-194.13.AXS3)
root (hd0,0) #指定系統的根在hd0,0 即(第一塊設備的第一個分區)
kernel /vmlinuz-2.6.18-194.13.AXS3 ro root=LABEL=/ #指定kernel文件
initrd /initrd-2.6.18-194.13.AXS3.img #指定initrd文件
四、加載內核
init依據inittab文件來設定運行等級
核心加載以後,由核心執行的第一個程序就是 /sbin/init,而這個程序第一個目標固然就是肯定主機是要以怎樣的狀況登入!這個就必需要以 /sbin/init 來加載 /etc/inittab 的信息!
/etc/inittab有下面一段內容,說明了各個終端的做用,以及默認進入的終端方式
# Default runlevel. The runlevels used by RHS are:
# 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:
根據上面的信息咱們瞭解到:
0:關機
1:單用戶登錄模式
2:多用戶登錄,跟3相仿,可是沒有網絡
3,多用戶登錄字符模式
4,暫不被使用
5,進入X11 圖形界面
6,重啓系統
"id:3:initdefault:" 此項設置爲系統默認進入的終端模式,不要設置0和6模式,不然系統將不能啓動或者一直重啓
init進程執行rc.sysinit
在設定了運行等級後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,設定PATH、設定網絡配置(/etc/sysconfig/network)、啓動swap分區、設定/proc等等。
/etc/rc.d/rc.sysinit大體作了如下內容:
1. 設定預設路徑:( PATH )
2. 設定網絡狀態:系統會讀取 /etc/sysconfig/network
3. 啓動swap交換分區
4. 檢查文件系統:系統會去檢查一些可能會存在的目錄,例如 /fsckoptions 與 /forcfsck 及 /fastboot
等等的目錄,當系統有不正常關機的現象時(例如忽然的斷電等等),那麼 Linux 將會自動的強制
去檢查 root 的檔案系統 ( checking root filesystems )。
5. 清除 /etc/mtab ;
6. mount root 及 /proc 檔案系統
7.檢查檔案系統 :與前面相同的,當前面的 /fastboot 檢查的,就會以 fsck 檢查你的其它扇區 ( 使用 fsck )
8.掛上其它檔案系統
9.設定 console 字型
10.打開 quota
11.清除沒必要要的檔案, 如 lock, pid
12.設定 clock
13.serial port 初始化
14.將開機訊息經由 dmesg 放入 /var/log/dmesg 中
五、啓動內核模塊
執行不一樣運行級別的腳本程序
當系統執行完/etc/rc.d/rc.sysinit以後,/etc/inittab會指引系統去運行rc0.d到rc6.d中的相應的腳本程序
進入/etc/rc.d/rc3.d/目錄下,咱們會發現不少K或者S開頭的連接到../init.d/的腳本文件,實際咱們執行的是/etc/rc.d/init.d裏的腳本文件
執行 ls -l輸出結果爲:
lrwxrwxrwx 1 root root 15 2011-11-02 S05kudzu -> ../init.d/kudzu
須要注意的是:S爲開機須要加載執行的腳本文件,K爲開機不須要加載執行的腳本文件,數字爲優先級,優先級越小,越先執行.
咱們能夠用chkconfig來管理它的運行狀態.
執行/etc/rc.d/rc.local
你若是打開了此文件,裏面有一句話,讀過以後,你就會對此命令的做用一目瞭然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工做後,Linux留給用戶進行個性化的地方。你能夠把你想設置和啓動的東西放到這裏。
執行/bin/login程序,進入登陸狀態
此時,系統已經進入到了等待用戶輸入username和password的時候了,你已經能夠用本身的賬號登入系統了。
六、環境變量加載
加載順序說明
在剛登陸Linux時,首先啓動 /etc/profile 文件,而後再啓動用戶目錄下的 ~/.bash_profile 若是 ~/.bash_profile文件存在的話,由於在 ~/.bash_profile文件中通常會有下面的代碼:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
因此會執行 ~/.bashrc文件。 而且~/.bashrc中,通常還會有如下代碼:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
因此,~/.bashrc會調用 /etc/bashrc文件。最後,在退出shell時,還會執行 ~/.bash_logout文件。
執行順序爲:/etc/profile -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
關於各個文件的做用域,在網上找到了如下說明:
(1)/etc/profile: 此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc/bashrc: 爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。
(3)~/.bash_profile: 每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該文件僅僅執行一次!默認狀況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登陸時以及每次打開新的shell時,該該文件被讀取。
(5)~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件. 另外,/etc/profile中設定的變量(全局)的能夠做用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承 /etc/profile中的變量,他們是"父子"關係。
(6)~/.bash_profile 是交互式、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的一般兩者設置大體相同,因此一般前者會調用後者