LPI Linux 認證/更改執行級別和關閉或重啟系統
(LPIC-1 版本 5.0)
權重:3
描述
考生應能夠管理系統的 SysVinit 執行級別或 systemd 啟動目標。此目標包括更改為單使用者模式、關閉或重啟系統。考生應能夠在切換執行級別/啟動目標之前提醒使用者並正確終止程序。此目標還包括設定預設的 SysVinit 執行級別或 systemd 啟動目標。它還包括對 Upstart 作為 SysVinit 或 systemd 的替代方案的認識。
關鍵知識領域
- 設定預設執行級別或啟動目標。
- 在執行級別/啟動目標之間切換,包括單使用者模式。
- 從命令列關閉和重啟。
- 在切換執行級別/啟動目標或其他主要系統事件之前提醒使用者。
- 正確終止程序。
- 瞭解 acpid。
以下是使用檔案、術語和實用程式的部分列表
/etc/inittabshutdowninit/etc/init.d/telinitsystemdsystemctl/etc/systemd//usr/lib/systemd/wall
執行級別用於 Linux 中定製作業系統初始化的方式。執行級別定義了在初始化期間哪些服務會自動啟動。每個執行級別都有一個數字(以及可能存在別名)來定義它。可以在下面的表格中找到常見的執行級別數字,不幸的是,一些執行級別數字在 RedHat 和 Debian 發行版之間存在差異。
| 執行級別 | RedHat | Debian |
|---|---|---|
| 0 | 停止系統。此執行級別不應設定為預設值 | 與 RedHat 相同 |
| 1(單使用者模式) | 單使用者模式。在此執行級別中,Linux 只啟動基本服務,並且在大多數發行版中會啟動 root shell,該 shell 不需要密碼即可登入。不會啟動網路或 NFS 服務。此執行級別可用於重置 root 密碼或執行一些基本系統維護。 | 與 RedHat 相同 |
| 2 | 沒有 NFS 支援的多使用者模式 | 完全多使用者模式,通常為預設值 |
| 3 | 完全多使用者模式,通常為預設值 | 通常未被使用 |
| 4 | 通常未被使用 | 通常未被使用 |
| 5 | 具有 X11 的完全多使用者模式。此執行級別通常允許圖形登入 | 通常未被使用 |
| 6 | 重啟系統。此執行級別不應設定為預設值,因為它會導致系統進入重啟迴圈 | 與 RedHat 相同 |
預設執行級別在大多數發行版的 /etc/inttab 檔案中控制,但是目前正在發生改變,因為一些新的 Linux 發行版開始使用更先進的事件驅動的upstart 替換傳統的 init 程式。在 /etc/inittab 中,以下行控制預設執行級別(例如 Debian,設定執行級別 2 為預設值)
id:2:initdefault:
當作業系統載入 /sbin/init 程式時,它會讀取上面的行並確定它應該使用執行級別 2(除非另一個執行級別數字作為核心引數傳遞)。在此之後,init 將執行 /etc/rcX.d/ 目錄中的所有指令碼,其中 X 是執行級別數字。該目錄的示例內容可能類似於
-rw-r--r-- 1 root root 556 2008-08-12 15:09 README lrwxrwxrwx 1 root root 17 2010-01-07 22:08 S10rsyslog -> ../init.d/rsyslog lrwxrwxrwx 1 root root 15 2010-01-07 22:10 S12acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 15 2010-05-09 11:39 S15bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 13 2010-01-07 22:40 S16ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-01-07 22:15 S20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 S20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 27 2010-01-07 23:10 S20nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 23 2010-01-07 22:15 S20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 13 2010-01-07 22:15 S89atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 S89cron -> ../init.d/cron lrwxrwxrwx 1 root root 17 2010-01-07 22:59 S91apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 18 2010-01-07 22:08 S99rc.local -> ../init.d/rc.local lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S99rmnologin -> ../init.d/rmnologin lrwxrwxrwx 1 root root 23 2010-01-07 22:08 S99stop-bootlogd -> ../init.d/stop-bootlogd
目錄中的所有服務將按順序執行,從最低數字開始到最高數字結束。正如您可能注意到的,/etc/rcX.d/ 目錄中的所有檔案都是指向 /etc/init.d/ 中啟動指令碼的符號連結。當作業系統進入執行級別時,init 程式會將 "start" 引數傳遞給以 "S" 字元為字首的所有指令碼,並將 "stop" 引數傳遞給以 "K" 字元為字首的所有指令碼。在上面的示例中,第一個執行的程式之一是 rsyslog
S10rsyslog -> ../init.d/rsyslog
這會導致 init 執行以下命令
/etc/init.d/rsyslog start
上面的示例是 Debian 的執行級別 2,它是完全多使用者模式,因此不需要終止任何服務,但是如果我們檢視同一系統上的執行級別 1,它看起來大不相同
lrwxrwxrwx 1 root root 17 2010-01-07 22:59 K09apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 13 2010-01-07 22:15 K11atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 K11cron -> ../init.d/cron lrwxrwxrwx 1 root root 15 2010-01-07 22:15 K20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 K20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 23 2010-01-07 22:15 K20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 27 2010-01-07 23:10 K80nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 17 2010-01-07 22:15 K81portmap -> ../init.d/portmap lrwxrwxrwx 1 root root 13 2010-01-07 22:40 K84ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-05-09 11:39 K85bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 15 2010-01-07 22:10 K88acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 17 2010-01-07 22:08 K90rsyslog -> ../init.d/rsyslog -rw-r--r-- 1 root root 369 2007-12-23 11:04 README lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S30killprocs -> ../init.d/killprocs lrwxrwxrwx 1 root root 16 2010-01-07 22:08 S90single -> ../init.d/single
當系統進入執行級別 1 時,它將終止所有以 "K" 開頭的服務,只留下最少的服務執行。
init 和 telinit - telinit 命令只是指向 init 的連結,兩個命令的功能相同。它們可以用來更改當前的執行級別。它們只接受一個引數,即新的執行級別數字。示例用法
更改執行級別為單使用者模式
init 1
執行級別 6 是重啟。init 可以用來重啟系統
telinit 6
要關閉系統,我們進入執行級別 0
init 0
shutdown - shutdown 命令可以用來重啟、關閉並向所有登入使用者傳送警告訊息。
/sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]
常用選項
- -h - 關閉後停止或斷電
- -r - 關閉後重啟
- -k - 不要真正關閉;只向所有人傳送警告訊息
示例
5 分鐘後關閉併發送警告訊息
shutdown -h +5 System is going down for maintenance
立即重啟
shutdown -r now
不重啟或關閉,只向用戶傳送訊息
shutdown -k Make sure you keep your password safe
在 23:59 關閉系統
shutdown -h 23:59 This system is going down for maintenance at 23:59