/etc/inittab,/etc/init.d/rcS和/etc/profile分析
參考部落格https://blog.csdn.net/qiuoooooo/article/details/79300739
在kernel掛載根檔案系統後,執行的第一個程式是根目錄下的linuxrc,實際是一個指向/bin/busybox的連結, 也就是說系統起來後執行的第一個程式是busybox本身。先執行 /etc/inittab, 然後呼叫/etc/init.d/rcS, 最後是執行/etc/profile
inittab
(1)inittab的工作原理就是被/linuxrc(也就是busybox)執行時所呼叫起作用。
(2)inittab在/etc目錄下,所以屬於一個執行時配置檔案,是文字格式的(內容是由一系列的遵照一個格式組織的字元組成的),實際工作的時候busybox會(按照一定的格式)解析這個inittab文字檔案,然後根據解析的內容來決定要怎麼工作。
inittab的格式(id:runlevels:action:process)在busybox中定義的
第一個:#開始的行是註釋
第二個:冒號在裡面是分隔符,分隔開各個部分。
第三個:inittab內容是以行為單位的,行與行之間沒有關聯,每行都是一個獨立的配置項,每一個配置項表示一個具體的含義。
第四個:每一行的配置項都是由3個冒號分隔開的4個配置值共同確定的。這四個配置值就是id:runlevels:action:process。值得注意得是有些配置值可以空缺,空缺後冒號不能空缺,所以有時候會看到連續2個冒號。
第五個:每一行的配置項中4個配置值中最重要的是action和process,action是一個條件/狀態,process是一個可被執行的程式的pathname。合起來的意思就是:當滿足action的條件時就會執行process這個程式。
注意:理解inittab的關鍵就是明白“當滿足action的條件時就會執行process這個程式。” 你去分析busybox的原始碼就會發現,busybox最終會進入一個死迴圈,在這個死迴圈中去反覆檢查是否滿足各個action的條件,如果某個action的條件滿足就會去執行對應的process。
#first:run the system script file ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::ctrlaltdel:-/sbin/reboot #umount all filesystem ::shutdown:/bin/umount -a -r #restart init process ::restart:/sbin/init
/etc/init.d/rcS
/etc/init.d/rcS檔案是linux的執行時配置檔案中最重要的一個,其他的一些配置都是由這個檔案引出來的。這個檔案可以很複雜也可以很簡單,裡面可以有很多的配置項。
/etc/init.d/rcS 完成各個檔案系統的 mount,再執行/usr/etc/rc.local;通過rcS 可以呼叫 dhcp 程式配置網路。rcS 執行完了以後,init 就會在一個 console 上,按照 inittab 的指示開一個 shell,或者是開 getty + login,這樣使用者就會看到提示輸入使用者名稱的
提示符。
/usr/etc/rc.local 這是被init.d/rcS 檔案呼叫執行的特殊檔案,與Linux 系統硬體平臺相關,如安裝核心模組、進行網路配置、執行應用程式、啟動圖形介面等。/usr/etc/profile rc.local 首先執行該檔案配置應用程式需要的環境變數等。
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME
ifconfig eth0 192.168.1.10
/etc/profile檔案
linux /etc/profile檔案的改變會涉及到系統的環境,也就是有關Linux環境變數的東西,學習Linux要了解Linux profile檔案的相關原理,這裡對則以檔案進行具體分析。這裡修改會對所有使用者起作用。
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[\[email protected]\h \W]\# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
1、Linux是一個多使用者的作業系統。每個使用者登入系統後,都會有一個專用的執行環境。通常每個使用者預設的環境都是相同 的,這個預設環境實際上就是一組環境變數的定義。使用者可以對自己的執行環境進行定製,其方法就是修改相應的系統 環境量。
2、常在/etc/profile檔案中修改環境變數,在這裡修改的內容是對所有使用者起作用的。以下主要操作將在該檔案中進行。
3、如何新增環境變數。
例如新增”NAME=liheng“ 。在profile檔案的最後新增如下內容export NAME=liheng
變數值liheng可以加引號也可以不加,效果一樣。
4、在profile檔案新增或修改的內容需要登出系統才能生效。
5、重複定義變數怎樣理解。
經常出現的是對PATH變數的定義。
例如:在peofile檔案預設對PATH變數都有設定PATH=¥¥¥¥¥¥¥(記不住了),在以後可能在對PATH設定,一般都加 在profile 檔案的最後PATH=······(打個比方)。而系統之中認定的PATH=·······¥¥¥¥¥¥¥¥¥,也就是說相同名字的 環境 變數,後寫入的先起作用(通俗地講)。大家一定要注意。
6、特殊字元介紹。
例如在profile中有如下內容,通過以下內容說明特殊符號的用法。
export A=/q/jing:aaa/cc/ld
export B=.:/liheng/wang
export A=/cd/cdr:$A
大家注意紅色的符號:
: 表示並列含義,例如A變數值有多個,用:符號進行分離。
. 表示你操作的當前目錄。例如pap命令會查詢B環境變數。
7、使用env命令顯示所有的環境變數 。在命令提示符下鍵入env就行了。
set命令顯示所有本地定義的Shell變數。
8、常見的環境變數
PATH:決定了shell將到哪些目錄中尋找命令或程式
HOME:當前使用者主目錄
MAIL:是指當前使用者的郵件存放目錄。
SHELL:是指當前使用者用的是哪種Shell。
HISTSIZE:是指儲存歷史命令記錄的條數。
LOGNAME:是指當前使用者的登入名。
HOSTNAME:是指主機的名稱,許多應用程式如果要用到主機名的話,通常是從這個環境變數中來取得的。
LANG/LANGUGE:是和語言相關的環境變數,使用多種語言的使用者可以修改此環境變數。
PS1:是基本提示符,對於root使用者是#,對於普通使用者是$。
PS2:是附屬提示符,預設是“>”。可以通過修改此環境變數來修改當前的命令符,比如下列命令會將提示符修改成字串“Hello,My NewPrompt :) ”。
# PS1=” Hello,My NewPrompt :) “
9、使用修改.bashrc檔案(在使用者的家目錄下)進行環境變數的編輯,只對當前使用者有用。使用修改 /etc/profile 檔案進行環境變數的編輯,是對所有使用者有用。大家一定要注意區別。
10、Linux profile檔案在系統啟動時將被執行。大家可以在裡面加入其他命令,但是一定要加正確,不然的話系統會啟動不起來的。
我在我的開發板中的(位置)/etc/init.d/rcS 檔案中添加了關於對QT應用程式的執行設定需要的庫函式的路徑做export宣告,這樣去匯出環境變數是空,然後我放在/etc/profile下就可以,因為rcS檔案中程式的要比/etc/profile中的程式先執行。