細說 linux 開機及服務啟動

2021-09-14 02:48:25 字數 2515 閱讀 7038

原文:細說 linux 開機及服務啟動 後續如果變動,在原文更新。

這個沒得說。

bios(basic input/output system的縮寫、中文:基本輸入輸出系統),在ibm

pc相容系統上,是一種業界標準的韌體介面。[1]。bios這個字眼是在2023年第一次由cp/m作業系統**現。bios是個人電腦啟動時載入的第乙個軟體。

bios用於電腦開機時執行系統各部分的的自我檢測(power on self

test),並載入引導程式(ipl)或儲存在主存的作業系統。此外,bios還向作業系統提供一些系統引數。系統硬體的變化是由bios隱藏,程式使用bios功能而不是直接控制硬體。現代作業系統會忽略bios提供的抽象層並直接控制硬體元件。

上面的內容取自維基百科,bios(basic input output system) 是乙個軟體,這個軟體已經成為業界標準。一般執行在主機板中,通電後會首先啟動這個軟體,根據設定(主要儲存在 coms 中) 取得各種硬體資訊,並進行自我檢測,並讀取啟動裝置(即系統所在裝置,一般為磁碟,u盤也可以)

讀取到啟動裝置之後就需要啟動引導裝載程式(bootloader,因為各個作業系統的核心檔案及格式不一樣,所以需要乙個裝載程式來處理各類作業系統的裝載,gurp,spfdisk等)來載入作業系統和核心檔案。而所有的作業系統的 bootloader 都放在啟動裝置(磁碟)的第乙個扇區內,也就是 mbr(master boot record,主引導分割槽),bois 通過 int13 中斷功能即可讀取到。

讀取到核心檔案(一般在 /boot 下,如圖所示)之後,linux 會將核心檔案加壓到記憶體中,利用核心功能,測試並驅動各種硬體(儲存裝置,cpu,網絡卡,音效卡)。此時,作業系統以自己的需求重新檢測了硬體,開始接管 bios。

可以看到,此程序的 pid 為1,init 最重要的作用就是準備軟體執行環境,如:系統主機名、網路設定、語言、檔案系統格式等,以及其他服務啟動。所有的操作都會通過 init 的預設配置檔案 /etc/inittab(部分作業系統不使用該檔案,如 ubuntu) 來規劃。並且 /etc/inittab (部分作業系統將各項配置分開) 可以設定 run level(執行級別)。

部分作業系統(centos7/ubuntu)將 init 換為 systemd ,其功能大致一樣,但是做了許多優化和修改。

執行級別0:系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動

執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸

執行級別2:多使用者狀態(沒有nfs服務)

執行級別3:完全的多使用者狀態(有nfs),登陸後進入控制台命令列模式,一般 vps 及雲伺服器都執行在這個級別

執行級別4:系統未使用,保留

執行級別5:x11控制台,登陸後進入圖形gui模式,一般桌面版系統都執行在這個級別

執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動

run level是什麼?就是通過設定 run level 來規定系統使用不同的服務啟動。比如設定 run level 為3,系統將會啟動命令列模式。runlevel命令可以檢視當前的執行級別。init命令可以切換當前系統的模式,比如init 0就會關機,init 6會重啟。修改配置檔案 /etc/inittab 可以設定預設執行級別,下次啟動後直接以某種執行級別啟動,但是切記不能設定0和6。

此時,作業系統中只有 init 程序,其 pid 為1,後續所有程序都是通過 init 啟動,所以所有程序都是init的子程序。init 會先設定系統的基礎環境,主要利用 /etc/rc.d/rc.sysinit 這個指令碼來進行系統初始化的各項操作。比如設定時間,磁碟,檔案系統,字型等等
系統初始化之後,整個作業系統核心功能已經正常了,但是為了使用者正常使用,還要啟動一些服務,這時候就要根據執行級別來執行對應的指令碼來開啟伺服器。

一般在 /etc/rc.d 目錄下面會有各個級別的配置,而 /etc/rc*.d/ 下面就是指令碼的對映

啟動完各項服務之後,意味著整個系統的功能都可以正常使用了,使用者如果有其他操作想完成的話,就可以建立指令碼,或者編寫命令,放在 /etc/rc.d/rc.local 中執行,這樣開機啟動之後就會執行這個指令碼或命令。為什麼不是直接放在啟動級別中目錄下,然後修改啟動指令碼呢?第一是因為服務沒啟動完之前,某些功能或命令是無法使用的。第二是麻煩。當然如果使用者自己編寫的程式想以系統服務模式啟動,也可以放到裡面。

啟動各項服務之後就會載入終端或介面等待使用者登入,也就是出現登入介面/登入提示。

整個過程整理後,如下圖所示

Linux 開機啟動服務

概述 在linux下不是所有的軟體安裝完成後都有開機啟動服務,有些要自己手動去新增或刪除.7.0版本之前 chkconfig list 開機啟動服務查詢.add 新增開機啟動服務.新增的開機啟動服務必須在 etc init.d目錄下才可以使用該選項新增.level 設定開機啟動服務在某個級別下開啟或...

Linux開機啟動服務設定

一 開機啟動項 1 檢視開機將要啟動的服務 chkconfig list 2 修改開機啟動項 chkconfig service on off 一般常啟動的服務有vsftpd,sshd,關閉iptables 防火牆 二 環境變數的設定 path path export path 1.在終端視窗設定,...

Linux服務開機自啟動

有時候我們需要linux系統在開機的時候自動載入某些指令碼或系統服務 主要用三種方式進行這一操作 ln s 在 etc rc.d rc d目錄中建立 etc init.d 服務的軟鏈結 代表0 6七個執行級別之一 chkonfig 命令列執行級別設定 ntsysv 偽圖形執行級別設定 注意 1.這三...