天天看點

linux不啟動修改rcs檔案,Linux啟動腳本rcS

1. 寫在前面

Linux系統作為一個進階系統,其排程機理、排程鍊路非常複雜,僅僅是初啟動階段就非常複雜。如果要深究Linux系統的啟動服務,需要了解Linux系統原理、檔案管理、腳本連結等。但,如果是作為初學者,以“使用”為目的時,比如“期望在系統啟動的時候自動執行指定程式”,則隻需知道如何配置啟動腳本即可。正比如,學開車,一開始并不需要知道發動機是如何工作的,會操控即可。

2. 啟動腳本

2.1 檔案位置

Linux啟動腳本,即rcS檔案。rcS檔案位于系統根目錄下的“/etc/init.d”下,可以檢視到該檔案的檔案屬主和檔案屬組都是root,隻有root的權限可以修改和執行。

linux不啟動修改rcs檔案,Linux啟動腳本rcS

2.2 rcS檔案格式

rcS檔案本質是一個bash shell腳本,是以遵循bash腳本的文法規則。bash shell也是一門複雜的語言,深入研究可以獨立出來研究,但我們知道基本的規則即可滿足我們應用。

[1]檔案首行必須為“#!  /bin/sh”。

[2] 注釋一行用“#”。

[3]基本的指派語句,如列印字元串。

[4] 列印特殊符号需加“\”。

[5] 邏輯語句、循環語句等。

2.3 實作功能

啟動腳本可以做很多事情,隻要我們需要初始化時配置或者執行的功能,幾乎都滿足,總結幾點下來及常用的有如下幾種。

[1] 啟動某個程序程式,最常用的,如啟動序列槽收發程序。

[2] 加載驅動子產品(.ko檔案);如驅動編譯成子產品時,可以在這裡增加加載(insmod/modprobe)驅動子產品指令。

[3] 啟動其他子產品啟動腳本,如網絡服務。

[4] 配置功能,該項功能比較實用,實作期望系統起來後進行某些配置,如:配置環境變量、建立臨時檔案(夾)、挂在檔案到指定檔案夾、設定預設IP參數,以及配置系統主機名稱等基礎配置。

[5]其他,如增加列印功能,友善在調試終端(序列槽)檢視初始化過程,或者兩者執行間進行延時(sleep)等。

3.一個簡單的rcS檔案示例分析

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

//将mdev設為熱插拔的監視程式,可以形象的了解為将mdev寫入hotplug中

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s //掃描并建立所有裝置

/bin/hostname -F /etc/sysconfig/HOSTNAME

ifconfig eth0 192.168.1.10

1.PATH=xxx

(1)首先從shell腳本的文法角度分析,這一行定義了一個變量PATH,值等于後面的字元串

(2)後面用export導出了這個PATH,那麼PATH就變成了一個環境變量。

(3)PATH這個環境變量是linux系統内部定義的一個環境變量,含義是作業系統去執行程式時會預設到PATH指定的各個目錄下去尋找。如果找不到就認定這個程式不存在,如果找到了就去執行它。将一個可執行程式的目錄導出到PATH,可以讓我們不帶路徑來執行這個程式。

(4)rcS中為什麼要先導出PATH?就是因為我們希望一旦進入指令行下時,PATH環境變量中就有預設的/bin /sbin /usr/bin /usr/sbin 這幾個常見的可執行程式的路徑,這樣我們進入指令行後就可以ls、cd等直接使用了。

(5)為什麼我們的rcS檔案還沒添加,系統啟動就有了PATH中的值?原因在于busybox自己用代碼寫死為我們導出了一些環境變量,其中就有PATH。

2、runlevel=

(1)runlevel也是一個shell變量,并且被導出為環境變量。

(2)runlevel這個環境變量到底有什麼用?

(3)runlevel=S表示将系統設定為單使用者模式

3、umask=

(1)umask是linux的一個指令,作用是設定linux系統的umask值。

(2)umask值決定目前使用者在建立檔案時的預設權限。

4、umask測試

(1)umask是022的時候,預設touch建立一個檔案的權限是644

(2)umask是044的時候,預設touch建立一個檔案的權限是622

(3)umask是444的時候,預設touch建立一個檔案的權限是222

總結:umask的規律就是:umask值和預設建立檔案的權限值加起來是666.

5、mount -a

(1)mount指令是用來挂載檔案系統的

(2)mount -a是挂載所有的應該被挂載的檔案系統,在busybox中mount -a時busybox會去查找一個檔案/etc/fstab檔案,這個檔案按照一定的格式列出來所有應該被挂載的檔案系統(包括了虛拟檔案系統)

6、mdev

(1)mdev是udev的嵌入式簡化版本,udev/mdev是用來配合linux驅動工作的一個應用層的軟體,udev/mdev的工作就是配合linux驅動生成相應的/dev目錄下的裝置檔案。

(2)因為這個問題涉及到驅動,是以詳細講解要等到驅動部分。這裡我們隻是通過一些直覺的現象來初步了解udev/mdev的工作效果。

(3)在rcS檔案中沒有啟動mdev的時候,/dev目錄下啟動後是空的;在rcS檔案中添加上mdev有關的2行配置項後,再次啟動系統後發現/dev目錄下生成了很多的裝置驅動檔案。

(4)/dev目錄下的裝置驅動檔案就是mdev生成的,這就是mdev的效果和意義。

7、hostname

(1)hostname是linux中的一個shell指令。指令(hostname xxx)執行後可以用來設定目前系統的主機名為xxx,直接hostname不加參數可以顯示目前系統的主機名。

(2)/bin/hostname -F /etc/sysconfig/HOSTNAME -F來指定了一個主機名配置檔案(這個檔案一般檔案名叫hostname或者HOSTNAME)

8、ifconfig

(1)有時候我們希望開機後進入指令行時ip位址就是一個指定的ip位址(譬如192.168.1.30),這時候就可以在rcS檔案中ifconfig eth0 192.168.1.30