Linux Default Bootup、Startup、Autoload Configuration file(自啟動服務指令碼)

Andrew.Hann發表於2015-03-08

目錄

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

 

相關文章