1. 程式人生 > >為什麽說Ubuntu的運行級別為2

為什麽說Ubuntu的運行級別為2

col sku xpl ref width 發展 獲取 forum 表格

繼上一篇文章http://www.cnblogs.com/EasonJim/p/7163069.html深入研究了Linux的運行級別之後,發現網上大部分都說Ubuntu的運行級別默認為2,那麽下面就深入分析以下為什麽是2而不是其它。

分析過程:

首先從http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=221304這篇文章了解到Debian系的運行級別2~5都是一樣的。並通過

cd /etc/init
less rc-sysinit.conf

發現裏面有句:env DEFAULT_RUNLEVEL=2,所以在這個發現上,可以說明Ubuntu的默認運行級別為2。

而且從以下網站內容中也很多人普遍說明這個問題:

https://debian-administration.org/article/212/An_introduction_to_run-levels

http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html

https://stackoverflow.com/questions/16227792/runlevel-2-and-5-works-the-same-on-ubuntu

https://unix.stackexchange.com/questions/39411/why-does-debian-and-ubuntu-default-to-runlevel-2

https://wiki.debian.org/RunLevel

http://www.pathbreak.com/blog/ubuntu-startup-init-scripts-runlevels-upstart-jobs-explained

https://askubuntu.com/questions/686700/no-difference-between-runlevel-3-and-5-in-ubuntu-15-04

所以總結上面所說的,應該是這樣:根據Debian策略手冊,默認情況下,運行級別2到5之間沒有區別。如下所示:

0 : System halt.
1 : Single-User mode
. 2 : Graphical multi-user plus networking (DEFAULT) 3 : Same as "2", but not used. 4 : Same as "2", but not used. 5 : Same as "2", but not used. 6 : System reboot.

也就是說,在Debian系的系統上,2為默認級別,其余的3~5都沒有使用。且官方介紹也是從2開始說起。

但是奇怪的發現,如果在Ubuntu 16.04的系統上運行runlevel命令,得到的是N 5,這於下面所示的級別上對應的就是GUI:

運行級別 名稱 描述
0 關閉系統
1 單用戶模式 管理任務模式。
2 多用戶模式 不配置網絡接口,不導出網絡服務
3 多用戶模式與網絡 正常啟動系統
4 未使用/用戶可定??義 為了特殊目的
5 使用GUI顯示管理器正常啟動系統 運行級別3 +顯示管理器
6 重啟 重新啟動系統
s或S 單用戶模式 不配置網絡接口或啟動後臺進程。

或者會不會這樣,在Server版本裏面才會顯示2,其實不是,經過測試,在Server 16.04版本上同樣是N 5。

那麽這樣就奇怪了,會不會是隨著版本的升級,這個啟動級別同樣也升級了。

從http://forum.ubuntu.org.cn/viewtopic.php?t=474412,發現Ubuntu系統級別的變更歷史:

1、Ubuntu 6.10及以前版本使用Sysvinit。

2、Ubuntu 14.10及以前版本使用Upstart但是還留著Sysvinit並存。

https://wiki.ubuntu.com/Upstart

https://help.ubuntu.com/community/UpstartHowto

3、Ubuntu 15.04開始預設使用Systemd,但是可以在開機選項選擇使用Systemd或Upstart,但是不可同時使用Sysvinit或Upstart並存。

https://wiki.ubuntu.com/SystemdForUpstartUsers

而Systemd不再使用runlevel進行代表,而是使用target進行展示,對照的表格如下:

   Mapping between runlevels and systemd targets
   ┌─────────┬───────────────────┐
   │Runlevel │ Target            │
   ├─────────┼───────────────────┤
   │0        │ poweroff.target   │
   ├─────────┼───────────────────┤
   │1        │ rescue.target     │
   ├─────────┼───────────────────┤
   │2, 3, 4  │ multi-user.target │
   ├─────────┼───────────────────┤
   │5        │ graphical.target  │
   ├─────────┼───────────────────┤
   │6        │ reboot.target     │
   └─────────┴───────────────────┘

這個表格出自:https://askubuntu.com/questions/788323/change-runlevel-on-16-04

那麽我在測試時發現,在桌面版還是服務器版的Ubuntu 16.04獲取默認的target時。都是顯示graphical.target,也就是與N 5這個級別對應的。(命令:systemctl get-default

但似乎這個也沒有多少結論說明默認級別為2的問題。

總結:

所以,我猜測,由於歷史原因,在15.04之前,系統級別應該還是以2為默認,但是經過15.04,使用了Systemd的問題,默認級別上改為了5為默認,而經過上面的歷史發展,無論在2~5之間,都是沒有區別的。

或者是由於Systemd這個的使用,使以前的一些文章上如何修改系統運行級別的,在16.04不生效的問題。那麽要修改運行級別,可以參考這篇文章進行修改:https://askubuntu.com/questions/788323/change-runlevel-on-16-04

其它發現:

如果16.04的系統以5為默認級別,那麽我建立一個服務之後,放在2級別上面就不會運行嗎?不是這樣的,系統的運行級別是說從小到大的依次運行,要運行到5,那麽會經過2;所以,我們在設置服務時,也就是直接在2上設置自動啟動就行了,但是發現一些服務會在2~5都設置自動運行,所以我猜測,這樣的做法應該是為了保險,無論在哪個運行級別都能啟動這個服務。參考:https://askubuntu.com/questions/323374/run-levels-only-at-start-up;

還有一些做法是在2~4設置啟動,然後到5就以K開頭去殺死,我覺得這種做法可以實現效果,但是如果按照上面的總結,依次運行的運行級別,會不會有點浪費資源,要先啟動再殺死,倒不如從一開始的2級別到5級別都不啟動好一些。

參考:

https://unix.stackexchange.com/questions/170555/why-is-my-debian-jessie-always-in-runlevel-5

https://askubuntu.com/questions/788323/change-runlevel-on-16-04

https://askubuntu.com/questions/323374/run-levels-only-at-start-up

https://askubuntu.com/questions/686700/no-difference-between-runlevel-3-and-5-in-ubuntu-15-04

http://www.pathbreak.com/blog/ubuntu-startup-init-scripts-runlevels-upstart-jobs-explained

https://wiki.debian.org/RunLevel

https://unix.stackexchange.com/questions/39411/why-does-debian-and-ubuntu-default-to-runlevel-2

https://stackoverflow.com/questions/16227792/runlevel-2-and-5-works-the-same-on-ubuntu

http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html

https://debian-administration.org/article/212/An_introduction_to_run-levels

為什麽說Ubuntu的運行級別為2