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 開機順序
- 加載內核
- 啓動 init(/etc/inittab)
內核啓動的第一個用戶級別的進程,其 pid 始終爲 1,其它的開機啓動腳本都是通過是通過這個進程來啓動的。
- 執行
/etc/rc.d/rc.sysinit
這是 init 執行的第一個腳本,這個腳本主要工作是進行系統的初始化,如:設置系統字體、啓動 swapping、設置主機名、裝載聲卡模塊等。
- 執行
/etc/rc.d/rc*.d
(rc0.d、rc1.d、rc2.d…rc6.d)
這一步會運行各個運行級別的腳本。這些運行腳本是指通過 chkconfig 命令配置的開機啓動各個級別所要要執行的程序。
- 執行
/etc/rc.d/rc.local
(就是 /etc/rc.local)
在各級別服務啓動後,會執行該文件,如果不需要把所要執行的腳本配置爲系統服務,也可以把所需執行的命令寫到這個文件中,相比來說更爲簡單方便。
-
/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)時,執行該文件。 |