SysV vs BSD啟動(dòng)方式
SysV vs BSD啟動(dòng)方式
SysV vs BSD啟動(dòng)方式
概括地講,Linux/Unix系統(tǒng)一般有兩種不同的初始化啟動(dòng)方式.
1) BSD system init
2) System V init
Slackware 使用BSD風(fēng)格的init腳本,而很多別的發(fā)行版使用System V風(fēng)格的init腳本。SysV和BSD腳本都是能讓人讀懂的,即它們都是shell腳本,而不是已編譯的程序。主要的區(qū)別在于腳本是如何設(shè)計(jì)的。
SysV腳本傾向于接受諸如start、stop、restart之類(lèi)的參數(shù),依它所啟動(dòng)的程序而定。所以你可以用 /etc/init.d/bind start 這樣的命令來(lái)啟動(dòng)BIND,并用 /etc/init.d/bind stop 來(lái)停止BIND。
SysV的啟動(dòng)還傾向于使用符號(hào)鏈接來(lái)組織啟動(dòng)進(jìn)程,例如在 /etc/rc.d/rc.4/中,可能會(huì)有指向別的目錄中的真正的腳本的各種各樣的符號(hào)鏈接。這些鏈接的命令會(huì)像是 S10network、S25xdm之類(lèi),其中的S表示啟動(dòng)(start)該項(xiàng)服務(wù)(如果是K,則表示kill),而數(shù)字指定了腳本執(zhí)行的順序。
SysV風(fēng)格的啟動(dòng)腳本的主要優(yōu)點(diǎn)在于能夠設(shè)置成自動(dòng)配置許多東西。例如,若你進(jìn)入runlevel 6,你可以建立一個(gè)鏈接叫K75bind來(lái)終止BIND,前提是鏈接所指向的文件已經(jīng)設(shè)置好來(lái)做這件事。
SysV風(fēng)格腳本的主要缺點(diǎn)是太過(guò)彎彎繞。假如我想增加一個(gè)服務(wù),我要先寫(xiě)一個(gè)SysV風(fēng)格的腳本(不是容易的事),它至少要處理“start”(還可能有“stop”)。然后,我必須確保在每個(gè)要運(yùn)行這個(gè)服務(wù)的runlevel中正確地設(shè)置好符號(hào)鏈接。如果恰好這個(gè)服務(wù)需要在已經(jīng)連續(xù)編號(hào)的兩個(gè)腳本之間運(yùn)行,我就需要做一些對(duì)符號(hào)鏈接重新編號(hào)的工作(例如,S10xxx和S11yyy已經(jīng)存在,而我想讓zzzz在它們之間運(yùn)行,我就需要對(duì)前兩者之一重新建立符號(hào)鏈接來(lái)把zzzz擠進(jìn)去)。
想暫時(shí)改變SysV的啟動(dòng)進(jìn)程也是非常痛苦的事情。假如我不想在下次啟動(dòng)時(shí)運(yùn)行xxx服務(wù),最簡(jiǎn)單的辦法是刪除S10xxx這個(gè)鏈接,不算難吧?但如果我想在每個(gè)runlevel中都去掉它,我就需要從每個(gè)有關(guān)目錄中刪除S10xxx這個(gè)鏈接。然后,假如我改了主意,想重新運(yùn)行xxx,我需要手工重新建立所有的符號(hào)鏈接。
這樣子無(wú)疑是在已經(jīng)很復(fù)雜的啟動(dòng)進(jìn)程上疊床架屋,而Slackware是不會(huì)這么做的:它用BSD風(fēng)格的啟動(dòng)腳本。
BSD風(fēng)格的腳本是直接了當(dāng)?shù)膕hell腳本,它們傾向于順序運(yùn)行,而不需要start或stop之類(lèi)參數(shù)。只要系統(tǒng)進(jìn)入了它們的runlevel就會(huì)執(zhí)行,就這么簡(jiǎn)單。
BSD風(fēng)格的主要缺點(diǎn)是你需要一些其他方法來(lái)控制后臺(tái)服務(wù)。例如,若我要停止BIND,我要先用命令 ps ax|grep named 找出 named的PID,然后kill這個(gè)PID(或者用這個(gè)pid的文件名)。但是我不能簡(jiǎn)單地下個(gè)命令 /etc/init.d/bind stop (除非我已經(jīng)寫(xiě)了個(gè)這樣的SysV腳本)。
BSD風(fēng)格腳本的主要優(yōu)點(diǎn)是它們非常容易閱讀和編輯。例如,若我想增加一個(gè)服務(wù)zzzz,我可以在 /etc/rd.d/rc.local中增加一行 /usr/local/bin/zzzz,這樣只要是執(zhí)行rc.local的runlevel,zzzz就會(huì)隨之運(yùn)行。假如我只想在runlevel 4執(zhí)行zzzz,我可以把它放在 /etc/rc.d/rc.4 (不是目錄,而是一個(gè)腳本)中。如果我要改變執(zhí)行順序,我只要把zzzz放在適當(dāng)?shù)姆?wù)之間,多數(shù)編輯器都支持在文件中間插入文本(就算ed都支持)。還有,你可以用注釋的方式停止一個(gè)服務(wù),然后去掉注釋讓它重新運(yùn)行。
因此,當(dāng)多數(shù)發(fā)行版采用SysV風(fēng)格時(shí),Slackware采用了BSD風(fēng)格。對(duì)于許多Slackware用戶,BSD風(fēng)格的易用性勝過(guò)SysV風(fēng)格的強(qiáng)大功能。當(dāng)然,你可以有自己的意見(jiàn)。
與普遍的觀點(diǎn)相反,從一種風(fēng)格轉(zhuǎn)到另一種并不那么困難,只要把inittab和rc文件從一個(gè)系統(tǒng)拷貝到另一個(gè)系統(tǒng)即可。init程序自身沒(méi)有改變,所謂“風(fēng)格”多是在inittab和它所調(diào)用的腳本中設(shè)置的。
譯注:現(xiàn)在slackware為了提高兼容性,在/etc/rc.d/提供了rc.sysvinit腳本以適應(yīng)某些基于SysV啟動(dòng)過(guò)程的商業(yè)程序的需要。另外,在許多設(shè)置服務(wù)的腳本中,也接受start、stop、restart這一類(lèi)參數(shù),例如rc.sendmail、rc.sshd等。