linux系统的运行定义在,Linux系统运行级管理
運行級的概念來自SystemV運行級別將啟動過程分成不同的集合每個集合包含一
組腳本當init程序切換運行級到對應的級別時相應的腳本就被觸發切換運行
級可以通過執行init[級別號]完成(比如在Linux中runlevel代表reboot所
以執行init就會引起系統重新啟動)
下面是一個標準的Linux的/etc/inittab注意這里解釋的內容來自redhat但是其他的
版本也大同小異我們將它分成若干段來解釋如同一般情況那樣用#開始的行是注釋
而非注釋行的語法是
標號運行級別操作方式命令
標號是這一行的標簽運行級別用于定義這一行應該用于那些級別如果為空就定義
為所有級別操作方式可以是一些確定的字符串代表如何執行后面的命令而命令則
給處在進入這一級別時執行的程序
下面是它的內容
#DefaultrunlevelTherunlevelsusedbyRHSare:
#halt(DoNOTsetinitdefaulttothis)
#Singleusermode
#MultiuserwithoutNFS(Thesameasifyoudonothavenetworking)
#Fullmultiusermode
#unused
#X
#reboot(DoNOTsetinitdefaulttothis)
#
上面的幾行解釋了缺省的運行級別定義
停機系統進入這一級別后關機
單用戶模式在這個模式中只能從控制臺操作計算機網絡和終端不啟動許多文件
系統也沒有連結
多用戶模式但關閉了網絡服務支持
完全的多用戶模式就是我們一般使用的模式
無定義
圖形界面模式系統切入這一運行級后自動啟動XWindow系統
重新啟動
這些級別的定義是任意的然而你最好不要修改它尤其是level和因為許多
程序都使用init之類的方式實現對系統的控制其他的Linux發行版本可能會更改
的定義你需要參考/etc/inittab才能判斷到底那個級別是什么意思不過一般來說
和6總是上面的定義
下面開始才是真正的內容首先系統必須定義缺省的運行級別
id::initdefault:
initdefault關鍵字決定了缺省的運行級別在這里是也就是在執行了公共的系統
啟動腳本之后系統將會執行與級別對應的那些行
#Systeminitialization
si::sysinit:/etc/rcd/rcsysinit
這里的sysinit關鍵字定義了公共的系統初始化腳本在相應于運行級的地方是空
表示適用于所有運行級別注意它將在系統進入任何運行級別以前完成一會我們再
研究這個腳本的內容
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
l::wait:/etc/rcd/rc
這里開出了六個運行級別的定義運行級就去執行命令/etc/rcd/rc運行級是
/etc/rcd/rc諸如此類wait關鍵字表示系統必須等待此命令執行完才能開始
下一步工作
#Thingstorunineveryrunlevel
ud::once:/sbin/update
這又是一個適用于所有級別的命令update命令實際是去啟動updated守護進程以便
定期刷新內存中的超級塊表Once關鍵字說明這個項只被執行一次
#TrapCTRLALTDELETE
ca::ctrlaltdel:/sbin/shutdowntrnow
ctrlaltdel定義當熱啟動組合鍵被觸發時系統的行為這里定義所有的運行級別對它
的響應都是重新啟動(shutdown–r)
pf::powerfail:/sbin/shutdownfh+"PowerFailure;SystemShuttingDown
"
pr::powerokwait:/sbin/shutdownc"PowerRestored;ShutdownCancelled
"
這兩行定義如何響應ups信息如果系統掉電(powerfail)執行兩分鐘后關機的指令
如果關機之前電源恢復取消關機操作
#Rungettysinstandardrunlevels
::respawn:/sbin/mingettytty
::respawn:/sbin/mingettytty
::respawn:/sbin/mingettytty
::respawn:/sbin/mingettytty
::respawn:/sbin/mingettytty
::respawn:/sbin/mingettytty
都是多用戶級別為系統開出個虛擬屏幕(就是用Alt+Fn即獲得虛擬屏幕)
respawn關鍵字表示這個動作在每次進入相應運行級別時都會執行
#Runxdminrunlevel
#xdmisnowaseparateservice
x::respawn:/etc/X/prefdmnodaemon
對于級別啟動圖形界面
歸納一下系統在讀入inittab以后要做什么?設置Ctrl+Alt+Del響應設置好對UPS
的支持然后應該執行/etc/rcd/rcsysinit然后是/etc/rcd/rc最后是update
和啟動虛擬屏幕顯然系統的主要初始化命令應該在/etc/rcd/rcsysinit和/etc/r
cd/rc中完成
rcd下的基本腳本
下面我們來研究啟動腳本這里的腳本來自redhat因為這是個最為廣泛使用的
版本其他的版本的特有問題將在下一節討論
首先系統將執行/etc/rcd/rcsysinit這是個shell腳本你可以用普通的文本編
輯工具對它進行處理為了簡便我們只研究其中較為重要的部分或者較為典型的段落
#!/bin/sh
#
#/etc/rcd/rcsysinitrunonceatboottime
#
#TakeninpartfromMiquelvanSmoorenburgsbcheckrc
#
#Rerunourselvesthroughinitlog
if[z"$IN_INITLOG"];then
[f/sbin/initlog]&&exec/sbin/initlog$INITLOG_ARGSr/etc/rcd/rc
sysinit
fi
首先確定系統中是否存在/sbin/initlog文件如果存在那么需要記錄初始化信息
#Setthepath
PATH=/bin:/sbin:/usr/bin:/usr/sbin
exportPATH
設置缺省路徑
#Readinconfigdata
if[f/etc/sysconfig/network];then
/etc/sysconfig/network
else
NETWORKING=no
HOSTNAME=localhost
fi
這一段是網絡的參數設置/etc/sysconfig/network的內容是這樣
NETWORKING=yes
FORWARD_IPV="yes"
HOSTNAME="openlabasnceducn"
GATEWAY=""
GATEWAYDEV=""
顯然如果這個文件存在那么設置網絡的運行參數如域名網關等等這個文件
中可以包含很多的東西詳細的內容我們在設置網絡的部分介紹
#Sourcefunctions
/etc/rcd/initd/functions
/etc/rcd/initd是所有的服務腳本存放的地方而functions是各種服務腳本需要的
一些參數的設置有興趣的話你可以看一看不看也不影響什么
以下有一段是設置一些顯示信息接下來是這樣的內容
#Mount/proc(doneheresovolumelabelscanworkwithfsck)
action"Mountingprocfilesystem"mountntproc/proc/proc
連結/proc文件系統應該記得/proc是用來顯示系統狀態的虛擬文件系統注意acti
on命令的語法它顯示一段提示信息然后去執行相應的命令
然后的段落有一點意思
#Turnoffsysrq
#if["$MAGIC_SYSRQ"="no"];then
#echo"">/proc/sys/kernel/sysrq
#fi
$MAGIC_SYSRQ=no意味著你決定不使用內核調試腳本必須把系統的內核調試功能關閉
注意接下來的處理方法在/proc/sys/kernel下建立一個名叫sysrq的文件并且設置
其內容為""就關閉了這項功能這也是在運行中打開或者關閉內核的某個功能的標準
方法以后我們會經常看到這樣的例子
接下來要設置時鐘和鍵盤映射表裝入系統字體又是一段冗長的代碼這里將它省
略反正你總可以在自己的系統上看到他們
#Startupswapping
action"Activatingswappartitions"swapona
swapon–a將讀/etc/fstab文件這個文件中包含有系統中存在的應該自動掛接的各
種文件系統的列表同時也包含了關于交換分區的知識swapon–a將啟動其中標注的
所有交換分區
#Setthehostname
action"Settinghostname${HOSTNAME}"hostname${HOSTNAME}
#SettheNISdomainname
if[n"$NISDOMAIN"];then
action"SettingNISdomainname$NISDOMAIN"domainname$NISDOMAIN
else
domainname""
fi
這兩段設置系統名字我們應該記得$HOSTNAME已經在/etc/sysconfig/network文件中
設置過所以這里的action被執行而$NISDOMAIN現在是空字符串所以執行后hostna
me被設置而NIS域名不存在
if[f/fsckoptions];then
fsckoptions=`cat/fsckoptions`
else
fsckoptions=
fi
if[f/forcefsck];then
fsckoptions="f$fsckoptions"
fi
這里是與管理員相關的行了如果系統的/下將存在/forcefsck文件于是系統自動啟
動fsck程序去檢查文件系統是否有錯誤接下來是一段關于是否存在/fastboot文件的判
斷與其大同小異然后系統將會決定是否啟用PNP方法和處理MAGIC_SYSRQ是類似的
這兩段我們不討論了你可以自己看一下
#Remounttherootfilesystemreadwrite
action"Remountingrootfilesysteminreadwritemode"mountnoremount
rw/
#Add/procto/etc/mtab
mountftproc/proc/proc
檢測根文件系統完畢后系統重新將/連結成讀寫方式并且將/proc加入到/etc/mta
b中下面是非常重要的一步如果系統內核支持可裝載模塊需要把$USEMODULES變量
設置成"y"并且設置模塊的缺省路徑參數等等然后系統開始裝入模塊
#loadsoundmodules
if[n"$USEMODULES"];then
ifgrepsq"^aliassound"/etc/confmodules;then
action"Loadingsoundmodule"modprobesound
fi
fi
當這些直接裝入的模塊結束后為了和以前的方式兼容也為了管理員的方便這個
腳本試圖去尋找/etc/rcd/rcmodules如果存在就執行它
#Loadmodules(forbackwardcompatibilitywithVARs)
if[f/etc/rcd/rcmodules];then
/etc/rcd/rcmodules
fi
顯然你可以將自己的模塊初始化命令加入/etc/rcd/rcmodules使它在啟動時得到
運行
完成主要模塊的裝入后系統將開始一系列日常工作如檢測有問題的文件系統連
結所有本地文件系統啟動磁盤限額等等如果系統還沒有被配置那么將啟動配置腳
本設置網絡超級用戶口令等等否則對于已經配置好的系統清理記賬文件準
備進行系統工作
當一切都完成之后系統按照inittab的設定進入運行級執行/etc/rcd/rc
/etc/rcd/rc是一個很有意思的程序它是一個shell腳本其行為是這樣根據提供
給它的參數它去尋找相應的目錄rc${arg}d例如在/etc/rcd/rc執行時它去
查詢/etc/rcd/rcd下的所有文件試圖執行那些所有用S或K打頭的腳本凡是用S開
頭的腳本它給加上一個start參數凡是用K打頭的腳本加上一個stop參數執行次
序是按照S或K后跟的數值順序
例如在現在的例子中/etc/rcd/rc下存在一個Sinet的腳本于是rc腳本去
執行Sinetstart而Sinet其實是到/etc/rcd/initd/inet的一個符號連結其內
容是(這里只給出了部分內容)
/etc/rcd/initd/functions
/etc/sysconfig/network
if[${NETWORKING}="no"]
then
exit
fi
[f/usr/sbin/inetd]||exit
RETVAL=
#Seehowwewerecalled
case"$"in
start)
echon"StartingINETservices:"
daemoninetd
RETVAL=$?
echo
[$RETVALeq]&&touch/var/lock/subsys/inet
;;
stop)
echon"StoppingINETservices:"
killprocinetd
RETVAL=$?
echo
[$RETVALeq]&&rmf/var/lock/subsys/inet
;;
*)
echo"Usage:inet{start|stop|status|restart|reload}"
exit
esac
exit$REVAL
daemon和killproc是在/etc/rcd/initd/functions里面定義的函數daemon將命令
當成守護進程執行killproc則殺掉對應進程顯然Sinetstart的結果是inetd程
序被啟動為一個守護進程
這里的方法是啟動服務進程的標準模式例如你要設置某個服務在runlevel被啟動
那么你可以自己寫一個腳本比如說mydaemon讓mydaemonstart啟動服務mydaem
onstop停止服務然后將這個腳本復制到/etc/rcd/initd中接著在/etc/rcd/rc?
d中建立連接在rcd中連結為Smydaemon而在其他目錄中為Kmydaemon這樣你
的腳本就會在進入和退出運行級時自動處理了
除此與runlevel相關的啟動指令之外Linux還從BSD中引入了另外一些配置文件其
中最重要的是/etc/rcd/rclocal通常它在執行了全部運行級腳本以后運行你可以
在這里定制自己的設置如歡迎信息等等
版本之間的區別
如同我們看到的那樣Redhat的啟動腳本看上去井井有條要尋找某個功能很容易
但是要尋找某個命令在何處啟動就顯得比較困難經常需要從/etc/inittab開始
TurboLinux和RedFlag的腳本和Redhat頗為相似尤其是紅旗幾乎就是RedHat的中文
版它們的配置也相當近似
Slackware的啟動腳本使用另外一種風格實際上看上去很象BSD系列啟動腳本也
在/etc/rcd下面但是它把一些在大部分運行級別必須使用的腳本做在了一起冠以r
cmodulesrcinetrcinet等等的名字這樣對于手工配置系統確實簡單的多不
過這些文件都相當大看起來需要耐心對于這個系統你只要看一遍/etc/inittab就
能掌握它的配置文件位置了
Debian/Corel使用一種有趣的方式看上去頗像Sun的Solaris實際上它和RedHat
的方式幾乎是一樣的但是啟動腳本不是在/etc/rcd而是直接位于/etc下例如/et
c/rcd/etc/rcd等等知道了這一點之后配置debian就不會感到困難了
總結
以上是生活随笔為你收集整理的linux系统的运行定义在,Linux系统运行级管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三阶魔方CFOP cross总结
- 下一篇: 简单的绑定数据截取时间字符年月日