對於 Linux 管理員來講這是一個重要(美妙)的話題,因此每一個人都必須知道,並練習怎樣才能更高效的使用它們。linux
在 Linux 中,不管什麼時候當你安裝任何帶有服務和守護進程的包,系統默認會把這些服務的初始化及 systemd 腳本添加進去,不過此時它們並無被啓用。ios
咱們須要手動的開啓或者關閉那些服務。Linux 中有三個著名的且一直在被使用的初始化系統。正則表達式
在以 Linux/Unix 爲基礎的操做系統上,init (初始化的簡稱) 是內核引導系統啓動過程當中第一個啓動的進程。shell
init 的進程 id (pid)是 1,除非系統關機不然它將會一直在後臺運行。bash
init 首先根據 /etc/inittab 文件決定 Linux 運行的級別,而後根據運行級別在後臺啓動全部其餘進程和應用程序。socket
BIOS、MBR、GRUB 和內核程序在啓動 init 以前就做爲 Linux 的引導程序的一部分開始工做了。工具
下面是 Linux 中可使用的運行級別(從 0~6 總共七個運行級別):操作系統
下面是 Linux 系統中最經常使用的三個初始化系統:命令行
System V(Sys V)是類 Unix 系統第一個也是傳統的初始化系統。init 是內核引導系統啓動過程當中第一支啓動的程序,它是全部程序的父進程。ssr
大部分 Linux 發行版最開始使用的是叫做 System V(Sys V)的傳統的初始化系統。在過去的幾年中,已經發布了好幾個初始化系統以解決標準版本中的設計限制,例如:launchd、Service Management Facility、systemd 和 Upstart。
可是 systemd 已經被幾個主要的 Linux 發行版所採用,以取代傳統的 SysV 初始化系統。
Upstart 是一個基於事件的 /sbin/init 守護進程的替代品,它在系統啓動過程當中處理任務和服務的啓動,在系統運行期間監視它們,在系統關機的時候關閉它們。
它最初是爲 Ubuntu 而設計,可是它也可以完美的部署在其餘全部 Linux系統中,用來代替古老的 System-V。
Upstart 被用於 Ubuntu 從 9.10 到 Ubuntu 14.10 和基於 RHEL 6 的系統,以後它被 systemd 取代。
systemd 是一個新的初始化系統和系統管理器,它被用於全部主要的 Linux 發行版,以取代傳統的 SysV 初始化系統。
systemd 兼容 SysV 和 LSB 初始化腳本。它能夠直接替代 SysV 初始化系統。systemd 是被內核啓動的第一個程序,它的 PID 是 1。
systemd 是全部程序的父進程,Fedora 15 是第一個用 systemd 取代 upstart 的發行版。systemctl 用於命令行,它是管理 systemd 的守護進程/服務的主要工具,例如:(開啓、重啓、關閉、啓用、禁用、重載和狀態)
systemd 使用 .service 文件而不是 bash 腳本(SysVinit 使用的)。systemd 將全部守護進程添加到 cgroups 中排序,你能夠經過瀏覽 /cgroup/systemd 文件查看系統等級。
chkconfig 實用程序是一個命令行工具,容許你在指定運行級別下啓動所選服務,以及列出全部可用服務及其當前設置。
此外,它還容許咱們從啓動中啓用或禁用服務。前提是你有超級管理員權限(root 或者 sudo)運行這個命令。
全部的服務腳本位於 /etc/rd.d/init.d文件中
--list 參數會展現全部的服務及其當前狀態(啓用或禁用服務的運行級別):
# chkconfig --list NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off . .
若是你想查看運行級別下某個服務的狀態,你可使用下面的格式匹配出須要的服務。
好比說我想查看運行級別中 auditd 服務的狀態
# chkconfig --list| grep auditd auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
使用 --level 參數啓用指定運行級別下的某個服務,下面展現如何在運行級別 3 和運行級別 5 下啓用 httpd 服務。
# chkconfig --level 35 httpd on
一樣使用 --level 參數禁用指定運行級別下的服務,下面展現的是在運行級別 3 和運行級別 5 中禁用 httpd 服務。
# chkconfig --level 35 httpd off
-–add 參數容許咱們添加任何新的服務到啓動列表中,默認狀況下,新添加的服務會在運行級別 二、三、四、5 下自動開啓。 # chkconfig --add nagios
可使用 --del 參數從啓動列表中刪除服務,下面展現的是如何從啓動列表中刪除 Nagios 服務。
# chkconfig --del nagios
systemctl 用於命令行,它是一個用來管理 systemd 的守護進程/服務的基礎工具,例如:(開啓、重啓、關閉、啓用、禁用、重載和狀態)。
全部服務建立的 unit 文件位與 /etc/systemd/system/。
使用下面的命令列出所有的服務(包括啓用的和禁用的)。
# systemctl list-unit-files --type=service UNIT FILE STATE arp-ethers.service disabled auditd.service enabled autovt@.service enabled blk-availability.service disabled brandbot.service static chrony-dnssrv@.service static chrony-wait.service disabled chronyd.service enabled cloud-config.service enabled cloud-final.service enabled cloud-init-local.service enabled cloud-init.service enabled console-getty.service disabled console-shell.service disabled container-getty@.service static cpupower.service disabled crond.service enabled . . 150 unit files listed.
使用下面的格式經過正則表達式匹配出你想要查看的服務的當前狀態。下面是使用 systemctl 命令查看 httpd 服務的狀態。
# systemctl list-unit-files --type=service | grep httpd httpd.service disabled
使用下面格式的 systemctl 命令啓用一個指定的服務。啓用服務將會建立一個符號連接,以下可見:
# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
運行下列命令再次確認服務是否被啓用。
# systemctl is-enabled httpd enabled
運行下面的命令禁用服務將會移除你啓用服務時所建立的符號連接。
# systemctl disable httpd Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
運行下面的命令再次確認服務是否被禁用。
# systemctl is-enabled httpd disabled
使用 systemctl 命令確認你係統當前的運行級別,runlevel 命令仍然可在 systemd 下工做,不過,運行級別對於 systemd 來講是一個歷史遺留的概念。因此我建議你所有使用 systemctl 命令。
咱們當前處於運行級別 3, 它等同於下面顯示的 multi-user.target。
# systemctl list-units --type=target UNIT LOAD ACTIVE SUB DESCRIPTION basic.target loaded active active Basic System cloud-config.target loaded active active Cloud-config availability cryptsetup.target loaded active active Local Encrypted Volumes getty.target loaded active active Login Prompts local-fs-pre.target loaded active active Local File Systems (Pre) local-fs.target loaded active active Local File Systems multi-user.target loaded active active Multi-User System network-online.target loaded active active Network is Online network-pre.target loaded active active Network (Pre) network.target loaded active active Network paths.target loaded active active Paths remote-fs.target loaded active active Remote File Systems slices.target loaded active active Slices sockets.target loaded active active Sockets swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers