Linux 命令大全(九)——運行級別


九、 運行級別
1 Linux 系統的運行級別 (runlevel)
Linux 系統有 7 個運行級別, Linux 系統任何時候都運行在一個指定的運行級別上,不同的運行級
別所運行的程序和服務不盡相同,所要完成的工作和要達到的目的也不相同
· 運行級別 0 系統停機 (halt) 狀態,系統的默認運行級別不能設為 0 ,否則不能正常啟動
· 運行級別 1 單用戶工作 (single user) 狀態, root 權限,用於系統維護,禁止遠程登陸
· 運行級別 2 多用戶 (multiuser) 狀態 ( 沒有 NFS)
· 運行級別 3 完全的多用戶 (multiuser) 狀態 ( NFS) ,登陸后進入控制台命令行模式
· 運行級別 4 系統未使用,保留
· 運行級別 5 X11 控制台 (xdm gdm kdm) ,登陸后進入圖形 GUI 模式 · 運行級別 6 系統正常關閉並重啟 (reboot) ,默認運行級別不能設為 6 ,否則不能正常啟動
2 、運行級別的原理
在目錄 /etc/rc.d/init.d 下有許多服務器腳本程序,一般稱為服務 (service) , 在 /etc/rc.d
7 個名為 rcN.d 的目錄,其中 N=0-6 ,對應於系統的 7 個運行級別, rcN.d 目錄下,都是
一些符號鏈接文件,這些鏈接文件都指向 init.d 目錄下的 service 腳本文件,這些鏈接文件的命
名規則是 "K+nn+ 服務名 " "S+nn+ 服務名 " ,其中 nn 2 位數字:
: rc3.d 目錄下的鏈接文件 S80sendmail 就指向 service 腳本文件 ../init.d/sendmail
系統會根據指定的 runlevel 進入對應的 rcN.d 目錄,並按照文件名順序檢索目錄下的鏈接文件
• 對於以 K 為開頭的鏈接文件,系統將終止對應的服務
• 對於以 S 為開頭的鏈接文件,系統將啟動對應的服務
通過這種方式來實現 " 不同的運行級別運行不同的程序和服務 "
3 /etc/inittab 配置文件詳解
init 的進程號是 1 ,從這一點就能看出, init 進程是系統所有進程的起點, Linux 在完成核內引導以后,
就開始運行 init 程序, init 程序需要讀取設置文件 /etc/inittab inittab 是個不可執行的文本文件,他有若
干行指令所組成。在 Redhat 系統中, inittab 的內容如下所示 ( 以“ ###" 開始的中注釋為筆者增加的 )
如果你改變了 inittab 文件,那么要使他立即生效,需要使用一個命令: init q
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# 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)
#
 
### 表示當前缺省運行級別為 5(initdefault)
id:5:initdefault:
 
### 啟動時自動執行 /etc/rc.d/rc.sysinit 腳本 (sysinit)
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
 
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
### 當運行級別為 5 時,以 5 為參數運行 /etc/rc.d/rc 腳本, init 將等待其返回 (wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
 
### 在啟動過程中允許按 CTRL-ALT-DELETE 重啟系統
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
 
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
 
### 2 3 4 5 級別上以 ttyX 為參數執行 /sbin/mingetty 程序,打開 ttyX 終端用於用戶登錄,
### 如果進程退出則再次運行 mingetty 程序 (respawn)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
 
### 5 級別上運行 xdm 程序,提供 xdm 圖像方式登錄界面,並在退出時重新執行 (respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
 
以上面的 inittab 文件為例,來說明一下 inittab 的格式。其中以 # 開始的行是注釋行,除了注釋行之
外,每一行都有以下格式:
 
id:runlevel:action:process
 
對上面各項的周詳解釋如下:
 
1. id
 
id 是指入口標識符,他是個字符串,對於 getty mingetty 等其他 login 程序項,需求 id tty 的編
號相同,否則 getty 程序將不能正常工作。
2. runlevel
 
runlevel init 所處於的運行級別的標識,一般使用 0 6 S s 0 1 6 運行級別被系統保留:
其中 0 作為 shutdown 動作, 1 作為重啟至單用戶模式, 6 為重啟; S s 意義相同,表示單用戶模式,
且無需 inittab 文件,因此也不在 inittab 中出現,實際上,進入單用戶模式時, init 直接在控制台
/dev/console )上運行 /sbin/sulogin 。在一般的系統實現中,都使用了 2 3 4 5 幾個級別,在 Redhat
系統中, 2 表示無 NFS 支持的多用戶模式, 3 表示完全多用戶模式(也是最常用的級別), 4 保留給用戶
自定義, 5 表示 XDM 圖像登錄方式。 7 9 級別也是能使用的,傳統的 Unix 系統沒有定義這幾個級別。
runlevel 能是並列的多個值,以匹配多個運行級別,對大多數 action 來說,僅當 runlevel 和當前運行級
別匹配成功才會執行。
 
