目錄
1. Linux初始化init系統 2. Linux配置檔案自動載入過程
1. Linux初始化init系統
Linux初始化init系統在不同作業系統系列下的區別
1. RHEL 5: SysVinit 2. RHEL 6: Upstart 3. RHEL 7: Systemd
RHEL 5.x為例進行學習
RHEL的啟動過程按步驟大致可以分為:
1. POST加電自檢 2. BIOS(Boot Sequence) 3. 載入對應引導上的MBR(bootloader) 4. 主引導設定載入其BootLoader 5. 藉由Grub的管理,讀取Kernel核心檔案(/boot/vmlinuz),解壓至主記憶體,利用核心的功能,進行第二次硬體檢測(第一次發生在POST開機自檢時) 6. 載入Initial RAM Disk(/boot/initrd),使之在記憶體中解壓縮為根目錄,kernel藉此完成驅動程式的載入。最終釋放虛擬檔案系統,並掛載實際的根目錄檔案系統 6. 在核心載入完畢,進行完硬體偵測與驅動程式載入後,核心會啟動第一個程式/sbin/init,init程式將會讀取/etc/inittab,在/etc/inittab中,大致規定了以下動作: 1) 取得 runlevel 亦即預設執行等級的相關等級 2) 使用 /etc/rc.d/rc.sysinit 進行系統初始化 3) 根據runlevel呼叫相關啟動指令碼,以啟動相應的系統服務 4) 其他一些系統設定,最終完成系統啟動
順序如下
/****自啟動指令碼執行****/ 1. /etc/inittab Linux系統核心會啟動整個系統的第一個程式/sbin/init,init程式將會讀取/etc/inittab,執行rc.sysinit指令碼(注意檔名是不一定的,有些unix甚至會將語句直接寫在inittab中) rc.sysinit指令碼作了很多工作: /* init $PATH config network start swap function set hostname check root file system, repair if needed check root space .... */ rc.sysinit根據inittab執行rc?.d指令碼(linux是多使用者系統) 2. /etc/rc.lcoal 開機啟動程式 3. /etc/rc.d/init.d/ 所有啟動指令碼放置在/etc/rc.d/init.d下,rc?.d中放置的是指向init.d中指令碼的連結,命名格式是 /* S{number}{name} S開始的檔案向指令碼傳遞start引數 K{number}{name} K開始的檔案向指令碼傳遞stop引數 number決定執行的順序 */ 4. /etc/init.d/ 各種伺服器和程式的二進位制檔案存放目錄 5. /etc/rc 1) while遍歷/etc/rc$runlevel.d/K*,執行預設KILL指令碼 2) while遍歷/etc/rc$runlevel.d/S*,執行預設START服務 6. /etc/rc$runlevel.d/ 各個啟動級別的執行程式連線目錄,裡頭的檔案都是指向/etc/init.d/的一些軟連線 7. /etc/rc.d/rc 根據其引數指定的執行模式(執行級別)來執行相應目錄(/etc/rc.d/rc$runlevel.d/)下的指令碼 8. /etc/rc.d/rc$runlevel.d/ 各個啟動級別的執行程式連線目錄,裡頭的檔案都是指向/etc/rc.d/rc$runlevel.d/的一些軟連線 9. /etc/rc.d/rc.local 使用者自訂開機啟動程式 10. /etc/rc.d/rc.sysinit /****自啟動指令碼執行****/ /****Bash啟動指令碼執行****/ /etc/profile ~/.bash_profile /etc/profile 和 ~/.bash_profile 是在啟動一個互動登陸shell的時候被呼叫 /etc/bashrc ~/.bashrc /etc/bashrc 和 ~/.bashrc 是在一個互動的非登陸shell啟動的時候被呼叫 ~/.bash_logout 在使用者登出登陸的時候被讀取 一個互動的登陸shell會在 /bin/login 成功登陸之後執行。一個互動的非登陸shell是通過命令列來執行的,如[prompt]$/bin/bash。一般一個非互動的shell出現在執行 shell指令碼的時候。之所以叫非互動的shell,是因為它不在命令列上等待輸入而只是執行指令碼程式 /****Bash啟動指令碼執行****/
Relevant Link:
http://no001.blog.51cto.com/1142339/411951 http://www.zhihu.com/question/20126189
1. Linux配置檔案自動載入過程
Linux下有很多針對全域性的、針對單個使用者的自啟動、環境引數配置檔案,它們的順序關係如下
/****環境變數設定****/ 1. /etc/profile.d: 放置配置SHELL資訊的指令碼檔案 2. /etc/profile 此檔案為系統的每個使用者設定"環境資訊",是一個全域性的配置,當使用者第一次登入系統時,該檔案被執行。並從/etc/profile.d目錄的配置檔案中搜集shell的設定,並逐個執行,這種將配置檔案切分為"獨立指令碼模組"的方式提高了Linux系統環境變數配置的靈活性 需要注意的是,/etc/profile中設定的變數(全域性)的可以作用於任何使用者 3. ~/.bashrc: 該檔案包含專用於每個使用者的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取 ~/.bashrc等中設定的變數(區域性)只能繼承/etc/profile中的變數,他們是"父子"關係。 4. ~/.bash_profile 每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次。預設情況下,設定一些環境變數,執行使用者的.bashrc檔案 5. /etc/bashrc 使用者登入系統後,會開啟SHELL終端進行指令操作,Linux為每一個執行Bash Shell的使用者執行此檔案(任意指令)。當bash shell被開啟時,該檔案被讀取(即每次新開一個終端,都會執行/etc/bashrc) 6. /etc/csh.cshrc BSD上CSH的全域性配置檔案,BSD為每一個執行CShell的使用者執行此檔案(任意指令)。當CShell被開啟時,該檔案被讀取(即每次新開一個終端,都會執行/etc/csh.cshrc) 7. ~/.bash_logout 當每次退出系統(退出bash shell)時,執行該檔案 /****環境變數設定****/
Relevant Link:
http://huhao1989.iteye.com/blog/1586020 http://blog.csdn.net/ithomer/article/details/6322892 https://wiki.freebsdchina.org/howto/c/config_your_csh
Copyright (c) 2014 LittleHann All rights reserved