Rhel

當執行到一個執行級別時,它會執行以前的執行級別嗎?

  • May 22, 2016

如果我告訴我的系統進入執行級別 3,這是否意味著它首先執行執行級別 0、1、2,然後最終執行執行級別 3?

我認為這個問題的答案是肯定的。但是當我查看我的 RHEL 6 系統時,我發現許多 rcX.d 目錄都包含相同的符號連結。

在我的**/etc/rc.d/rc0.d/**

[root@centos6 rc.d]# ls -lah /etc/rc.d/rc0.d/
total 8.0K
drwxr-xr-x.  2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul  9 15:06 ..
lrwxrwxrwx.  1 root root   13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx.  1 root root   14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx.  1 root root   18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx.  1 root root   14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx.  1 root root   17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx.  1 root root   17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx.  1 root root   20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx.  1 root root   15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx.  1 root root   25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx.  1 root root   17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx.  1 root root   21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx.  1 root root   17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx.  1 root root   19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx.  1 root root   26 Jun 12 10:58 K75blk-availability -> ../init.d/blk-availability
lrwxrwxrwx.  1 root root   15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 K75udev-post -> ../init.d/udev-post
lrwxrwxrwx.  1 root root   24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx.  1 root root   24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx.  1 root root   19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx.  1 root root   20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx.  1 root root   20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx.  1 root root   21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx.  1 root root   16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx.  1 root root   15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx.  1 root root   17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx.  1 root root   16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx.  1 root root   21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx.  1 root root   15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx.  1 root root   17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx.  1 root root   18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx.  1 root root   22 Jun 12 10:58 K99lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx.  1 root root   17 Jun 12 11:15 S00killall -> ../init.d/killall
lrwxrwxrwx.  1 root root   14 Jun 12 11:15 S01halt -> ../init.d/halt
lrwxrwxrwx.  1 root root   15 Jun 26 12:32 S95jexec -> ../init.d/jexec

在**/etc/rc.d/rc1.d/**中,我看到了與 rc0.d 中相同的一組符號連結以及額外的連結。這似乎表明目錄 rc0.d, rc1.d 是獨立的,並且要進入執行級別 1,它不會執行執行級別 0 中的內容。這意味著如果 rc0 中的符號連結如何,可能會發生不好的事情.d 沒有在 rc1.d 中完全複製,… 等等。

那麼它是如何真正起作用的呢?它只是掃描特定 rc.X 目錄中的文件還是遍歷所有級別低於傳遞給 init 的 rc 級別的 rc.X 目錄?

[root@centos6 rc.d]# ls -lah /etc/rc.d/rc1.d/
total 8.0K
drwxr-xr-x.  2 root root 4.0K Jun 27 11:59 .
drwxr-xr-x. 10 root root 4.0K Jul  9 15:06 ..
lrwxrwxrwx.  1 root root   13 Jun 12 13:02 K05atd -> ../init.d/atd
lrwxrwxrwx.  1 root root   14 Jun 12 13:01 K10cups -> ../init.d/cups
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx.  1 root root   18 Jun 12 12:51 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx.  1 root root   14 Jun 12 10:58 K25sshd -> ../init.d/sshd
lrwxrwxrwx.  1 root root   17 Jun 12 10:57 K30postfix -> ../init.d/postfix
lrwxrwxrwx.  1 root root   17 Jun 12 12:26 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx.  1 root root   20 Jun 12 10:57 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx.  1 root root   15 Jun 12 10:57 K60crond -> ../init.d/crond
lrwxrwxrwx.  1 root root   25 Jun 27 11:59 K65vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx.  1 root root   17 Jun 27 11:58 K70vboxadd -> ../init.d/vboxadd
lrwxrwxrwx.  1 root root   21 Jun 27 11:59 K70vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx.  1 root root   17 Jun 12 12:26 K73winbind -> ../init.d/winbind
lrwxrwxrwx.  1 root root   19 Jun 12 12:26 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx.  1 root root   15 Jun 12 11:15 K75netfs -> ../init.d/netfs
lrwxrwxrwx.  1 root root   24 Jun 12 12:26 K84NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx.  1 root root   24 Jun 27 11:59 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx.  1 root root   19 Jun 12 10:58 K85mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx.  1 root root   20 Jun 12 12:25 K85messagebus -> ../init.d/messagebus
lrwxrwxrwx.  1 root root   20 Jun 12 10:58 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx.  1 root root   21 Jun 12 10:57 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx.  1 root root   16 Jun 12 10:58 K88auditd -> ../init.d/auditd
lrwxrwxrwx.  1 root root   15 Jun 27 11:59 K88iscsi -> ../init.d/iscsi
lrwxrwxrwx.  1 root root   17 Jun 12 10:57 K88rsyslog -> ../init.d/rsyslog
lrwxrwxrwx.  1 root root   16 Jun 12 10:58 K89iscsid -> ../init.d/iscsid
lrwxrwxrwx.  1 root root   21 Jun 12 13:01 K89portreserve -> ../init.d/portreserve
lrwxrwxrwx.  1 root root   15 Jun 12 11:15 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx.  1 root root   17 Jun 12 11:15 K90network -> ../init.d/network
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 K92ip6tables -> ../init.d/ip6tables
lrwxrwxrwx.  1 root root   18 Jun 12 10:57 K92iptables -> ../init.d/iptables
lrwxrwxrwx.  1 root root   22 Jun 12 10:58 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx.  1 root root   26 Jun 12 10:58 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx.  1 root root   19 Jun 12 10:57 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx.  1 root root   15 Jun 26 12:32 S95jexec -> ../init.d/jexec
lrwxrwxrwx.  1 root root   16 Jun 12 11:15 S99single -> ../init.d/single

當您切換執行級別時,唯一執行的就是/etc/rc.d/rc${NEW_LEVEL}.d/.

這意味著您是對的:從另一個執行級別切換時,每個 rc*.d目錄都需要能夠處理**所有程序/服務更改。**因此,每個 rc 目錄都包含一整套用於達到該執行級別的腳本。

假設您正在切換到執行級別 3。/etc/rc.d/rc3.d/K*腳本將嘗試終止在您之前的執行級別中執行的任何程序(可以是任何數字),並且/etc/rc.d/rc3.d/S*腳本將啟動任何需要啟動的程序(並且尚未啟動)從上一個執行級別開始)。

顯然,管理所有這些符號連結將是一件非常痛苦的事情,因此有一些實用程序可以幫助管理它。在 Debian 和 Ubuntu(至少,也許是其他)上,您可以使用update-rc.d選擇性地啟用/禁用在 中找到的腳本/etc/init.d,或者將它們設置為每個腳本的“預設”或推薦設置。這將為您創建和更新所有符號連結,以反映您想要進行的任何配置更改。在 CentOS 上,我知道你可以使用ntsysvchkconfig做同樣的事情。

實際上,您永遠不會自己觸摸/etc/rc*.d/(或/etc/rc.d/rc*.d/)中的文件;您總是使用工具(例如update-rc.dntsysvchkconfig)進行任何更改。

如果我告訴我的系統進入執行級別 3,這是否意味著它首先執行執行級別 0、1、2,然後最終執行執行級別 3?

不,不是的。以這種方式執行級別不是連續的。

恰當的例子:執行級別 0通常是“關閉”執行級別,它停止所有服務並最終停止(並可能關閉)系統。如果為了獲得一個完全執行的系統,init 首先進入執行級別 0,那將不是很好。

也就是說,在引導過程中**通常會有一個進展。核心在執行級別 1 中初始化,然後將控制權傳遞給 init,通常配置為進入執行級別 2(無網路的多使用者),然後是執行級別 3(完全可操作的文本模式),可能還有執行級別 5(完全可操作)圖形模式)。但這實際上是完全可配置的,並且執行級別的細節主要是按照慣例。我認為至少在過去,Debian 已經將執行級別 4 用於完全可操作的圖形模式,例如,在我的 Debian Wheezy 上,執行級別 2 和 3 似乎是相同的(不輸出任何內容)。每個執行級別對應的確切內容取決於管理員。diff <(ls /etc/rc2.d) <(ls /etc/rc3.d)

同樣按照慣例,執行級別 6 通常設置為重新啟動系統;您可以直接從執行級別 1 跳轉到執行級別 6,尤其是在系統維護期間,如果某些東西阻止了作業系統正常啟動。

還值得注意的是,非 Linux 系統可能對不同執行級別的用途有不同的想法,或者有不同數量的可用執行級別。這個概念在 *nix 世界中可能非常普遍,但實現和實際使用可能會有很大差異。

總而言之,“執行級別”只是一種將相關程序和系統狀態分組到管理員可以選擇的可管理捆綁包中的便捷方式。(順便說一句,Windows 有一個非常相似的概念,它的故障安全模式、網路故障安全、命令提示符的故障安全、正常啟動等等。)

引用自:https://unix.stackexchange.com/questions/82379