亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

linux systemctl命令詳解

 更新時間:2018年03月16日 11:19:25   作者:sparkdev  
這篇文章主要介紹了linux systemctl命令詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

筆者在前文中概要的介紹了 systemd 的基本概念和主要特點。由于 systemd 相關(guān)的絕大多數(shù)任務都是通過 systemctl 命令管理的,所以本文將集中的介紹 systemctl 命令的用法。注意,本文以 ubuntu 16.04 進行介紹,文中所有的 demo 都在 ubuntu 16.04 中完成。

systemctl 命令有兩大類功能:

  1. 控制 systemd 系統(tǒng)
  2. 管理系統(tǒng)上運行的服務

在介紹這些功能前讓我們先來熱個身,了解些 systemctl 命令自身相關(guān)的信息。

預熱

檢查 systemd 的版本

$ systemctl --version

查看 systemd 和 systemctl 程序相關(guān)的目錄

$ whereis systemd
$ whereis systemctl

確認 1 號進程

作為 init 系統(tǒng),systemd 進程作為系統(tǒng)中的 1 號進程應該是毋庸置疑的,讓我們搜索與 systemd 相關(guān)的進程:

結(jié)果讓人有點不敢相信自己的眼睛,我們搜到了好幾個與 systemd 相關(guān)的進程,但是卻沒有 1 號進程。讓我們看看 1 號進程是誰:

/sbin/init 是什么?

好吧,/sbin/init 只是到 /lib/systemd/systemd 的鏈接文件,系統(tǒng)的 1 號進程的確是 systemd,只不過在 ubuntu 系統(tǒng)中被起了個別名叫 /sbin/init。

管理單個 unit

systemctl 提供了一組子命令來管理單個的 unit,其命令格式為:
systemctl [command] [unit]
command 主要有:
start:立刻啟動后面接的 unit。
stop:立刻關(guān)閉后面接的 unit。
restart:立刻關(guān)閉后啟動后面接的 unit,亦即執(zhí)行 stop 再 start 的意思。
reload:不關(guān)閉 unit 的情況下,重新載入配置文件,讓設置生效。
enable:設置下次開機時,后面接的 unit 會被啟動。
disable:設置下次開機時,后面接的 unit 不會被啟動。
status:目前后面接的這個 unit 的狀態(tài),會列出有沒有正在執(zhí)行、開機時是否啟動等信息。
is-active:目前有沒有正在運行中。
is-enable:開機時有沒有默認要啟用這個 unit。
kill :不要被 kill 這個名字嚇著了,它其實是向運行 unit 的進程發(fā)送信號。
show:列出 unit 的配置。
mask:注銷 unit,注銷后你就無法啟動這個 unit 了。
unmask:取消對 unit 的注銷。

我們先通過 prometheus.service 來觀察服務類型 unit 的基本信息:

輸出內(nèi)容的第一行是對 unit 的基本描述。
第二行中的 Loaded 描述操作系統(tǒng)啟動時會不會啟動這個服務,enabled 表示開機時啟動,disabled 表示開機時不啟動。而啟動該服務的配置文件路徑為:/lib/systemd/system/prometheus.service。
第三行 中的 Active 描述服務當前的狀態(tài),active (running) 表示服務正在運行中。如果是 inactive (dead) 則表示服務當前沒有運行。后面則是服務的啟動時間。
第四行的 Docs 提供了在線文檔的地址。
下面的 Main PID 表示進程的 ID,接下來是任務的數(shù)量,占用的內(nèi)存和 CPU 資源。
再下面的 Cgroup 描述的是 cgrpup 相關(guān)的信息,筆者會在后續(xù)的文章中詳細的介紹。
最后是輸出的日志信息。

關(guān)于 unit 的啟動狀態(tài),除了 enable 和 disable 之外還有:
static:這個 unit 不可以自己啟動,不過可能會被其它的 enabled 的服務來喚醒。
mask:這個 unit 無論如何都無法被啟動!因為已經(jīng)被強制注銷??赏ㄟ^ systemctl unmask 改回原來的狀態(tài)。

關(guān)于 unit 的運行狀態(tài) Active,除了 active 和 inactive 之外還有:
active (exited):僅執(zhí)行一次就正常結(jié)束的服務,目前并沒有任何程序在系統(tǒng)中執(zhí)行。舉例來說,開機或者是掛載時才會進行一次的 quotaon 功能,就是這種模式! Quotaon 不需要一直執(zhí)行,只在執(zhí)行一次之后,就交給文件系統(tǒng)去自行處理。通常用 bash shell 寫的小型服務,大多是屬于這種類型。
active (waiting):正在執(zhí)行當中,不過還再等待其他的事件才能繼續(xù)處理。舉例來說,打印的相關(guān)服務就是這種狀態(tài)。

