Linux

如何確定係統是否使用 SysV、Upstart 或 Systemd initsystem

  • July 30, 2017

有沒有一種簡單的方法可以找出最近Debian wheezy或系統正在使用哪個初始化Fedora系統?我知道Fedora 21使用systemdinitsystem 但那是因為我讀過它並且因為所有相關的腳本/符號連結都儲存在/etc/systemd/. 但是,我不確定例如Debian squeezeCentOS 6 or 7等等。

存在哪些技術來驗證這種初始化系統?

您可以在系統中四處尋找指標。一種方法是檢查三個目錄是否存在:

  • /usr/lib/systemd告訴你你在一個基於 systemd 的系統上。
  • /usr/share/upstart是一個很好的指標,表明您使用的是基於 Upstart 的系統。
  • /etc/init.d告訴你盒子的歷史中有 SysV init

問題是,這些是必須一起考慮的啟發式方法,可能與其他數據一起考慮,而不是某些指標本身。我現在正在查看的 Ubuntu 14.10 框包含所有三個目錄。為什麼?因為 Ubuntu 在該版本中剛剛從 Upstart 切換到 systemd,但保留 Upstart 和 SysV init 以實現向後兼容性。

最後,我認為最好的答案是“經驗”。你會看到你已經登錄到一個 CentOS 7 機器並且知道它是 systemd。你怎麼學這個?到處玩,RTFMing 等。以同樣的方式獲得所有經驗。

我意識到這不是一個非常令人滿意的答案,但是當市場上出現碎片化、創建非標准設計時就會發生這種情況。這就像問你怎麼知道是否ls接受-C,或--color,或根本不進行顏色輸出。同樣,答案是“經驗”。

init 程序總是被分配 PID 1。/proc文件系統提供了一種方法來獲取給定 PID 的執行檔的路徑。

換句話說:

nathan@nathan-desktop:~$ sudo stat /proc/1/exe
 File: '/proc/1/exe' -> '/sbin/upstart'

如您所見,我的 Ubuntu 14.10 機器上的初始化程序是 Upstart。Ubuntu 15.04 使用 systemd,因此執行該命令會產生:

nathan@nathan-gnome:~$ sudo stat /proc/1/exe
 File: '/proc/1/exe' -> '/lib/systemd/systemd'

如果您所在的系統因此而給出/sbin/init結果,那麼您將要嘗試統計該文件:

nathan@nathan-gnome:~$ sudo stat /proc/1/exe
 File: '/proc/1/exe' -> '/sbin/init'
nathan@nathan-gnome:~$ stat /sbin/init
 File: ‘/sbin/init’ -> ‘/lib/systemd/systemd’

您也可以執行它以了解更多資訊:

[user@centos ~]$ /sbin/init --version
init (upstart 0.6.5)
Copyright (C) 2010 Canonical Ltd.

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