/etc/rc.d/init.d和/etc/init.d 聯繫區別

轉自 http://blog.sina.com.cn/s/blog_4b0a626701009mak.html

轉自: http://blog.163.com/fan_yishan/blog/static/4769221320117151727450/

$ ls -ld /etc/rc.d drwxr-xr-x 10 root root 352 2月 13 13:38 /etc/rc.d/ $ ls -ld /etc/init.d lrwxrwxrwx 1 root root 11 2月 13 13:38 /etc/init.d -> rc.d/init.d/
一個是另外一個的軟鏈接吧
etc/rc.d/init.d裏面包含了一些腳本,這些腳本供INIT進程(也就是1號進程)在系統從初始化的時候按照該進程獲取的開機運行等級,有選擇的運行init.d裏的腳本。這些一般是系統安裝好的軟件
運行級別,決定了系統啓動之後運行於什麼級別。這個級別從0到6 ,具有不同的功能。停機的級別爲0,重新啓動的級別爲6。
它的值由init進程上來去讀取/etc/目錄下inittab文件中initdefault id值獲得。
一般的linux系統X11圖形界面的運行級別是5。
通常所說的rc就是 run control的意思。
看 /etc/inittab  
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <[email protected]>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS 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:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
紅色的部分指定 運行級別 ,5 是x11模式,就是進圖形界面的,1是字符界面的。
各個級別對應的調用 /etc/rc.d/rcX.d/裏面的命令。
如級別5就調用 /etc/rc.d/rc5.d/裏的命令,裏面以S打頭的代表start時候運行的命令,K打頭的代表shutdown的時候運行的命令。
數字小的先於數字大的執行, 如S01sysstat在S05kudzu前面執行。
/etc/init.d裏的命令應該只是 /etc/rc.d/rcX.d/裏的命令用到的鏈接。


轉自 http://hi.baidu.com/fwind1/blog/item/24bf6e0279c6a00e738da5c1.html

/etc/init.d指向/etc/rc.d/init.d目錄

linux /etc/rc.d/目錄的詳解

rc.d的內容如下: 
init.d/ :各種服務器和程序的二進制文件存放目錄。 
rcx.d/: 各個啓動級別的執行程序連接目錄。裏頭的東西都是指向init.d/的一些軟連接。具體的後邊敘述。 
還有三個腳本:rc.sysinit, rc, rc.local

redhat的啓動方式和執行次序是: 
加載內核 
執行init程序 
/etc/rc.d/rc.sysinit # 由init執行的第一個腳本 
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL爲缺省的運行模式 
/etc/rc.d/rc.local 
/sbin/mingetty # 等待用戶登錄

在Redhat中,/etc/rc.d/rc.sysinit主要做在各個運行模式中相同的初始化工作,包括: 
調入keymap以及系統字體 
啓動swapping 
設置主機名 
設置NIS域名 
檢查(fsck)並mount文件系統 
打開quota 
裝載聲卡模塊 
設置系統時鐘 
等等。


/etc/rc.d/rc則根據其參數指定的運行模式(運行級別,你在inittab文件中可以設置)來執行相應目錄下的腳本。凡是以Kxx開頭的,都以stop爲參數來調用;凡是以Sxx開頭的,都以start爲參數來調用。調用的順序按xx 從小到大來執行。例如,假設缺省的運行模式是3,/etc/rc.d/rc就會按上述方式調用/etc/rc.d/rc3.d/下的腳本。 
值得一提的是,Redhat中的運行模式2、3、5都把/etc/rc.d/rc.local做爲初始化腳本中的最後一個,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之後,登錄之前執行的命令。

init在等待/etc/rc.d/rc執行完畢之後(因爲在/etc/inittab中/etc/rc.d/rc的action是wait),將在指定的各個虛擬終端上運行/sbin/mingetty,等待用戶的登錄。 
至此,LINUX的啓動結束。

最後自己補充一些:

1. 許多網絡服務都由超級服務/etc/rc.d/init.d/xinetd啓動,這些服務的配置文件在/etc/xinetd.d/目錄下,

如telnet就是由xinetd啓動的,其配置文件如下(fc7)