enable 和 disable 操作

比如我們?yōu)?prometheus 服務創(chuàng)建了配置文件 /lib/systemd/system/prometheus.service,然后執(zhí)行 enable 命令:

$ sudo systemctl enable prometheus.service 

所謂的 enable 就是在 multi-user.target.wants 下面創(chuàng)建了一個鏈接文件:

至于為什么會鏈接到 multi-user.target.wants 目錄下,則是由 prometheus.server 文件中的配置信息決定的。

查看 unit 的配置

使用 show 子命令可以查看 unit 的詳細配置情況:

$ sudo systemctl show prometheus.service

這里的輸出非常多,主要是很多的默認設置也都顯示出來了。

注銷與反注銷 unit

如果我們想暫時的禁用某個 unit,比如 prometheus.service,可以注銷這個 unit,注銷之后就無法再啟動這個服務了:

$ sudo systemctl mask prometheus.service

從上圖中的輸出我們可以看到,所謂的注銷就是把 prometheus.service 文件鏈接到 /dev/null 這個空設備中去了。所以就無法再啟動該服務了。下面我們嘗試執(zhí)行一次反注銷:

$ sudo systemctl unmask prometheus.service

unmask 操作就是刪除掉 mask 操作中創(chuàng)建的鏈接。

查看系統(tǒng)上的 unit

systemctl 提供了子命令可以查看系統(tǒng)上的 unit,命令格式為:
systemctl [command] [--type=TYPE] [--all]
command 有:
list-units:列出當前已經(jīng)啟動的 unit,如果添加 -all 選項會同時列出沒有啟動的 unit。
list-unit-files:根據(jù) /lib/systemd/system/ 目錄內(nèi)的文件列出所有的 unit。
--type=TYPE:可以過濾某個類型的 unit。
不帶任何參數(shù)執(zhí)行 systemctl 命令會列出所有已啟動的 unit:

系統(tǒng)默認啟動的服務是非常多的,上圖只截取了前面幾行。下面是對輸出的介紹:
UNIT:項目的名稱,包括各個 unit 的類別(看擴展名)。
LOAD:開機時 unit 的配置是否被加載。
ACTIVE:目前的狀態(tài),須與后續(xù)的 SUB 搭配!就是我們用 systemctl status 觀察時,active的內(nèi)容。
DESCRIPTION:描述信息。
注意,systemctl 不加參數(shù),其實等同于 systemctl list-units!

下面我們查看系統(tǒng)上一共安裝了多少 unit:

$ sudo systemctl list-unit-files

結(jié)果也非常的多,我們?nèi)匀恢唤厝∫徊糠纸Y(jié)果。這里的 STATE 就是我們前面介紹的 服務的啟動狀態(tài),有 enable 和 disable、static 和 mask。

只查看某種類型的 unit

比如我們只想看服務類型的 unit:

$ systemctl list-units --type=service --all

這次只有以 .service 結(jié)尾的 unit 才會出現(xiàn)。

如果要看 mount 類型的 unit 指定 --type=mount 就可以了:

查看加載失敗的 unit

如果發(fā)現(xiàn)某個 unit 不工作,可以查看是否有 unit 加載失?。?/p>

$ systemctl --failed

管理不同的操作環(huán)境(target unit)

通過指定 --type=target 就可以用 systemctl list-units 命令查看系統(tǒng)中默認有多少種 target:

筆者的 ubuntu 16.04 中居然有 27 個 target!我們在此僅介紹幾個常用的 target。
graphical.target:就是文字界面再加上圖形界面,這個 target 已經(jīng)包含了下面的 multi-user.target。
multi-user.target:純文本模式!
rescue.target:在無法使用 root 登陸的情況下,systemd 在開機時會多加一個額外的臨時系統(tǒng),與你原本的系統(tǒng)無關(guān)。這時你可以取得 root 的權(quán)限來維護你的系統(tǒng)。
emergency.target:緊急處理系統(tǒng)的錯誤,在無法使用 rescue.target 時,可以嘗試使用這種模式!
shutdown.target:就是執(zhí)行關(guān)機。
getty.target:可以設置 tty 的配置。
正常的模式是 multi-user.target 和 graphical.target 兩個,救援方面的模式主要是 rescue.target 以及更嚴重的 emergency.target。如果要修改可提供登陸的 tty 數(shù)量,則修改 getty.target。

下面是操作 target unit 命令的格式:
systemctl [command] [unit.target]
command 有:
get-default:取得目前的 target。
set-default:設置后面接的 target 成為默認的操作模式。
isolate:切換到后面接的模式。

