linux啟動流程

2021-08-27 08:03:03 字數 2587 閱讀 3107

1 linux啟動流程

1.1  硬體啟動順序 

1.2 作業系統啟動順序

第一步、載入核心作業系統接管硬體以後,首先讀入 /boot 目錄下的核心檔案。    

第二步、啟動初始化程序    核心檔案載入以後,就開始執行第乙個程式 /sbin/init,它的作用是初始化系統環境。由於init是第乙個執行的程式,它的程序編號(pid)就是1。其他所有程序都從它衍生,都是它的子程序。   

第三步、確定執行級別     init程序首先讀取檔案 /etc/inittab,它是執行級別的設定檔案。如果你開啟它,可以看     到第一行是這樣的:     id:2:initdefault:  initdefault的值是2,表明系統啟動時的執行級別為2。如果需要指定其他級別,可以 手動修改這個值。每個執行級別在/etc目錄下面,都有乙個對應的子目錄,指定要加 載的程式。  /etc/rc0.d  /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d上面目錄名中的"rc",表示run command(執行程式),最後的d表示directory(目錄)。下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程式。   readme  s01motd  s13rpcbind  s14nfs-common  s16binfmt-support  s16rsyslog  s16sudo  s17apache2  s18acpid檔名都是"字母s+兩位數字+程式名"的形式。字母s表示start,也就是啟動的意思(啟動指令碼的執行引數為start),如果這個位置是字母k,就代表kill(關閉),即如果從其他執行級別切換過來,需要關閉的程式(啟動指令碼的執行引數為stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第乙個啟動的程式是motd,然後是rpcbing、nfs....     附:許多程式需要開機啟動。它們在windows叫做"服務"(service),在linux就叫做"守護程序"(daemon)。init程序的一大任務,就是去執行這些開機啟動的程式。linux允許為不同的場合,分配不同的開機啟動程式,這就叫做"執行別"(runlevel)。也就是說,啟動時根據"執行級別",確定要執行哪些程式。linux預置七種執行級別(0-6)。一般來說,0是關機,1是單使用者模式(也就是維護模式),6是重啟。執行級別2-5,各個發行版不太一樣.  

第四步、載入開機啟動程式預設的"執行級別"各自有乙個目錄,存放需要開機啟動的程式。不難想到,如果多個"執行級別"需要啟動同乙個程式,那麼這個程式的啟動指令碼,就會在每乙個目錄裡都有乙個拷貝。這樣會造成管理上的困擾:如果要修改啟動指令碼,豈不是每個目錄都要改一遍?linux的解決辦法:七個 /etc/rcn.d 目錄裡列出的程式,都設為鏈結檔案,指向另外乙個目錄 /etc/init.d ,真正的啟動指令碼都統一放在這個目錄中。init程序逐一載入開機啟動程式,其實就是執行這個目錄裡的啟動指令碼。s01motd -> ../init.d/motd  s13rpcbind -> ../init.d/rpcbind  s14nfs-common -> ../init.d/nfs-common  s16binfmt-support -> ../init.d/binfmt-support  s16rsyslog -> ../init.d/rsyslog  s16sudo -> ../init.d/sudo  s17apache2 -> ../init.d/apache2  s18acpid -> ../init.d/acpid 這樣做的另乙個好處,就是如果你要手動關閉或重啟某個程序,直接到目錄 /etc/init.d 中尋找啟動指令碼即可。比如,我要重啟apache伺服器,就執行下面的命令:$ sudo /etc/init.d/apache2 restart/etc/init.d 這個目錄名最後乙個字母d,是directory的意思,表示這是乙個目錄,用來與程式 /etc/init 區分。  

第五步、使用者登入  開機啟動程式載入完畢以後,就要讓使用者登入了。  一般來說,使用者的登入方式有三種:   (1)命令列登入:init程序呼叫getty程式,讓使用者輸入使用者名稱和密碼。輸入完成    後, 再呼叫login程式,核對密碼。如果密碼正確,就從檔案  /etc/passwd 讀取    該使用者指定的shell,然後啟動這個shell。  (2)ssh登入:這時系統呼叫sshd程式,取代getty和login,然後啟動shell。  (3)圖形介面登入:init程序呼叫顯示管理器,gnome圖形介面對應的顯示管理器   為gdm(gnome display manager),然後使用者輸入使用者名稱和密 碼。如果密碼正確,   就讀取/etc/gdm3/xsession,啟動使用者的會話。   

第六步、進入 login shell  所謂shell,簡單說就是命令列介面,讓使用者可以直接與作業系統對話。使用者登入時  開啟的shell,就叫做login shell。  上一步的三種情況,在這一步的處理,也存在差異。 (1)命令列登入:首先讀入 /etc/profile,這是對所有使用者都有效的配置;然後依次尋   找下面三個檔案,這是針對當前使用者的配置。   ~/.bash_profile  ~/.bash_login   ~/.profile  需要注意的是,這三個檔案只要有乙個存在,就不再讀入後面的檔案了。比如,要是   ~/.bash_profile 存在,就不會再讀入後面兩個檔案了。 (2)ssh登入:與第一種情況完全相同。 (3)圖形介面登入:只載入 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 不  管有沒有,都不會執行。

linux啟動流程

linux系統主要通過以下步驟啟動 讀取mbr的資訊,啟動boot manager windows使用ntldr作為boot manager,如果您的系統中安裝多個版本的windows,您就需要在ntldr中選擇您要進入的系統。linux通常使用功能強大,配置靈活的grub作為boot manage...

linux啟動流程

bios basic input output system mbr main boot record kernel kernel自解壓 核心初始化 核心啟動 start kernel 自身為0 程序,建立1 程序執行,直接執行在物理記憶體空間上,沒有虛位址。1 程序裝入並執行程式 sbin ini...

Linux啟動流程

下面簡單介紹下啟動,詳細的後續再補。1.載入bios的硬體資訊並進行自我測試,並依據設定取得第乙個可以啟動的裝置 2.讀取並執行第乙個裝置內的mbr master boot record,硬碟的主引導記錄 的boot loader 即是grub,spfdisk等程式 3.依據boot loader的...