Linux
如何確定係統是否使用 SysV、Upstart 或 Systemd initsystem
有沒有一種簡單的方法可以找出最近
Debian wheezy
或系統正在使用哪個初始化Fedora
系統?我知道Fedora 21
使用systemd
initsystem 但那是因為我讀過它並且因為所有相關的腳本/符號連結都儲存在/etc/systemd/
. 但是,我不確定例如Debian squeeze
或CentOS 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.