Linux
是一種開源電腦操做系統內核。它是一個用C語言寫成,符合POSIX
標準的類Unix
操做系統。
90年代初期Linux
開始出現的時候,僅僅是以源代碼形式出現,用戶須要在其餘操做系統下進行編譯才能使用。後來出現了一些正式版本。目前最流行的幾個正式版本有:SUSE、RedHat、Fedora、Debian、Ubuntu、CentOS、Gentoo
,等等。用戶可根據本身的經驗和喜愛選用合適的Linux
發行版。
原先Linus Torvalds
將Linux
置於一個禁止任何商業行爲的條例之下,但以後改用GNU
通用公共許可證第二版。該協議容許任何人對軟件進行修改或發行,包括商業行爲,只要其遵照該協議,全部基於Linux
的軟件也必須以該協議的形式發表,並提供源代碼。html
對於開發人員而言,不少時候都會接觸到LINUX
系統,甚至要去維護和開發,因此對開機/關機
過程須要必定的認識,特別是服務器大部分都是linux系統
的時候,咱們重啓服務、切換服務等都須要保障服務的功能不能中斷,這就更須要對linux
的運行過程有深刻的認識,本文只是記錄一小部分過程。linux
Linux 使用的是基於運行級(run-levels
) 概念的稱爲 SysVinit
的專用啓動工具。 它在不一樣的系統上多是徹底不同的, 因此不能認爲一個腳本在某個 Linux 發行版上工做正常。shell
SysVinit
以運行級的模式來工做,通常有 7 (從 0 到 6)個運行級 (實際上能夠有更多的運行級,但都是用於特殊狀況並且通常使用不到。 參見 init(8)以得到更多信息),每一個運行級對應於一套設定好的任務, 當啓動一個運行級的時候, 計算機就須要執行相應的任務。 默認的運行級是 3,下面是對不一樣運行級的描述:安全
0: 關閉計算機 1: 單用戶模式 2: 無網絡多用戶模式 3: 有網絡多用戶模式 4: 保留做自定義,不然同運行級 3 5: 同運行級 4,通常用於圖形界面(GUI)登陸(如 X的 xdm 或 KDE的 kdm) 6: 重啓動計算機
可使用runlevel
查看,也能夠在/etc/inittab
文件中看到如下:bash
# 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: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit
也就是說咱們系統的運行級別目前是3,那麼須要看的就是/etc/rc3.d
下的內容,其實裏面都是軟鏈接,全部的軟鏈指向/etc/init.d/中的腳本文件,命名規範以下:服務器
[K|S][number][service name] --> ../init.d/servicename S 表示 Start,開啓服務 [number]表示的是該腳本的運行優先級,number越小,腳本的運行優先級就越高 [service name]表示的是服務的名稱。 所以咱們若是須要定義一個服務啓動的優先級(順序),則需指定腳本的number便可。
加載內核網絡
打開電腦電源,開始讀取 BIOS 並進行主機的自我測試;透過 BIOS 取得第一個可開機裝置,讀取主要開機區 (MBR) 取得開機管理程式;
LILO啓動以後,若是你選擇了Linux做爲準備引導的操做系統,第一個被加載的東西就是內核。請記住此時的計算機內存中還不存在任何操做系統,PC(由於它們自然的設計缺陷)也尚未辦法存取機器上所有的內存。所以,內核就必須完整地加載到可用RAM的第一個兆字節以內。爲了實現這個目的,內核是被壓縮了的。這個文件的頭部包含着必要的代碼,先設置CPU進入安全模式(以此解除內存限制),再對內核的剩餘部分進行解壓縮。
執行內核工具
內核在內存中解壓縮以後,就能夠開始運行了。此時的內核只知道它自己內建的各類功能,也就是說被編譯爲模塊的內核部分還不能使用。最基本的是,內核必須有足夠的代碼設置本身的虛擬內存子系統和根文件系統(一般就是ext2文件系統)。一旦內核啓動運行,對硬件的檢測就會決定須要對哪些設備驅動程序進行初始化。從這裏開始,內核就可以掛裝根文件系統(這個過程相似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統以後,將啓動並運行一個叫作init的程序。
init進程測試
init
程式開始執行系統初始化,最早讀取/etc/inittab
文件中的配置,配置中通常是先執行下/etc/rc.d/rc.sysinit
,而後執行/etc/init.d/functions
,設置環境變量等,同時讀取runlevel
的配置級別, 對於嵌入式開發而言,在執行rcN.d
以前會有/etc/init.d/rcS
單用戶模式啓動腳本的執行。
依據init
的設定的initdefault
進行daemon start
(/etc/rc.d/rc[0-6].d/*
),依次執行腳本,啓動服務。關機時依次關閉服務。
rc0.d~rc.6.d
文件夾下分別對應的是操做系統0-6
級運行的狀態下須要執行的腳本。在這些文件夾下的文件,都是軟鏈文件,指向指定位置的腳本,這些軟鏈都是指向同一個文件夾/etc/init.d/
的腳本文件,
載入本機設定 (/etc/rc.d/rc.local)this
rc.local
文件,
/etc/profile
文件。這個文件是系統啓動時,任何用戶登陸時執行的文件。任何用戶登陸前,root用戶也會執行一遍。
~/.bash_profile
文件。這個文件每一個用戶都有。它在用戶登陸時自動執行,擁有用戶的權限。它export的環境變量對該用戶隨後啓動的進程都有效。
root
權限執行一些腳本,那麼最好的方法是編輯/etc/rc.d/rc.local
文件。/etc/profile
文件。~/.bash_profile
文件。============ /etc/profile ============ 此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置. =========== /etc/bashrc =========== 爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取. =============== ~/.bash_profile =============== 每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該 文件僅僅執行一次!默認狀況下,他設置一些環境變量,執行用戶的.bashrc文件. ========= ~/.bashrc ========= 該文件包含專用於你的bash shell的bash信息,當登陸時以及每次打開新的shell時,該文件被讀取. ========== ~/.profile ========== 在Debian中使用.profile文件代 替.bash_profile文件 .profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)兩個文件是.bash_profile的同義詞,目的是爲了兼容其它Shell。在Debian中使用.profile文件代 替.bash_profile文件。 ============== ~/.bash_logout ==============當每次退出系統(退出bash shell)時,執行該文件.