漫談傳統的 Linux 初始化系統的執行級別
| 2017-09-11 08:26 評論: 3 收藏: 1
瞭解執行級別是如何配置的,如何改變系統執行級別以及修改對應狀態下執行的服務。
在 Linux 系統中,執行級別是指運維的級別,用於描述一種表明什麼服務是可用的系統執行狀態。
執行級別 1 是嚴格限制的,僅僅用於系統維護;該級別下,網路連線將不可操作,但是管理員可以透過控制檯連線登入系統。
其他執行級別的系統允許任何人登入和使用,但是不同級別中可使用的服務不同。本文將探索如何配置執行級別,如何互動式改變系統執行級別以及修改該狀態下可用的服務。
Linux 系統的預設執行狀態是一個在系統開機時使用的執行級別(除非有其他的指示),它通常是在 /etc/inittab
檔案中進行配置的,該檔案內容通常如下:
id:3:initdefault
包括 Debian 系統在內的一些系統,預設執行級別為 2,而不是上述檔案中的 3,甚至都沒有 /etc/inittab
檔案。
執行級別在預設情況下是如何被配置,其配置依賴於你所執行的 Linux 作業系統的具體發行版本。 例如,在某些系統中, 執行級別 2 是多使用者模式,執行級別 3 是多使用者模式並支援 NFS (網路檔案系統)。 在另外一些系統,執行級別 2 - 5 基本相同,執行級別 1 是單使用者模式。例如,Debian 系統的所用執行級別如下:
0 = 停機
1 = 單使用者(維護模式)
2 = 多使用者模式
3-5 = 同 2 一樣
6 = 重啟
在 Linux 系統上,執行級別 3 用於共享檔案系統給其它系統,可以方便地只透過改變系統的執行級別來啟動和停止檔案系統共享。系統從執行級別 2 改變到 3 系統將允許檔案系統共享,反之從執行級別 3 改變到 2 則系統不支援檔案系統共享。
在某個執行級別中,系統執行哪些程式依賴於目錄 /etc/rc?.d
目錄的內容,其中 ?
可以是 2、 3、 4 或 5 (對應於相應的執行級別)。
在以下示例中(Ubuntu 系統),由於這些目錄的配置是相同的,我們將看見上述 4 個級別對應的目錄中的內容是一致的。
/etc/rc2.d$ ls
README S20smartmontools S50saned S99grub-common
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
S20rsync S20sysstat S70pppd-dns S99rc.local
/etc/rc2.d$ cd ../rc3.d
/etc/rc3.d$ ls
README S20smartmontools S50saned S99grub-common
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
S20rsync S20sysstat S70pppd-dns S99rc.local
/etc/rc3.d$ cd ../rc4.d
/etc/rc4.d$ ls
README S20smartmontools S50saned S99grub-common
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
S20rsync S20sysstat S70pppd-dns S99rc.local
/etc/rc4.d$ cd ../rc5.d
/etc/rc5.d$ ls
README S20smartmontools S50saned S99grub-common
S20kerneloops S20speech-dispatcher S70dns-clean S99ondemand
S20rsync S20sysstat S70pppd-dns S99rc.local
這些都是什麼檔案?它們都是指向 /etc/init.d
目錄下用於啟動服務的指令碼符號連線。 這些檔案的檔名是至關重要的, 因為它們決定了這些指令碼檔案的執行順序,例如, S20 指令碼是在 S50 指令碼前面執行的。
$ ls -l
total 4
-rw-r--r-- 1 root root 677 Feb 16 2016 README
lrwxrwxrwx 1 root root 20 Aug 30 14:40 S20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S20rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root 23 Aug 30 16:10 S20smartmontools -> ../init.d/smartmontools
lrwxrwxrwx 1 root root 27 Aug 30 14:40 S20speech-dispatcher -> ../init.d/speech-dispatcher
lrwxrwxrwx 1 root root 17 Aug 31 14:12 S20sysstat -> ../init.d/sysstat
lrwxrwxrwx 1 root root 15 Aug 30 14:40 S50saned -> ../init.d/saned
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
lrwxrwxrwx 1 root root 21 Aug 30 14:40 S99grub-common -> ../init.d/grub-common
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99ondemand -> ../init.d/ondemand
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S99rc.local -> ../init.d/rc.local
如你所想,目錄 /etc/rc1.d
因執行級別 1 的特殊而不同。它包含的符號連結指向非常不同的一套指令碼。 同樣也要注意到其中一些指令碼以 K
開頭命名,而另一些與其它執行級別指令碼一樣以 S
開頭命名。這是因為當系統進入單使用者模式時, 一些服務需要停止。 然而這些 K 開頭的符號連結指向了其它級別 S 開頭的符號連結的同一檔案時, K(kill)表示這個指令碼將以指示其停止的引數執行,而不是以啟動的引數執行。
/etc/rc1.d$ ls -l
total 4
lrwxrwxrwx 1 root root 20 Aug 30 14:40 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root 15 Aug 30 14:40 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root 23 Aug 30 16:10 K20smartmontools -> ../init.d/smartmontools
lrwxrwxrwx 1 root root 27 Aug 30 14:40 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Mar 12 2014 README
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root 19 Aug 30 14:40 S70dns-clean -> ../init.d/dns-clean
lrwxrwxrwx 1 root root 18 Aug 30 14:40 S70pppd-dns -> ../init.d/pppd-dns
lrwxrwxrwx 1 root root 16 Aug 30 14:40 S90single -> ../init.d/single
你可以改變系統的預設執行級別,儘管這很少被用到。例如,透過修改前文中提到的 /etc/inittab
檔案,你能夠配置 Debian 系統的預設執行級別為 3 (而不是 2),以下是該檔案示例:
id:3:initdefault:
一旦你修改完成並重啟系統, runlevel
命令將顯示如下:
$ runlevel
N 3
另外一種可選方式,使用 init 3
命令,你也能改變系統執行級別(且無需重啟立即生效), runlevel
命令的輸出為:
$ runlevel
2 3
當然,除非你修改了系統預設級別的 /etc/rc?.d
目錄下的符號連結,使得系統預設執行在一個修改的執行級別之下,否則很少需要透過建立或修改 /etc/inittab
檔案改變系統的執行級別。
在 Linux 系統中如何使用執行級別?
為了扼要重述在系統中如何使用執行級別,下面有幾個關於執行級別的快速問答問題:
如何查詢系統當前的執行級別?
使用 runlevel
命令。
如何檢視特定執行級別所關聯的服務程式?
檢視與該執行級別關聯的執行級別開始目錄(例如, /etc/rc2.d
對應於執行級別 2)。
如何檢視系統的預設執行級別?
首先,檢視 /etc/inittab
檔案是否存在。如果不存在,就執行 runlevel
命令查詢,你一般就已經處在該執行級別。
如何改變系統執行級別?
用 init
命令(例如 init 3
)臨時改變執行級別,透過修改或建立 /etc/inittab
檔案永久改變其執行級別。
能改變特定執行級別下執行的服務麼?
當然,透過改變對應的 /etc/rc?.d
目錄下的符號連線即可。
還有一些其他的什麼需要考慮?
當改變系統執行級別時,你應該特別小心,確保不影響到系統上正在執行的服務或者正在使用的使用者。
(題圖:Vincent Desjardins (CC BY 2.0))
via: https://www.networkworld.com/article/3222070/linux/maneuvering-around-run-levels-on-linux.html
作者:Sandra Henry-Stocker 譯者:penghuster 校對:wxy
相關文章
- Linux 系統執行級別Linux
- Linux系統執行級別Linux
- Linux系統的七個執行級別Linux
- Linux作業系統執行級別介紹Linux作業系統
- 在Linux中,系統預設的執行級別是什麼?Linux
- 系統執行級別及修改方法
- centos7系統執行級別簡介CentOS
- 多執行緒的風險漫談執行緒
- 【話題討論】漫談生產系統升級的一點思考
- 多執行緒中的鎖系統(四)-談談自旋鎖執行緒
- linux系統中怎麼中執行jar包?linux系統中執行jar包的方法LinuxJAR
- Linux 執行級別Linux
- 檢視正在執行的 Linux 系統版本Linux
- 漫談程式和執行緒執行緒
- Linux系統執行命令方法Linux
- Solaris如何改變系統執行級
- 系統 boot 和執行根檔案系統中的命令特別重要boot
- 作業系統-執行緒和程式的區別作業系統執行緒
- 作業系統_程式和執行緒的區別作業系統執行緒
- 『學了就忘』Linux啟動引導與修復 — 68、Linux系統執行級別Linux
- JVM 的執行子系統JVM
- Linux執行級別的檢視和修改Linux
- Linux的七個執行級別原理概述Linux
- 談談機器學習與傳統程式設計之間的區別機器學習程式設計
- Java 執行緒和作業系統的執行緒有啥區別?Java執行緒作業系統
- 如何弄清 Linux 系統執行何種系統管理程式Linux
- Linux系統透過CrossOver執行windows系統exe程式LinuxROSWindows
- Linux系統級日誌系統Linux
- 事務系統的隔離級別
- chkconfig用法及Linux的執行級別Linux
- 淺談Linux的檔案系統(轉)Linux
- 談談Linux系統啟動流程Linux
- Linux初始化系統V的Init過程(轉)Linux
- Linux如何檢視系統和程式的執行狀態?Linux
- 基於Linux的傳真系統(轉)Linux
- linux和windows系統的區別LinuxWindows
- Linux系統常見的發行版本以及區別!Linux
- 9 個提高系統執行速度的輕量級 Linux 應用Linux