如何弄清Linux系統(tǒng)運(yùn)行何種系統(tǒng)管理程序
雖然我們經(jīng)常聽到系統(tǒng)管理器這詞,但很少有人深究其確切意義?,F(xiàn)在我們將向你展示其區(qū)別。
我會(huì)盡自己所能來解釋清楚一切。我們大多都知道 System V 和 systemd 兩種系統(tǒng)管理器。 System V (簡(jiǎn)寫 SysV) 是老式系統(tǒng)所使用的古老且傳統(tǒng)的初始化系統(tǒng)及系統(tǒng)管理器。
Systemd 是全新的初始化系統(tǒng)及系統(tǒng)管理器,并且已被大部分主流 Linux 發(fā)行版所采用。
Linux 系統(tǒng)中主要有三種有名而仍在使用的初始化系統(tǒng)。大多數(shù) Linux 發(fā)行版都使用其中之一。
什么是初始化系統(tǒng)管理器?
在基于 Linux/Unix 的操作系統(tǒng)中,init
(初始化的簡(jiǎn)稱) 是內(nèi)核啟動(dòng)系統(tǒng)時(shí)開啟的***個(gè)進(jìn)程。
它持有的進(jìn)程 ID(PID)號(hào)為 1,其在后臺(tái)一直運(yùn)行著,直到關(guān)機(jī)。
init
會(huì)查找 /etc/inittab
文件中相應(yīng)配置信息來確定系統(tǒng)的運(yùn)行級(jí)別,然后根據(jù)運(yùn)行級(jí)別在后臺(tái)啟動(dòng)所有的其它進(jìn)程和應(yīng)用。
作為 Linux 啟動(dòng)過程的一部分,BIOS、MBR、GRUB 和內(nèi)核進(jìn)程在此進(jìn)程之前就被激活了。
下面列出的是 Linux 的可用運(yùn)行級(jí)別(存在七個(gè)運(yùn)行級(jí)別,從 0 到 6)。
0
:停機(jī)1
:?jiǎn)斡脩裟J?/li>2
:多用戶,無 NFS(LCTT 譯注:NFS 即 Network File System,網(wǎng)絡(luò)文件系統(tǒng))3
:全功能多用戶模式4
:未使用5
:X11(GUI – 圖形用戶界面)6
:重啟
下面列出的是 Linux 系統(tǒng)中廣泛使用的三種初始化系統(tǒng)。
- System V (Sys V):是類 Unix 操作系統(tǒng)傳統(tǒng)的也是首款初始化系統(tǒng)。
- Upstart:基于事件驅(qū)動(dòng),是
/sbin/init
守護(hù)進(jìn)程的替代品。 - Systemd:是一款全新的初始化系統(tǒng)及系統(tǒng)管理器,它被所有主流的 Linux 發(fā)行版實(shí)現(xiàn)/采用,以替代傳統(tǒng)的 SysV 初始化系統(tǒng)。
什么是 System V (Sys V)?
System V(Sys V)是類 Unix 操作系統(tǒng)傳統(tǒng)的也是首款初始化系統(tǒng)。init
是系統(tǒng)由內(nèi)核啟動(dòng)期間啟動(dòng)的***個(gè)進(jìn)程,它是所有進(jìn)程的父進(jìn)程。
起初,大多數(shù) Linux 發(fā)行版都使用名為 System V(SysV)的傳統(tǒng)的初始化系統(tǒng)。多年來,為了解決標(biāo)準(zhǔn)版本中的設(shè)計(jì)限制,發(fā)布了幾個(gè)替代的初始化系統(tǒng),例如 launchd、Service Management Facility、systemd 和 Upstart。
但只有 systemd 最終被幾個(gè)主流 Linux 發(fā)行版所采用,以替代傳統(tǒng)的 SysV。
什么是 Upstart?
Upstart 基于事件驅(qū)動(dòng),是 /sbin/init
守護(hù)進(jìn)程的替代品。用來在啟動(dòng)期間控制任務(wù)和服務(wù)的啟動(dòng),在關(guān)機(jī)期間停止它們,及在系統(tǒng)運(yùn)行過程中監(jiān)視它們。
它最初是為 Ubuntu 發(fā)行版開發(fā)的,但也可以在所有的 Linux 發(fā)行版中部署運(yùn)行,以替代古老的 System V 初始化系統(tǒng)。
它用于 Ubuntu 9.10 到 14.10 版本和基于 RHEL 6 的系統(tǒng)中,之后的被 systemd 取代了。
什么是 systemd?
systemd 是一款全新的初始化系統(tǒng)及系統(tǒng)管理器,它被所有主流的 Linux 發(fā)行版實(shí)現(xiàn)/采用,以替代傳統(tǒng)的 SysV 初始化系統(tǒng)。
systemd 與 SysV 和 LSB(LCTT 譯注:Linux Standards Base) 初始化腳本兼容。它可以作為 SysV 初始化系統(tǒng)的直接替代品。其是內(nèi)核啟動(dòng)的***個(gè)進(jìn)程并占有數(shù)字 1 的 PID,它是所有進(jìn)程的父進(jìn)程。
Fedora 15 是***個(gè)采用 systemd 而不是 upstart 的發(fā)行版。systemctl 是一款命令行工具,它是管理 systemd 守護(hù)進(jìn)程/服務(wù)(如 start
、restart
、stop
、enable
、disable
、reload
和 status
)的主要工具。
systemd 使用 .service
文件而不是(SysV 初始化系統(tǒng)使用的) bash 腳本。systemd 把所有守護(hù)進(jìn)程按順序排列到自己 Cgroups (LCTT 譯注:Cgroups 是 control groups 的縮寫,是 Linux 內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源,如:cpu、memory、IO 等的機(jī)制。最初由 Google 的工程師提出,后來被整合進(jìn) Linux 內(nèi)核。Cgroups 也是 LXC 為實(shí)現(xiàn)虛擬化所使用的資源管理手段,可以說沒有 cgroups 就沒有 LXC)中,所以通過查看 /cgroup/systemd
文件就可以查看系統(tǒng)層次結(jié)構(gòu)。
在 Linux 上如何識(shí)別出系統(tǒng)管理器
在系統(tǒng)上運(yùn)行如下命令來查看運(yùn)行著什么系統(tǒng)管理器:
(LCTT 譯注:原文繁冗啰嗦,翻譯時(shí)進(jìn)行了裁剪整理。)
方法 1:使用 ps 命令
ps
– 顯示當(dāng)前進(jìn)程快照。ps
會(huì)顯示選定的活動(dòng)進(jìn)程的信息。其輸出不能確切區(qū)分出是 System V(SysV) 還是 upstart,所以我建議使用其它方法。
# ps -p1 | grep "init\|upstart\|systemd"
1 ? 00:00:00 init
方法 2:使用 rpm 命令
RPM 即 Red Hat Package Manager (紅帽包管理),是一款功能強(qiáng)大的安裝包管理命令行工具,在基于 Red Hat 的發(fā)行版中使用,如 RHEL、CentOS、Fedora、openSUSE 和 Mageia。此工具可以在系統(tǒng)/服務(wù)上對(duì)軟件進(jìn)行安裝、更新、刪除、查詢及驗(yàn)證等操作。通常 RPM 文件都帶有 .rpm
后綴。
RPM 會(huì)使用必要的庫(kù)和依賴庫(kù)來構(gòu)建軟件,并且不會(huì)與系統(tǒng)上安裝的其它包沖突。
# rpm -qf /sbin/init
SysVinit-2.86-17.el5
方法 3:使用 /sbin/init 文件
/sbin/init
程序會(huì)將根文件系統(tǒng)從內(nèi)存加載或切換到磁盤。
這是啟動(dòng)過程的主要部分。這個(gè)進(jìn)程開始時(shí)的運(yùn)行級(jí)別為 “N”(無)。/sbin/init
程序會(huì)按照 /etc/inittab
配制文件的描述來初始化系統(tǒng)。
# /sbin/init --version
init (upstart 0.6.5)
Copyright (C) 2010 Canonical Ltd.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.