基礎命令學習目錄首頁
html
init是Linux系統操做中不可缺乏的程序之一。init進程,它是一個由內核啓動的用戶級進程,而後由它來啓動後面的任務,包括多用戶環境,網絡等。mysql
內核會在過去曾使用過init的幾個地方查找它,它的正確位置(對Linux系統來講)是/sbin/init。若是內核找不到init,它就會試着運行/bin/sh,若是運行失敗,系統的啓動也會失敗。linux
根據實際看一下,咱們來到/boot下,sql
能夠看見,Grub就在這裏,vmlinuz-2.6.32-358.el6.i686這個文件很重要,說通俗一點的話應該是咱們的內核,在啓動後加載全部驅動(這個有另外的章節再講,這裏不詳述)。另外initramfs-2.6.32-358.el6.i686.img是啓動init進程的一個鏡像文件,包含一個最小的linux系統。服務器
Linux內核在初始化以後會執行init進程,而init進程會掛載咱們的根文件系統,但因爲init程序也是在根文件系統上的,因此這就有了悖論。Linux採用兩步走的方法來解決這個問題。Linux2.6版之前的方法是:除了內核vmlinuz以外還有一個獨立的initrd.img映像文件,其實它就是一個文件系統映像,linux內核在初始化後會mount initrd.img做爲一個臨時的根文件系統,而init進程就是在initrd.img裏的,而後init進程會掛載真正的根文件系統,而後umount initrd.img。但Linux2.6內核的實現方式卻不太同樣,雖然完成的功能是同樣的。Linux2.6採用initramfs。initramfs:init ram filesystem,它是一個cpio格式的內存文件系統,其實這部分也有不少內容能夠講,咱們之後再談。網絡
一般的步驟是先啓動內核,而後內核掛載initrd.img,並執行裏面的腳原本進一步掛載各類各樣的模塊,而後發現真正的root分區,掛載並執行/sbin/init。ssh
若是沒有這個文件,計算機的啓動時第一個進程都啓動不起來。有他存在1號進程才能夠開啓。至關因而一個指揮官,他要指揮哪些程序在啓動時應當存在,哪些程序不該當存在。/etc/inittab文件是init在啓動時讀取的文件,也就是指揮官的決策書,這個決策書規定了當前戰爭的局勢,好比和平局勢、冷戰局勢、戰爭局勢。以及該局勢下的核心策略。init就是這樣,經過inittab這個文件控制了計算機的啓動級別,及該級別下啓動的進程。svn
[root@hao boot]# cat /etc/inittab # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
從這裏能夠看出,我這裏linux的default啓動級別是runevel 5(注意,此處不要擅自改成6,若是默認的runlevel是6,那麼就會比較麻煩,爲何會這麼說,看完下面每一個級別具體對應的進程就會明白)。那麼具體每一個級別都是什麼呢?其實每一個級別都有若干個進程,只不過每一個級別開的進程不一樣。post
0:幾乎全部進程都關閉,停機狀態學習
1:單用戶模式,root帳戶進行操做
2:多用戶,不能使用net file system,通常不多用
3:徹底多用戶,一部分啓動,一部分不啓動,命令行界面
4:未使用、未定義的保留模式
5:圖形化,3級別中啓動的進程都啓動,而且會啓動一部分圖形界面進程。
6:中止全部進程,卸載文件系統,從新啓動
這些級別中一、二、4不多用,相對而言0、三、五、6用的會較多。3級別和5級別除了桌面相關的進程外沒有什麼區別。爲了減小資源佔用,推薦都用3級別。
那麼這些級別是如何定義的呢,在/etc/rc.d/目錄內,有以下目錄。
[root@Hao rc.d]# ll total 60 drwxr-xr-x. 2 root root 4096 Mar 11 13:44 init.d -rwxr-xr-x. 1 root root 2617 Feb 22 2013 rc drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc0.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc1.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc2.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc3.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc4.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc5.d drwxr-xr-x. 2 root root 4096 Apr 3 08:36 rc6.d -rwxr-xr-x. 1 root root 220 Feb 22 2013 rc.local -rwxr-xr-x. 1 root root 19472 Feb 22 2013 rc.sysinit
在諸如rc3.d和rc5.d目錄下有runlevel 3 和runlevel 5中容許和不容許啓動的進程,
再進去目錄看一下。
[root@Hao rc.d]# ls rc3.d/ K01smartd K69rpcsvcgssd S10network S26acpid K02oddjobd K73winbind S11auditd S26haldaemon K05wdaemon K75ntpdate S11portreserve S26udev-post K10psacct K75quota_nld S12rsyslog S28autofs K10saslauthd K76ypbind S13cpuspeed S50bluetooth K15htcacheclean K80kdump S13irqbalance S58ntpd K15httpd K84wpa_supplicant S13rpcbind S80postfix K15svnserve K87restorecond S15mdmonitor S82abrt-ccpp K25sshd K88sssd S22messagebus S82abrtd K30spice-vdagentd K89rdisc S23NetworkManager S90crond K36mysqld K95firstboot S24nfslock S95atd K50dnsmasq K99rngd S24rpcgssd S99certmonger K50netconsole S01sysstat S24rpcidmapd S99local K50snmpd S02lvm2-monitor S25blk-availability K50snmptrapd S08ip6tables S25cups K60nfs S08iptables S25netfs
root@Hao rc.d]# ls rc5.d/ K01smartd K75ntpdate S11portreserve S26udev-post K02oddjobd K75quota_nld S12rsyslog S28autofs K05wdaemon K76ypbind S13cpuspeed S50bluetooth K10psacct K80kdump S13irqbalance S55sshd K10saslauthd K84wpa_supplicant S13rpcbind S58ntpd K15htcacheclean K87restorecond S15mdmonitor S70spice-vdagentd K15httpd K88sssd S22messagebus S80postfix K15svnserve K89rdisc S23NetworkManager S82abrt-ccpp K36mysqld K95firstboot S24nfslock S82abrtd K50dnsmasq K99rngd S24rpcgssd S90crond K50netconsole S01sysstat S24rpcidmapd S95atd K50snmpd S02lvm2-monitor S25blk-availability S99certmonger K50snmptrapd S08ip6tables S25cups S99local K60nfs S08iptables S25netfs K69rpcsvcgssd S10network S26acpid K73winbind S11auditd S26haldaemon
這些都是連接文件lrwxrwxrwx,連接的路徑都是/etc/init.d中的腳本文件。
[root@Hao rc.d]# ll rc3.d/ | grep ab lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S08ip6tables -> ../init.d/ip6tables lrwxrwxrwx. 1 root root 18 Feb 10 19:44 S08iptables -> ../init.d/iptables lrwxrwxrwx. 1 root root 26 Feb 10 19:51 S25blk-availability -> ../init.d/blk-availability lrwxrwxrwx. 1 root root 19 Feb 10 19:46 S82abrt-ccpp -> ../init.d/abrt-ccpp lrwxrwxrwx. 1 root root 15 Feb 10 19:46 S82abrtd -> ../init.d/abrtd
K開頭的文件意味着是要關閉進程的文件,S開頭的進程則是開啓的進程,以後的數字表示啓動的順序,好比S23NetworkManager和S80postfix都要依賴S10network,若是這個順序錯了或者電腦了,那麼和網絡有關的程序都會啓動錯誤,這個也在管理服務器的過程當中也須要按期去看一下。
對比rc3.d/目錄與rc5.d/
[root@Hao rc.d]# diff rc3.d/ rc5.d/ Only in rc3.d/: K30spice-vdagentd Only in rc5.d/: S70spice-vdagentd
發現spice-vdagentd服務在runlevel 3中是KILL的,在runleve5是START的,spice-vdagentd服務是Redhat桌面虛擬組件之一,因此在runlevel3中不必開,在runleve5中是要開啓的,不然Linux將沒法提供桌面服務,除此以外,兩個運行級別沒區別。
還記得那個以前提到的決策書嗎?核心策略對應的會啓動的內容都是在這裏,好比和平局勢(之於runlevel 1)下啓用基本的民防系統(之於S01sysstat)就能夠了,冷戰時期(之於runlevel 3)除了民防之外,還開啓了自衛系統(之於S08iptables)、消息傳遞(S10network)、警報機制(之於S22messagebus)、派遣間諜(之於sshd)、調動步兵部隊(之於httpd)等等,若是是戰爭時期(之於runlevel 5)除了上面種種以外還要啓動更多的戰爭活動,調度更強大的部隊。
經過chkconfig –level 3 sshd off在運行級別中的開啓或者關閉服務。
經過chkconfig –list sshd來查看sshd在全部runlevel中的狀態。
[root@Hao rc.d]# chkconfig --list sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@Hao rc.d]# chkconfig --level 3 sshd off [root@Hao rc.d]# chkconfig --list sshd sshd 0:off 1:off 2:on 3:off 4:on 5:on 6:off
init 6是重啓,init 0是關機。
# who –r 查看當前級別
run-level 5 2012-09-02 06:23
經過查看 /etc/rc.d/rc6.d能夠看到,runlevel 6中只有兩個服務是開啓的,分別是 S00killall和S01reboot,若是默認的運行級別設爲6,那麼重啓以後,機器會不停重啓。
若是真的意(shou)外(jian)把默認的runlevel運行級別設置成了6,那麼須要以下操做更改默認運行級別。在GRUB界面按e
而後選中第二行,再按e進入
在出現的命令行後加 [\空格]1 (單用戶),按Enter鍵確認操做並後退到Linux配置頁面
再按b重啓Linux進入單用戶模式就能夠修改了,咱們這裏改成3好了。而後重啓就能夠了。
Linux啓動這個很不經意的過程裏面包含了太多的內容,本文只是介紹了很小的一部分,推薦你們去深刻了解,順便推薦幾篇還不錯的文章。
rc.d rc.local rc.sysinit 等Linux系統腳本啓動順序詳解 做者:jsxubar (朱秀龍)
Linux2.6 內核的 Initrd 機制解析 做者: dazhi.li(李 大治)
原文連接:https://www.cnblogs.com/LinuxBlogs/p/4389415.html