3. action
 
action 是描述其后的 process 的運行方式的。 action 可取的值包括: initdefault sysinit boot bootwait
等:
 
initdefault 是個特別的 action 值,用於標識缺省的啟動級別;當 init 由核心激活以后,他將讀取 inittab
中的 initdefault 項,取得其中的 runlevel ,並作為當前的運行級別。如果沒有 inittab 文件,或其中沒有
initdefault 項, init 將在控制台上請求輸入 runlevel
 
sysinit boot bootwait action 將在系統啟動時無條件運行,而忽略其中的 runlevel
 
其余的 action (不含 initdefault )都和某個 runlevel 相關。各個 action 的定義在 inittab man 手冊
中有周詳的描述。
 
4. process
 
process 為具體的執行程序。程序后面能帶參數。
 
第三部分:系統初始化
 
init 的設置文件中有這么一行:
 
si::sysinit:/etc/rc.d/rc.sysinit
 
他調用執行了 /etc/rc.d/rc.sysinit ,而 rc.sysinit 是個 bash shell 的腳本,他主要
init 的設置文件中有這么一行:
si::sysinit:/etc/rc.d/rc.sysinit
他 調用執行了 /etc/rc.d/rc.sysinit ,而 rc.sysinit 是個 bash shell 的腳本,他主要是完成一些系統初始化的
工作, rc.sysinit 是每一個運行級別都要首先運行的重要腳本。他主要完成的工作有:激活交換分區,檢
查磁盤,加載硬件模塊及其他一些需要優先執行任務。 rc.sysinit 約有 850 多行,不過每個單一的功能還是比較簡單,而且帶有注釋,建議有興趣的用戶能自行
閱讀自己機器上的該文件,以了解系統初始化所周詳情況。由於此文件較長,所以不在本文中列出來,
也不做具體的介紹。
rc.sysinit 程序執行完畢后,將返回 init 繼續下一步。
第四部分:啟動對應運行級別的守護進程
rc.sysinit 執行后,將返回 init 繼續其他的動作,通常接下來會執行到 /etc/rc.d/rc 程序。以運行級別 5
為例, init 將執行設置文件 inittab 中的以下這行:
l5:5:wait:/etc/rc.d/rc 5
這一行表示以 5 為參數運行 /etc/rc.d/rc /etc/rc.d/rc 是個 Shell 腳本,他接受 5 作為參數,去執行 /etc/rc.d
/rc5.d/ 目錄下的所有的 rc 啟動腳本, /etc/rc.d/rc5.d/ 目錄中的這些啟動腳本實際上都是一些鏈接文件,
而不是真正的 rc 啟動腳本,真正的 rc 啟動腳本實際上都是放在 /etc/rc.d/init.d/ 目錄下。而這些 rc 啟動
腳本有着類似的用法,他們一般能接受 start stop restart status 等參數。
/etc/rc.d/rc5.d/ 中的 rc 啟動腳本通常是 K S 開頭的鏈接文件,對於以以 S 開頭的啟動腳本,將以 start
參數來運行。而如果發現存在相應的腳本也存在 K 打頭的鏈接,而且已處於運行態了 ( /var/lock/subsys/
下的文件作為標志 ) ,則將首先以 stop 為參數停止這些已啟動了的守護進程,然后再重新運行。這樣做
是為了確保是當 init 改動運行級別時,所有相關的守護進程都將重啟。
至於在每個運行級中將運行哪些守護進程,用戶能通過 chkconfig setup 中的 "System Services" 來自行
設定。常見的守護進程有:
amd :自動安裝 NFS 守護進程
apmd: 高級電源管理守護進程
arpwatch :記錄日志並構建一個在 LAN 接口上看到的以太網地址和 IP 地址對數據庫
autofs :自動安裝管理進程 automount ,和 NFS 相關,依賴於 NIS
crond Linux 下的計划任務的守護進程
named DNS 服務器
netfs :安裝 NFS Samba NetWare 網絡文件系統
network :激活已設置網絡接口的腳本程序
nfs :打開 NFS 服務
portmap RPC portmap 管理器,他管理基於 RPC 服務的連接
sendmail :郵件服務器 sendmail
smb Samba 文件共享 / 打印服務
syslog :一個讓系統引導時起動 syslog klogd 系統日志守候進程的腳本
xfs X Window 字型服務器,為本地和遠程 X 服務器提供字型集
Xinetd :支持多種網絡服務的核心守護進程,能管理 wuftp sshd telnet 等服務
這些守護進程也啟動完成了, rc 程序也就執行完了,然后又將返回 init 繼續下一步。
第五部分:建立終端
rc 執行完畢后,返回 init 。這時基本系統環境已設置好了,各種守護進程也已啟動了。 init 接下來會打
6 個終端,以便用戶登錄系統。通過按 Alt+Fn(n 對應 1-6) 能在這 6 個終端中轉換。在 inittab 中的以下
6 行就是定義了 6 個終端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6 從上面能看出在 2 3 4 5 的運行級別中都將以 respawn 方式運行 mingetty 程序, mingetty 程序能打
開終端、設置模式。同時他會顯示一個文本登錄界面,這個界面就是我們經常看到的登錄界面,在這個
登錄界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作為參數傳給 login 程序來驗證用戶的身份。
第六部分:登錄系統,啟動完成
對於運行級別為 5 的圖像方式用戶來說,他們的登錄是通過一個圖像化的登錄界面。登錄成功后能直接
進入 KDE Gnome 等窗口管理器。而本文主要講的還是文本方式登錄的情況:
當我們看到 mingetty 的登錄界面時,我們就能輸入用戶名和密碼來登錄系統了。
Linux 的賬號驗證程序是 login login 會接收 mingetty 傳來的用戶名作為用戶名參數。然后 login
對用戶名進行分析:如果用戶名不是 root ,且存在 /etc/nologin 文件, login 將輸出 nologin 文件的內容,
然后退出。這通常用來系統維護時防止非 root 用戶登錄。只有 /etc/securetty 中登記了的終端才允許 root
用戶登錄,如果不存在這個文件,則 root 能在所有終端上登錄。 /etc /usertty 文件用於對用戶作出附加
訪問限制,如果不存在這個文件,則沒有其他限制。
在分析完用戶名后, login 將搜索 /etc/passwd /etc/shadow 來驗證密碼及設置賬戶的其他信息,比如:
主目錄是什么、使用何種 shell 。如果沒有指定主目錄,將默認為根目錄;如果沒有指定 shell ,將默認
/bin/bash
login 程序成功后,會向對應的終端在輸出最近一次登錄的信息 ( /var/log/lastlog 中有記錄 ) ,並檢查用
戶是否有新郵件 ( /usr/spool /mail/ 的對應用戶名目錄下 ) 。然后開始設置各種環境變量:對於 bash 來說,
系統首先尋找 /etc/profile 腳本文件,並執行他;然后如果用戶的主目錄中存在 .bash_profile 文件,就執
行他,在這些文件中又可能調用了其他設置文件,所有的設置文件執行后后,各種環境變量也設好了,
這時會出現大家熟悉的命令行提示符,到此整個啟動過程就結束了。
4 、相關命令
4.1 、查看當前系統運行等級
[root@test ~]# runlevel
N 5
//’N’ 代表先前的 Runlevel; ‘5’ 代表目前的 Runlevel
4.2 、切換系統運行等級
#init N
// 切換到運行級別 N
# init 0
// 關機
# init 6
// 重啟動系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM