理解Linux系統/etc/init.d目錄和/etc/rc.local指令碼(轉)
原連結;http://blog.csdn.net/acs713/article/details/7322082
一、關於/etc/init.d
如果你使用過linux系統,那麼你一定聽說過init.d目錄。這個目錄到底是幹嘛的呢?它歸根結底只做了一件事情,但這件事情非同小可,是為整個系統做的,因此它非常重要。init.d目錄包含許多系統各種服務的啟動和停止指令碼。它控制著所有從acpid到x11-common的各種事務。當然,init.d遠遠沒有這麼簡單。(譯者注:acpid 是linux作業系統新型電源管理標準 ;X11也叫做X Window系統,X Window系統 (X11或X)是一種點陣圖顯示的 視窗系統 。它是在 Unix 和
類Unix
當你檢視/etc目錄時,你會發現許多rc#.d 形式存在的目錄(這裡#代表一個指定的初始化級別,範圍是0~6)。在這些目錄之下,包含了許多對程序進行控制的指令碼。這些指令碼要麼以"K"開頭,要麼以"S"開頭。以K開頭的指令碼執行在以S開頭的指令碼之前。這些指令碼放置的地方,將決定這些指令碼什麼時候開始執行。在這些目錄之間,系統服務一起合作,就像執行狀況良好的機器一樣。然而,有時候你希望能在不使用kill 或killall 命令的情況下,能幹淨的啟動或殺死一個程序。這就是/etc/init.d能夠派上用場的地方了!
如果你在使用Fedora系統,你可以找到這個目錄:/etc/rc.d/init.d。實際上無論init.d放在什麼地方,它都發揮著相同的作用。
為了能夠使用init.d目錄下的指令碼,你需要有root許可權或sudo許可權。每個指令碼都將被作為一個命令執行,該命令的結構大致如下所示:
/etc/init.d/command 選項
comand是實際執行的命令,選項可以有如下幾種:
- start
- stop
- reload
- restart
- force-reload
大多數的情況下,你會使用start,stop,restart選項。例如,如果你想關閉網路,你可以使用如下形式的命令:
/etc/init.d/networking stop
又比如,你改變了網路設定,並且需要重啟網路。你可以使用如下命令:
/etc/init.d/networking restart
init.d目錄下常用初始化指令碼有:
- networking
- samba
- apache2
- ftpd
- sshd
- dovecot
- mysql
當然,你可能有其他更多常用的指令碼,這個取決於你安裝了什麼linux作業系統。
二、關於/etc/rc.local
rc.local也是我經常使用的一個指令碼。該指令碼是在系統初始化級別指令碼執行之後再執行的,因此可以安全地在裡面新增你想在系統啟動之後執行的指令碼。常見的情況是你可以再裡面新增nfs掛載/mount指令碼。此外,你也可以在裡面新增一些除錯用的指令碼命令。例如,我就碰到過這種情況:samba服務總是無法正常執行,而檢查發現,samba是在系統啟動過程中就該啟動執行的,也就是說,samba守護程式配置保證了這種功能本應該正確執行。碰到這種類似情況,一般我也懶得花大量時間去查為什麼,我只需要簡單的在/etc/rc.local腳本里加上這麼一行:
/etc/init.d/samba start
這樣就成功的解決了samba服務異常的問題。
三、總結
Linux是靈活的。正因為它的靈活性,我們總是可以找到許多不同的辦法來解決同一個問題。啟動系統服務的例子就是一個很好的佐證。有了/etc/init.d目錄下的指令碼,再加上/etc/rc.local這個利器,你可以放心的確保你的服務可以完美的啟動和執行。