Linux啟動流程和服務管理
一.
Linux啟動流程
Rhel6啟動過程:

Rhel7啟動過程:

GRUB2相較于GRUB一代的提升:更健壯、可移植、更強大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分區表。支持非Linux系統,如蘋果HFS文件系統和Windows的NTFS文件系統。
systemd 被設計用來改進 sysvinit 的缺點,它和ubuntu的upstart是競爭對手,預計會取代它們。
systemd的目標是:盡可能啟動更少進程;盡可能將更多進程并行啟動。systemd盡可能減少對shell腳本的依賴。傳統sysvinit使用inittab來決定運行哪些shell腳本,大量使用shell腳本被認為是效率低下無法并行的原因。systemd使用了Linux專屬技術,不再顧及POSIX兼容。
init和Systemd的區別
init:
- 一是啟動時間長,init是串行啟動,只有前一個進程啟動完,才會啟動下一個進程。
- 二是啟動腳本復雜,Init進程只是執行啟動腳本,不管其他事情,腳本需要自己處理各種情況,這往往使得腳本變得很長。
- 由Linux內核加載運行,位于 /sbin/init ,是系統中第一個進程,PID永遠為1。

對于支持 service 的程序,安裝的時候,會自動的在 /etc/init.d 目錄添加一個配置文件。當我們使用 service 控制程序時,比如執行開啟httpd的服務:service httpd start 。那么我們的 service 就會開啟 /etc/init.d/httpd 配置文件里面指向的 /usr/sbin/httpd 可執行文件。

systemd:
- 按需啟動服務,減少系統資源消耗。
- 盡可能并行啟動進程,減少系統啟動等待時間。
- 由Linx內核加載運行,位于 /usr/lib/systemd/systemd ,是系統中第一個進程,PID永遠為1。

對于支持 systemd 的程序,安裝的時候,會自動的在 /usr/lib/systemd/system 目錄添加一個配置文件。當我們使用 systemctl 控制該程序時,比如執行開啟httpd服務:systemctl start httpd.service 。那么我們的 systemctl 就會開啟 httpd.service 配置里面指向的 /usr/sbin/httpd 可執行文件。

如果我們想讓該程序開機啟動,我們可以執行命令 systemctl enable httpd,這個命令相當于在 /etc/systemd/system 目錄添加一個軟鏈接,指向 /usr/lib/systemd/system 目錄下的 httpd.service 文件。這是因為開機時,Systemd只執行 /etc/systemd/system目錄里面的配置文件。

Init 進程的配置文件:

Systemd進程的配置文件:

運行級別和說明:

查看運行級別:
- runlevel : 顯示切換前的運行級別 和當前運行級別 (6/7)
- systemctl get-default : 顯示當前運行級別 (7)
永久設置開機模式
- systemctl set-default multi-user.target 開機默認為文本模式
- systemctl set-default graphical.target 開機默認為圖形模式
- 修改 /etc/inittab 默認運行級別配置文件
二.
Linux服務管理(service,systemctl)
Rhel6 用 service 和 chkconfig 來管理服務,它是 SystemV 架構下的一個工具。Rhel7 是用 systemctl 來管理服務,它融合了之前的 service 和 chkconfig 的功能于一體。可以使用它永久性或只在當前會話中啟用/禁用服務。systemctl 是 systemd 架構下的一個工具。

systemd的一些常用命令:
列出所有可用單元 :systemctl list-unit-files
列出所有運行的單元:systemctl list-unit-files | grep enabled 列出所有可用服務:systemctl list-unit-files --type=service
列出所有運行的服務:systemctl list-unit-files --type=service | grep enabled
屏蔽httpd服務:systemctl mask httpd