1 # default: on
2 # description: The telnet server serves telnet sessions; it uses \
3 #   unencrypted username/password pairs for authentication.
4 service telnet
5 {
6     flags       = REUSE
7     socket_type = stream
8     wait        = no
9     user        = root
10     server      = /usr/sbin/in.telnetd
11     log_on_failure += USERID
12     disable     = no
13 }
修改配置文件以後,重啓xinetd服務即可.

2. 除了直接調用腳本外(如/etc/rc.d/init.d/xinetd),還可以用service命令來控制init.d目錄下的服務,

     如 service xinetd restart,

轉自 http://hi.baidu.com/ueszx/blog/item/93d4e3f0de6d02ce7831aa61.html

/etc/rc.d/與/etc/rc.d/init.d的關係 (轉)

在這裏先解釋一下init.d裏面放的都是什麼東西。這個目錄存放的是一些腳本,一般是linux以rpm包安裝時設定的一些服務的啓動腳本。系統在安裝時裝了好多rpm包,這裏面就有很多對應的腳本。執行這些腳本可以用來啓動,停止,重啓這些服務。
前面說到,/etc/rc.d/init.d這個目錄下的腳本就類似與windows中的註冊表,在系統啓動的時候執行。程序運行到這裏(init進程讀取了運行級別),相信從命名的角度大家也能猜到該運行/etc/rc.d/init.d裏面的腳本了,不然它爲什麼也叫init(.d)呢是吧。沒錯,是該運行init.d裏的腳本了,但是並不是直接運行,而是有選擇的因爲系統並不需要啓動所有的服務。
    那麼,系統是如何選擇哪些需要啓動哪些不要呢?這時剛纔說的運行級別就起作用了。
    在決定了系統啓動的run level之後,/etc/rc.d/rc這個腳本先執行。在RH9和FC7的源碼中它都是一上來就check_runlevel()(雖然實現的代碼不一樣,也大同小異),知道了運行級別之後,對於每一個運行級別,在rc.d下都有一個子目錄分別是rc0.d,rc1.d ….. rc6.d。每個目錄下都是到init.d目錄的一部分腳本一些鏈接。每個級別要執行哪些服務就在相對應的目錄下,比如級別5要啓動的服務就都放在 rc5.d下,但是放在這個rc5.d下的都是一些鏈接文件,鏈接到init.d中相對應的文件,真正幹活的init.d裏的腳本。

到這裏,估計大家可能都比較清楚了,我開始也以爲是這樣的。可是後來我仔細看過和比較這些鏈接文件和init.d裏真正被執行的腳本的文件名之後,一直有幾個問題沒弄明白。藉着寫這個文章的機會,我做了一些功課,總算是大概解開了那些疑惑。
1、這些鏈接文件前面爲什麼會帶一個Kxx或者Sxx呢?
    是這樣的,帶K的表示停止(Kill)一個服務,S表示開啓(Start)的意思
2、K和S後面帶的數字呢?幹什麼用的
    這個我開始的時候還以爲是排列起來好看或者數數用呢(是不是很幼稚?)。後來發現不是的。它的作用是用來排序,就是決定這些腳本執行的順序,數值小的先執行,數值大的後執行。很多時候這些執行順序是很重要的,比如要啓動Apache服務,就必須先配置網絡接口,不然一個沒有IP的機子來啓動http服務那豈不是很搞笑。。。
3、無意中我發現同一個服務帶S的和帶K的鏈接到init.d之後是同一個腳本。我就納悶了,爲什麼會是執行同一個腳本呢?
    這個時候真是S和K的妙用了,原來S和K並不止是用來看起來分的清楚而已。S給和K還分別給init.d下面的腳本傳遞了start和stop的參數。哦,是這樣的(煥然大悟的樣子,呵呵)!這時我纔想起來原來曾經無數用過的/etc/rc.d/init.d/network restart命令。原來傳S時相當於執行了/etc/rc.d/init.d/xxx start這條命令,當然K就相當於/etc/rc.d/init.d/xxx stop了。

補充:也可以修改rc.local達到自啓動的目的,但是rc.local是最後執行的自啓動配置文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章