跳轉到內容

LPI Linux 認證/更改執行級別和關閉或重啟系統

來自華夏公益教科書,開放的書籍,開放的世界

101.3 更改執行級別/啟動目標和關閉或重啟系統

[編輯 | 編輯原始碼]

(LPIC-1 版本 5.0)

權重:3

描述
考生應能夠管理系統的 SysVinit 執行級別或 systemd 啟動目標。此目標包括更改為單使用者模式、關閉或重啟系統。考生應能夠在切換執行級別/啟動目標之前提醒使用者並正確終止程序。此目標還包括設定預設的 SysVinit 執行級別或 systemd 啟動目標。它還包括對 Upstart 作為 SysVinit 或 systemd 的替代方案的認識。

關鍵知識領域

  • 設定預設執行級別或啟動目標。
  • 在執行級別/啟動目標之間切換,包括單使用者模式。
  • 從命令列關閉和重啟。
  • 在切換執行級別/啟動目標或其他主要系統事件之前提醒使用者。
  • 正確終止程序。
  • 瞭解 acpid。

以下是使用檔案、術語和實用程式的部分列表

  • /etc/inittab
  • shutdown
  • init
  • /etc/init.d/
  • telinit
  • systemd
  • systemctl
  • /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" 開頭的服務,只留下最少的服務執行。

更改執行級別、關閉和重啟系統

[編輯 | 編輯原始碼]

inittelinit - 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


華夏公益教科書