1. 寫在前面
Linux系統作為一個進階系統,其排程機理、排程鍊路非常複雜,僅僅是初啟動階段就非常複雜。如果要深究Linux系統的啟動服務,需要了解Linux系統原理、檔案管理、腳本連結等。但,如果是作為初學者,以“使用”為目的時,比如“期望在系統啟動的時候自動執行指定程式”,則隻需知道如何配置啟動腳本即可。正比如,學開車,一開始并不需要知道發動機是如何工作的,會操控即可。
2. 啟動腳本
2.1 檔案位置
Linux啟動腳本,即rcS檔案。rcS檔案位于系統根目錄下的“/etc/init.d”下,可以檢視到該檔案的檔案屬主和檔案屬組都是root,隻有root的權限可以修改和執行。
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