Linux 開機(腳本)啓動順序

Linux 系統運行級別


Linux 使用的是基於運行級(run-levels)概念的稱爲 SysVinit 的專用啓動工具。 它在不同的系統上可能是完全不一樣的, 所以不能認爲一個腳本在某個 Linux 發行版上工作正常。

SysVinit 以運行級的模式來工作,一般有 7 (從 0 到 6)個運行級 (實際上可以有更多的運行級,但都是用於特殊情況而且一般使用不到。 參見 init(8)以獲得更多信息),每個運行級對應於一套設定好的任務, 當啓動一個運行級的時候, 計算機就需要執行相應的任務。

默認的運行級是 3,下面是對不同運行級的描述:

0: 關閉計算機
1: 單用戶模式
2: 無網絡多用戶模式
3: 有網絡多用戶模式
4: 保留作自定義,否則同運行級 3
5: 同運行級 4,一般用於圖形界面(GUI)登錄(如 X的 xdm 或 KDE的 kdm)
6: 重啓動計算機

可以使用 runlevel 命令查看:

$ runlevel
N 3

也可以在 /etc/inittab 文件中看到以下:

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

也就是說我們系統的運行級別目前是3,那麼需要看的就是 /etc/rc3.d 下的內容,其實裏面都是軟連接,所有的軟鏈指向 /etc/init.d/ 中的腳本文件,命名規範如下:

[K|S][number][service name] --> ../init.d/servicename

  • S 表示系統啓動時需要啓動的腳本
  • K 表示系統關閉時要關閉的腳本
  • [number] 表示的是該腳本的運行優先級,number 越小,腳本的運行優先級就越高
  • [service name] 表示的是服務的名稱。

因此我們如果需要定義一個服務啓動的優先級(順序),則需指定腳本的 number 即可。

Linux 開機順序


  1. 加載內核
  2. 啓動 init(/etc/inittab)

內核啓動的第一個用戶級別的進程,其 pid 始終爲 1,其它的開機啓動腳本都是通過是通過這個進程來啓動的。

  1. 執行 /etc/rc.d/rc.sysinit

這是 init 執行的第一個腳本,這個腳本主要工作是進行系統的初始化,如:設置系統字體、啓動 swapping、設置主機名、裝載聲卡模塊等。

  1. 執行 /etc/rc.d/rc*.d(rc0.d、rc1.d、rc2.d…rc6.d)

這一步會運行各個運行級別的腳本。這些運行腳本是指通過 chkconfig 命令配置的開機啓動各個級別所要要執行的程序。

  1. 執行 /etc/rc.d/rc.local(就是 /etc/rc.local)

在各級別服務啓動後,會執行該文件,如果不需要把所要執行的腳本配置爲系統服務,也可以把所需執行的命令寫到這個文件中,相比來說更爲簡單方便。

  1. /sbin/mingetty,等待用戶登錄

自啓動腳本實踐


  • 開機以 root 權限執行腳本,修改 /etc/rc.d/rc.local 文件。
  • 用戶登錄時執行腳本,如設置一些環境變量,修改 /etc/profile 文件。
  • 特定用戶登錄時執行特定腳本,如設置該用戶特定的環境變量,修改 ~/.bash_profile 文件。
文件 說明
/etc/profile 此文件爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。並從 /etc/profile.d 目錄的配置文件中搜集 shell 的設置。
/etc/bashrc 爲每一個運行bash shell的用戶執行此文件。當bash shell被打開時,該文件被讀取。
~/.bash_profile 用戶專用於自己使用的 shell 信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的 .bashrc文件。
~/.bashrc 該文件包含專用於你的 bash shell 的 bash 信息,當登錄時以及每次打開新的 shell 時,該文件被讀取。
~/.profile 在 Debian 中使用 .profile 文件代替 .bash_profile 文件 .profile(由Bourne Shell和Korn Shell使用)和 .login(由C Shell使用)兩個文件是 .bash_profile 的同義詞,目的是爲了兼容其它 Shell。
~/.bash_logout 當每次退出系統(退出bash shell)時,執行該文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章