本篇內(nèi)容主要講解“Linux系統(tǒng)中的SysVinit機(jī)制是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux系統(tǒng)中的SysVinit機(jī)制是什么”吧!
目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、南縣網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。SysV init是systemV風(fēng)格的init系統(tǒng),顧名思義,它源于SystemV系列UNIX。它提供了比BSD風(fēng)格init系統(tǒng)更高的靈活性。是已經(jīng)風(fēng)行了幾十年的UNIX init系統(tǒng),一直被各類Linux發(fā)行版所采用。
(1) 什么是SystemV
SystemV,曾經(jīng)也被稱為AT&T SystemV,是Unix操作系統(tǒng)眾多版本中的一支。它最初由AT&T開發(fā),在1983年第一次發(fā)布。一共發(fā)行了4個SystemV的主要版本:版本1、2、3和4。SystemV Release4,或者稱為SVR4,是最成功的版本,成為一些UNIX共同特性的源頭,例如”SysV初始化腳本“(/etc/init.d),用來控制系統(tǒng)啟動和關(guān)閉,SystemV Interface Definition(SVID)是一個SystemV如何工作的標(biāo)準(zhǔn)定義。
(2)SysV init的運(yùn)行級別
SysV init用術(shù)語runlevel來定義"預(yù)訂的運(yùn)行模式"。SysV init檢查'/etc/inittab'文件中是否含有'initdefault'項。來告訴init系統(tǒng)是否有一個默認(rèn)運(yùn)行模式。如果沒有默認(rèn)的運(yùn)行模式,那么用戶將進(jìn)入系統(tǒng)控制臺,手動決定進(jìn)入何種運(yùn)行模式。
SysV init中運(yùn)行模式描述了系統(tǒng)各種預(yù)訂的運(yùn)行模式。通常會有8種運(yùn)行模式,即運(yùn)行模式0到6和S或者s。
每種Linux發(fā)行版對運(yùn)行模式的定義都不太一樣。但0,1,6卻得到了大家的一致贊同:
0關(guān)機(jī)
1單用戶模式
6重啟
通常在/etc/inittab文件中定義了各種運(yùn)行模式的工作范圍。比如RedHat定義了runlevel3和5。運(yùn)行模式3將系統(tǒng)初始化為字符界面的shell模式;運(yùn)行模式5將系統(tǒng)初始化為GUI模式。無論是命令行界面還是GUI,運(yùn)行模式3和5相對于其他運(yùn)行模式而言都是完整的正式的運(yùn)行狀態(tài),計算機(jī)可以完成用戶需要的任務(wù)。而模式1,S等往往用于系統(tǒng)故障之后的排錯和恢復(fù)。
很顯然,這些不同的運(yùn)行模式下系統(tǒng)需要初始化運(yùn)行的進(jìn)程,需要進(jìn)行的初始化準(zhǔn)備都是不同的。比如運(yùn)行模式3不需要啟動X系統(tǒng)。用戶只需要指定需要進(jìn)入哪種模式,SysV init負(fù)責(zé)執(zhí)行所有該模式所必須的初始化工作。
(3)SysV init運(yùn)行順序
SysV init巧妙地用腳本,文件命名規(guī)則和軟鏈接來實現(xiàn)不同的runlevel。首先,SysV init需要讀取/etc/inittab文件。分析這個文件的內(nèi)容,它獲得以下一些配置信息:
系統(tǒng)需要進(jìn)入的runlevel;
捕獲組合鍵的定義;
定義電源fail/restore腳本;
啟動getty和虛擬控制臺;
得到配置信息后,SysV init順序地執(zhí)行以下這些步驟,從而將系統(tǒng)初始化為預(yù)訂的runlevelX:
/etc/rc.d/rc.sysinit
/etc/rc.d/rc和/etc/rc.d/rcX.d/(X代表運(yùn)行級別0-6)
/etc/rc.d/rc.local
XDisplayManager(如果需要的話)
1)rc.sysinit腳本功能
首先,運(yùn)行rc.sysinit以便執(zhí)行一些重要的系統(tǒng)初始化任務(wù)。在RedHat公司的RHEL5中(RHEL6已經(jīng)使用UpStart了),rc.sysinit主要完成以下這些工作:
激活udev和selinux;
設(shè)置定義在/etc/sysctl.conf中的內(nèi)核參數(shù);
設(shè)置系統(tǒng)時鐘;
加載keymaps;
激活交換分區(qū);
設(shè)置主機(jī)名(hostname);
根分區(qū)檢查和remount;
激活RAID和LVM設(shè)備;
開啟磁盤配額;
檢查并掛載所有文件系統(tǒng);
清除過期的locks和PID文件;
2)rc.d腳本
完成了以上這些工作之后,SysV init開始運(yùn)行/etc/rc.d/rc腳本。根據(jù)不同的runlevel,rc腳本將打開對應(yīng)runlevel的rcX.d目錄(X就是runlevel),找到并運(yùn)行存放在該目錄下的所有啟動腳本。每個runlevelX都有一個這樣的目錄,目錄名為/etc/rc.d/rcX.d。
在這些目錄下存放著很多不同的腳本。文件名以S開頭的腳本就是啟動時應(yīng)該運(yùn)行的腳本,S后面跟的數(shù)字定義了這些腳本的執(zhí)行順序。在/etc/rc.d/rcX.d目錄下的腳本其實都是一些軟鏈接文件,真實的腳本文件存放在/etc/init.d目錄下。如下所示:
rc5.d目錄下的腳本
代碼如下:
[root@www~]#ll/etc/rc5.d/
lrwxrwxrwx1rootroot16Sep42008K02dhcdbd->../init.d/dhcdbd
....(中間省略)....
lrwxrwxrwx1rootroot14Sep42008K91capi->../init.d/capi
lrwxrwxrwx1rootroot23Sep42008S00microcode_ctl->../init.d/microcode_ctl
lrwxrwxrwx1rootroot22Sep42008S02lvm2-monitor->../init.d/lvm2-monitor
....(中間省略)....
lrwxrwxrwx1rootroot17Sep42008S10network->../init.d/network
....(中間省略)....
lrwxrwxrwx1rootroot11Sep42008S99local->../rc.local
lrwxrwxrwx1rootroot16Sep42008S99smartd->../init.d/smartd
....(底下省略)....
當(dāng)所有的初始化腳本執(zhí)行完畢。SysV init運(yùn)行/etc/rc.d/rc.local腳本。
rc.local是Linux留給用戶進(jìn)行個性化設(shè)置的地方??梢园炎约核饺讼朐O(shè)置和啟動的東西放到這里,一臺LinuxServer的用戶一般不止一個,所以才有這樣的考慮。
(4)SysV init和系統(tǒng)關(guān)閉
SysV init不僅需要負(fù)責(zé)初始化系統(tǒng),還需要負(fù)責(zé)關(guān)閉系統(tǒng)。在系統(tǒng)關(guān)閉時,為了保證數(shù)據(jù)的一致性,需要小心地按順序進(jìn)行結(jié)束和清理工作。
比如應(yīng)該先停止對文件系統(tǒng)有讀寫操作的服務(wù),然后再umount文件系統(tǒng)。否則數(shù)據(jù)就會丟失。
這種順序的控制這也是依靠/etc/rc.d/rcX.d/目錄下所有腳本的命名規(guī)則來控制的,在該目錄下所有以K開頭的腳本都將在關(guān)閉系統(tǒng)時調(diào)用,字母K之后的數(shù)字定義了它們的執(zhí)行順序。
這些腳本負(fù)責(zé)安全地停止服務(wù)或者其他的關(guān)閉工作。
(5)SysV init的管理和控制功能
此外,在系統(tǒng)啟動之后,管理員還需要對已經(jīng)啟動的進(jìn)程進(jìn)行管理和控制。SysV init軟件包包含了一系列的控制啟動,運(yùn)行和關(guān)閉所有其他程序的工具。
halt停止系統(tǒng)。
init就是SysV init本身的init進(jìn)程實體,以pid1身份運(yùn)行,是所有用戶進(jìn)程的父進(jìn)程。最主要的作用是在啟動過程中使用/etc/inittab文件創(chuàng)建進(jìn)程。
killall5就是System V的killall命令。向除自己的會話(session)進(jìn)程之外的其它進(jìn)程發(fā)出信號,所以不能殺死當(dāng)前使用的shell。
last回溯/var/log/wtmp文件(或者-f選項指定的文件),顯示自從這個文件建立以來,所有用戶的登錄情況。
lastb作用和last差不多,默認(rèn)情況下使用/var/log/btmp文件,顯示所有失敗登錄企圖。
mesg控制其它用戶對用戶終端的訪問。
pidof找出程序的進(jìn)程識別號(pid),輸出到標(biāo)準(zhǔn)輸出設(shè)備。
poweroff等于shutdown-h–p,或者telinit0。關(guān)閉系統(tǒng)并切斷電源。
reboot等于shutdown–r或者telinit6。重啟系統(tǒng)。
runlevel讀取系統(tǒng)的登錄記錄文件(一般是/var/run/utmp)把以前和當(dāng)前的系統(tǒng)運(yùn)行級輸出到標(biāo)準(zhǔn)輸出設(shè)備。
shutdown以一種安全的方式終止系統(tǒng),所有正在登錄的用戶都會收到系統(tǒng)將要終止通知,并且不準(zhǔn)新的登錄。
sulogin當(dāng)系統(tǒng)進(jìn)入單用戶模式時,被init調(diào)用。當(dāng)接收到啟動加載程序傳遞的-b選項時,init也會調(diào)用sulogin。
telinit實際是init的一個連接,用來向init傳送單字符參數(shù)和信號。
utmpdump以一種用戶友好的格式向標(biāo)準(zhǔn)輸出設(shè)備顯示/var/run/utmp文件的內(nèi)容。
wall向所有有信息權(quán)限的登錄用戶發(fā)送消息。
不同的Linux發(fā)行版在這些SysV init的基本工具基礎(chǔ)上又開發(fā)了一些輔助工具用來簡化init系統(tǒng)的管理工作。比如RedHat的RHEL在SysV init的基礎(chǔ)上開發(fā)了initscripts軟件包,包含了大量的啟動腳本(如rc.sysinit),還提供了service,chkconfig等命令行工具,甚至一套圖形化界面來管理init系統(tǒng)。其他的Linux發(fā)行版也有各自的initscript或其他名字的init軟件包來簡化SysV init的管理。
只要理解了SysV init的機(jī)制,在一個最簡的僅有SysV init的系統(tǒng)下,可以直接調(diào)用腳本啟動和停止服務(wù),手動創(chuàng)建inittab和創(chuàng)建軟連接來完成這些任務(wù)。因此理解SysV init的基本原理和命令是最重要的。甚至也可以開發(fā)自己的一套管理工具。
到此,相信大家對“Linux系統(tǒng)中的SysVinit機(jī)制是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站題目:Linux系統(tǒng)中的SysVinit機(jī)制是什么-創(chuàng)新互聯(lián)
文章URL:http://jinyejixie.com/article24/csdice.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站排名、網(wǎng)站改版、網(wǎng)站營銷、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容