簡介
初始化英文簡稱:init(initialization)是 Unix 和 類Unix 系統啟動過程中的第一道程式,用來産生其它所有程序的程式。
它以守護程序的方式存在,其程序号為1,它将繼續運作直到系統關閉。它是所有其他程序的直接或間接的始源,并會接管孤兒程序。Init由使用寫死的檔案名的核心來啟動,如果核心無法啟動它,将導緻核心崩潰(或“核心恐慌”)。
init的設計,在Unix系統,如System III和System V中,已經偏離了在Research Unix和它的BSD衍生(版)的init所提供的功能。大多數Linux發行版上的用法是與System V有些相容,但也有一些發行版使用非BSD風格:
Gentoo 是自己定制的
deepin,ubuntu等大部分發行版都采用systemd
BSD風格
BSD init 運作存放于/etc/rc的初始化 shell 腳本,然後啟動基于文本模式的終端(getty)或者基于圖形界面的終端(視窗系統,如 X)。 這裡沒有運作模式的問題,因為檔案 'rc' 決定了 init 如何執行。
優點: 簡單且易于手動編輯。
缺點: 如果第三方軟體需要在啟動過程執行它自身的初始化腳本,它必須修改已經存在的啟動腳本,一旦這種過程中有一個小錯誤,都将導緻系統無法正常啟動。
值得注意的是,現代的 BSD 派生系統一直支援使用 rc.local檔案的方式,它将在正常啟動過程接近最後的時間以子腳本的方式來執行。這樣做減少了整個系統無法啟動的風險。然後,第三方軟體包可以将它們獨立的 start/stop 腳本安裝到一個本地的 rc.d目錄中(通常這是由 ports collection/pkgsrc 完成的)。
FreeBSD 和 NetBSD 現在預設使用 rc.d ,該目錄中所有的使用者啟動腳本,都被分成更小的子腳本,和 SysV 類似。rcorder 通常根據在 rc.d目錄中腳本之間的依賴關系來決定腳本的執行順序。
SysV風格
System V init 檢查 /etc/inittab檔案中是否含有 initdefault項。 這告訴 init 系統是否有一個預設運作模式。如果沒有預設的運作模式,那麼使用者将進入系統控制台,手動決定進入何種運作模式。
優點: 靈活性強
缺陷: 比較複雜
運作模式(Runlevel)指的是Unix或者Linux等類Unix作業系統下不同的運作模式。
運作級别通常分為7等,分别是從0到6,但如果必要的話也可以更多。
在深度作業系統中,下列路徑對應不同的運作級别。當系統啟動時,通過其中的腳本檔案來啟動相應的服務。
/etc/rc0.d Run__level 0
/etc/rc1.d Run__level 1
/etc/rc2.d Run__level 2
/etc/rc3.d Run__level 3
/etc/rc4.d Run__level 4
/etc/rc5.d Run__level 5
/etc/rc6.d Run__level 6
運作模式分類
深度作業系統的系統運作級别:
0 所有程序将被終止,機器将有序的停止,關機時系統處于這個運作級别
1 單使用者模式。用于系統維護,隻有少數程序運作,同時所有服務也不啟動
2 多使用者模式。和運作級别3一樣,隻是網絡檔案系統(NFS)服務沒被啟動
3 多使用者模式。允許多使用者登入系統,是系統預設的啟動級别
4 留給使用者自定義的運作級别
5 多使用者模式,并且在系統啟動後運作 X-Window, 給出一個圖形化的登入視窗
6 所有程序被終止,系統重新啟動
管理運作模式
檢視目前的運作級别
深度作業系統預設運作級别為5.使用runlevel指令可以檢視目前的運作模式,終端執行:
runlevel
更改目前運作級别
切換運作級别,執行指令:
init [0123456Ss]
即在 init 指令後跟一個參數,此參數是要切換到的運作級的運作級代号,
注意:init 0 為關機,init 6 為重新啟動。
更改預設運作模式
我們需要編輯 /etc/init/rc-sysinit.conf,終端執行:
sudo gedit /etc/init/rc-sysinit.conf
找到下面一行:
env DEFAULT_RUNLEVEL=2
更改最後面的數字為你想要更改到的運作級别。
注意:為了系統的正常使用,請不要更改預設運作模式為0、4和6
删除運作模式
如果有需要删除特定的運作模式,直接特定運作模式對應的配置檔案即可。
但是如果你不明白這樣做的後果,請不要這麼做!
單使用者模式
Linux系統中,現代的系統引導程式(如 LILO 或者 GRUB),使用者可以在初始化過程中最後啟動的程序來取代預設的 /sbin/init。 通常是在系統引導程式環境中通過執行 init=/foo/bar 指令。例如,如果執行 init=/bin/bash,啟動單使用者 root 的 shell 環境,無需使用者密碼。
正常使用者進入單使用者模式一般為了重置使用者密碼。
初始化程式
很多人一直努力地從某些方面改進傳統的 init 守護程序,使它變得更完善。下面列出的是一些改進:
Upstart:ubuntu主導開發的初始化軟體。
Systemd:完全替代init,可并行啟動服務,并能減少在shell上的系統開銷,為Fedora所使用
SystemStarter:用來替代 launchd — Apple Mac OS X開啟程序
Initng:完全代替 init ,可以異步開啟程序
Service Management Facility:完全代替/重新設計 Solaris 啟動 Solaris 10
runit:跨平台的完全代替 init 可以并行啟動服務
Mudur:用 Python 寫成的 init 替代品, 可以異步開啟程序,Pardus Linux 發行版
eINIT:完全代替 init ,可以異步開啟程序,但是完成這個過程可以不使用 shell 腳本
相關連結