查看和設置默認的 target

$ sudo systemctl get-default

筆者系統(tǒng)的默認 target 為 graphical.target,所以啟動時默認啟動圖形界面。下面我們把它設置為 multi-user.target:

$ sudo systemctl set-default multi-user.target

實際的執(zhí)行過程是刪除之前的鏈接文件,然后創(chuàng)建新的到 /lib/systemd/system/multi-user.target 的鏈接文件。這樣下次開機時默認會進入純文本模式。

切換 target

我們還可以在不重新啟動的情況下切換不同的 target,比如從圖形界面切換到純文本的模式:

$ sudo systemctl isolate multi-user.target

在一般情況下,使用上述 isolate 的方式即可完成不同 target 的切換。不過為了方便起見,systemd 也提供了
幾個簡單的指令用來切換操作模式,大致如下所示:

$ sudo systemctl poweroff # 系統(tǒng)關(guān)機
$ sudo systemctl reboot  # 重新開機
$ sudo systemctl suspend  # 進入暫停模式
$ sudo systemctl hibernate # 進入休眠模式
$ sudo systemctl rescue  # 強制進入救援模式
$ sudo systemctl emergency # 強制進入緊急救援模式

這里簡單介紹一下暫停模式與休眠模式的區(qū)別
suspend:暫停模式會將系統(tǒng)的狀態(tài)保存到內(nèi)存中,然后關(guān)閉掉大部分的系統(tǒng)硬件,當然,并沒有實際關(guān)機。當用戶按下喚醒機器的按鈕,系統(tǒng)數(shù)據(jù)會從內(nèi)存中回復,然后重新驅(qū)動被大部分關(guān)閉的硬件,所以喚醒系統(tǒng)的速度比較快。
hibernate:休眠模式則是將系統(tǒng)狀態(tài)保存到硬盤當中,保存完畢后,將計算機關(guān)機。當用戶嘗試喚醒系統(tǒng)時,系統(tǒng)會開始正常運行,然后將保存在硬盤中的系統(tǒng)狀態(tài)恢復回來。因為數(shù)據(jù)需要從硬盤讀取,因此喚醒的速度比較慢(如果你使用的是 SSD 磁盤,喚醒的速度也是非??斓?。

檢查 unit 之間的依賴性

很多服務之間是有依賴關(guān)系的,systemd 的一大亮點就是可以管理 unit 之間的依賴關(guān)系。我們可以通過下面的命令來查看 unit 間的依賴關(guān)系:

systemctl list-dependencies [unit] [--reverse] 選項 --reverse 會反向追蹤是誰在使用這個 unit。

下面讓我們看看當前運行的 target 的依賴關(guān)系:

我們當前運行在 graphical.target 下,它由一個長長的依賴列表(上圖并未展示所有的項目),其中最重要的依賴項目為 multi-user.target。下面我們使用 --reverse 選項查看 multi-user.target unit 被誰使用:

$ systemctl list-dependencies multi-user.target --reverse

從上面兩張圖上我們可以確定下面的關(guān)系:graphical.target 依賴 multi-user.target。
我們這里只是通過 target unit 介紹了如何查看 unit 之間的依賴關(guān)系,實際使用中更多的是檢查服務 unit 之間的依賴關(guān)系。

相關(guān)的目錄和文件

在不同的發(fā)行版中與 systemd 相關(guān)的文件路徑可能會不太一樣,強調(diào)一下,本文介紹的是 ubuntu 16.04 。
/lib/systemd/system/ 大多數(shù) unit 的配置文件都放在這個目錄下。
/run/systemd/system/ 系統(tǒng)運行過程中產(chǎn)生的腳本,比如用戶相關(guān)的腳本和會話相關(guān)的腳本。
/etc/systemd/system/ 這個目錄中主要的文件都是指向 /lib/systemd/system/ 目錄中的鏈接文件。
注意,在我們自己創(chuàng)建 unit 配置文件時,既可以把配置文件放在 /lib/systemd/system/ 目錄下,也可以放在 /etc/systemd/system/ 目錄下。

/etc/default/ 這個目錄中放置很多服務默認的配置文件。
/var/lib/ 一些會產(chǎn)生數(shù)據(jù)的服務都會將他的數(shù)據(jù)寫入到 /var/lib/ 目錄中,比如 docker 相關(guān)的數(shù)據(jù)文件就放在這個目錄下。
/run/ 這個目錄放置了好多服務運行時的臨時數(shù)據(jù),比如 lock file 以及 PID file 等等。

我們知道 systemd 里管理了很多會用到本機 socket 的服務,所以系統(tǒng)中肯定會產(chǎn)生很多的 socket 文件。那么,這些 socke 文件都存放在哪里呢?我們可以使用 systemctl 進行查看:

$ systemctl list-sockets

其實,絕大多數(shù)的 socket 文件都存放在 /run 目錄及其子目錄中。

systemctl daemon-reload 子命令

daemon-reload 是一個很容易被誤用的子命令,主要是因為它名字中包含的 daemon 一詞很容易讓它和 reload 子命令混淆。
我們在前文簡略的介紹了 reload 子命令,它的作用是重新加載某個服務程序的配置文件。這里的程序指的是服務類型 unit 的配置中指定的程序,也就是我們常說的 daemon(提供某種服務的應用程序)。比如服務類型的 unit prometheus.service,提供服務的 daemon 程序在我的機器上是 /usr/local/share/prometheus/prometheus,所以 reload 子命令重新加載的是 prometheus 的配置文件。

如果把 daemon-reload 子命令中的 daemon 理解為 systemd 程序,就可以把這個命令解釋為重新加載 systemd 程序的配置文件。而所有的 unit 配置文件都是作為 systemd 程序的配置文件存在的。這樣得出的結(jié)論就是:

  1. 新添加 unit 配置文件時需要執(zhí)行 daemon-reload 子命令
  2. 有 unit 的配置文件發(fā)生變化時也需要執(zhí)行 daemon-reload 子命令

daemon-reload 命令會做很多的事情,其中之一是重新生成依賴樹(也就是 unit 之間的依賴關(guān)系),所以當你修改了 unit 配置文件中的依賴關(guān)系后如果不執(zhí)行 daemon-reload 命令是不會生效的。

如果大家想對linux命令有更加系統(tǒng)深入的學習,可以參閱 Linux命令速查手冊 PDF中文第三版 這本經(jīng)典書籍

總結(jié)

systemctl 提供了管理 systemd 和系統(tǒng)服務的眾多子命令。本文只是走馬觀花的把主要的子命令和一些常見的用法介紹了一下。對于這么一個龐大的命令集和相信只有在使用中不斷的磨練才能夠真正的掌握它們。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux配置和使用i3窗口管理器的教程

    Linux配置和使用i3窗口管理器的教程

    今天小編就為大家分享一篇關(guān)于Linux配置和使用i3窗口管理器的教程,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Linux下的多線程編程(三)

    Linux下的多線程編程(三)

    學東西,往往實例才是最讓人感興趣的,老是學基礎(chǔ)理論,不動手,感覺沒有成就感,呵呵。
    2014-08-08
  • linux系統(tǒng)下定時執(zhí)行php腳本的方法

    linux系統(tǒng)下定時執(zhí)行php腳本的方法

    網(wǎng)站運營過程中,經(jīng)常會遇到需要定時執(zhí)行php腳本的情況,下面這篇文章主要介紹了linux系統(tǒng)下定時執(zhí)行php腳本的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Linux定時備份數(shù)據(jù)庫到指定郵箱的方法

    Linux定時備份數(shù)據(jù)庫到指定郵箱的方法

    這篇文章主要介紹了Linux定時備份數(shù)據(jù)庫到指定郵箱的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • tr命令在統(tǒng)計英文單詞出現(xiàn)頻率中的妙用

    tr命令在統(tǒng)計英文單詞出現(xiàn)頻率中的妙用

    今天小編就為大家分享一篇關(guān)于tr命令在統(tǒng)計英文單詞出現(xiàn)頻率中的妙用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux刪除文件提示Operation not permitted的處理辦法

    Linux刪除文件提示Operation not permitted的處理辦法

    今天小編就為大家分享一篇關(guān)于Linux刪除文件提示Operation not permitted的處理辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口

    詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口

    在深入探討如何在Ubuntu上檢查、開啟、關(guān)閉端口之前,理解網(wǎng)絡基礎(chǔ)概念、端口的工作原理以及Ubuntu的網(wǎng)絡架構(gòu)是至關(guān)重要的,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-06-06
  • 詳解Linux命令與文件查找

    詳解Linux命令與文件查找

    這篇文章主要介紹了Linux命令與文件查找,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Linux kde中11個你不知道的應用程序

    Linux kde中11個你不知道的應用程序

    今天小編就為大家分享一篇關(guān)于Linux kde中11個你不知道的應用程序,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • centos下安裝配置phpMyAdmin的方法步驟

    centos下安裝配置phpMyAdmin的方法步驟

    本篇文章主要介紹了 centos下安裝配置phpMyAdmin的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論