1. 程式人生 > >/etc/inittab,/etc/init.d/rcS和/etc/profile分析

/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中的程式先執行。