1. Systemd
1.1 前言
歷史上,Linux 的啟動一直采用init進程。 Systemd 設計目標是,為系統的啟動和管理提供一套完整的解決方案。
Systemd 是一系列工具的集合,其作用也遠遠不僅是啟動操作系統,它還接管了后台服務、結束、狀態查詢,以及日志歸檔、設備管理、電源管理、定時任務等許多職責,並支持通過特定事件(如插入特定 USB 設備)和特定端口數據觸發的 On-demand(按需)任務。
Systemd 的后台服務還有一個特殊的身份——它是系統中 PID 值為 1 的進程。
1.2 特點
-
更少的進程
Systemd 提供了 服務按需啟動 的能力,使得特定的服務只有在真定被請求時才啟動。
-
允許更多的進程並行啟動
在 SysV-init 時代,將每個服務項目編號依次執行啟動腳本。Ubuntu 的 Upstart 解決了沒有直接依賴的啟動之間的並行啟動。而 Systemd 通過 Socket 緩存、DBus 緩存和建立臨時掛載點等方法進一步解決了啟動進程之間的依賴,做到了所有系統服務並發啟動。對於用戶自定義的服務,Systemd 允許配置其啟動依賴項目,從而確保服務按必要的順序運行。
-
使用 CGroup 跟蹤和管理進程的生命周期
在 Systemd 之間的主流應用管理服務都是使用 進程樹 來跟蹤應用的繼承關系的,而進程的父子關系很容易通過 兩次 fork 的方法脫離。
而 Systemd 則提供通過 CGroup 跟蹤進程關系,引補了這個缺漏。通過 CGroup 不僅能夠實現服務之間訪問隔離,限制特定應用程序對系統資源的訪問配額,還能更精確地管理服務的生命周期。
-
統一管理服務日志
Systemd 是一系列工具的集合, 包括了一個專用的系統日志管理服務:Journald。這個服務的設計初衷是克服現有 Syslog 服務的日志內容易偽造和日志格式不統一等缺點,Journald 用 二進制格式 保存所有的日志信息,因而日志內容很難被手工偽造。Journald 還提供了一個 journalctl 命令來查看日志信息,這樣就使得不同服務輸出的日志具有相同的排版格式, 便於數據的二次處理。
1.3 Unit 和 Target
Unit 是 Systemd 管理系統資源的基本單元,可以認為每個系統資源就是一個 Unit,並使用一個 Unit 文件定義。在 Unit 文件中需要包含相應服務的描述、屬性以及需要運行的命令。
Target 是 Systemd 中用於指定系統資源啟動組的方式,相當於 SysV-init 中的運行級別。
簡單說,Target 就是一個 Unit 組,包含許多相關的 Unit 。啟動某個 Target 的時候,Systemd 就會啟動里面所有的 Unit。從這個意義上說,Target 這個概念類似於”狀態點”,啟動某個 Target 就好比啟動到某種狀態。
1.4 Systemd 目錄
Unit 文件按照 Systemd 約定,應該被放置指定的三個系統目錄之一中。這三個目錄是有優先級的,如下所示,越靠上的優先級越高。因此,在三個目錄中有同名文件的時候,只有優先級最高的目錄里的那個文件會被使用。
- /etc/systemd/system:系統或用戶自定義的配置文件
- /run/systemd/system:軟件運行時生成的配置文件
- /usr/lib/systemd/system:系統或第三方軟件安裝時添加的配置文件。
Systemd 默認從目錄 /etc/systemd/system/ 讀取配置文件。但是,里面存放的大部分文件都是符號鏈接,指向目錄 /usr/lib/systemd/system/,真正的配置文件存放在那個目錄。
2. Unit
Systemd 可以管理所有系統資源:將系統資源划分為12類。將每個系統資源稱為一個 Unit。
Unit 是 Systemd 管理系統資源的基本單位。使用一個 Unit File 作為 Unit 的單元文件,Systemd 通過單元文件控制 Unit 的啟動。
例如,MySQL服務被 Systemd 視為一個 Unit,使用一個 mysql.service 作為啟動配置文件
2.1 Unit File
Systemd 將系統資源划分為12類,對應12種類型的單元文件
系統資源類型 | 單元文件擴展名 | 單元文件描述 | 備注 |
---|---|---|---|
Service | .service | 封裝守護進程的啟動、停止、重啟和重載操作,是最常見的一種 Unit 文件 | 系統服務 |
Target | .target | 定義 target 信息及依賴關系,一般僅包含 Unit 段 | 多個 Unit 構成的一個組 |
Device | .device | 對於 /dev 目錄下的硬件設備,主要用於定義設備之間的依賴關系 |
硬件設備 |
Mount | .mount | 定義文件系統的掛載點,可以替代過去的 /etc/fstab 配置文件 |
文件系統的掛載點 |
Automount | .automount | 用於控制自動掛載文件系統,相當於 SysV-init 的 autofs 服務 | 自動掛載點 |
Path | .path | 用於監控指定目錄或文件的變化,並觸發其它 Unit 運行 | 文件或路徑 |
Scope | .scope | 這種 Unit 文件不是用戶創建的,而是 Systemd 運行時產生的,描述一些系統服務的分組信息 | 不是由 Systemd 啟動的外部進程 |
Slice | .slice | 用於表示一個 CGroup 的樹 | 進程組 |
Snapshot | .snapshot | 用於表示一個由 systemctl snapshot 命令創建的 Systemd Units 運行狀態快照,可以切回某個快照 | Systemd 快照,可以切回某個快照 |
Socket | .socket | 監控來自於系統或網絡的數據消息 | 進程間通信的 socket |
Swap | .swap | 定義一個用戶做虛擬內存的交換分區 | swap 文件 |
Timer | .timer | 用於配置在特定時間觸發的任務,替代了 Crontab 的功能 | 定時器 |
對於操作單元文件的命令,如果缺省擴展名,則默認.service
擴展名
2.2 語法
先看一個示例
[Unit]
Description=Hello World
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/ sh -c "while true; do echo Hello World; sleep 1; done"
ExecStop="/usr/bin/docker stop busybox1"
ExecStopPost="/usr/bin/docker rm busybox1"
[Install]
WantedBy=multi-user.target
Unit 文件可以分為三個配置區段:
- Unit 段:所有 Unit 文件通用,用來定義 Unit 的元數據,以及配置與其他 Unit 的關系
- Service 段:服務(Service)類型的 Unit 文件(后綴為 .service)特有的,用於定義服務的具體管理和執行動作
- Install 段:所有 Unit 文件通用,用來定義如何啟動,以及是否開機啟動
Unit 和 Install 段:所有 Unit 文件通用,用於配置服務(或其它系統資源)的描述、依賴和隨系統啟動的方式
Service 段:服務(Service)類型的 Unit 文件(后綴為 .service)特有的,用於定義服務的具體管理和操作方法
單元文件中的區段名和字段名大小寫敏感, 每個區段內都是一些等號連接的鍵值對(鍵值對的等號兩側不能有空格)
2.3 Unit 段
Unit 通常是配置文件的第一個區塊,用來定義 Unit 的元數據,以及配置與其他 Unit 的關系。
Description
:當前服務的簡單描述Documentation
:文檔地址,可以是一個或多個文檔的 URL 路徑Requires
:與其它 Unit 的強依賴關系,如果其中任意一個 Unit 啟動失敗或異常退出,當前 Unit 也會被退出Wants
:與其它 Unit 的弱依賴關系,如果其中任意一個 Unit 啟動失敗或異常退出,不影響當前 Unit 繼續執行After
:該字段指定的 Unit 全部啟動完成以后,才會啟動當前 UnitBefore
:該字段指定的 Unit 必須在當前 Unit 啟動完成之后再啟動Binds To
:與 Requires 相似,該字段指定的 Unit 如果退出,會導致當前 Unit 停止運行Part Of
:一個 Bind To 作用的子集,僅在列出的 Unit 失敗或重啟時,終止或重啟當前 Unit,而不會隨列出Unit 的啟動而啟動OnFailure
:當這個模板啟動失敗時,就會自動啟動列出的每個模塊Conflicts
:與這個模塊有沖突的模塊,如果列出的模塊中有已經在運行的,這個服務就不能啟動,反之亦然
2.4 Install段
Install通常是配置文件的最后一個區塊,用來定義如何啟動,以及是否開機啟動。
WantedBy
:它的值是一個或多個 target,執行enable命令時,符號鏈接會放入/etc/systemd/system
目錄下以 target 名 +.wants
后綴構成的子目錄中RequiredBy
:它的值是一個或多個 target,執行enable命令時,符號鏈接會放入/etc/systemd/system
目錄下以 target 名 +.required
后綴構成的子目錄中Alias
:當前 Unit 可用於啟動的別名Also
:當前 Unit 被 enable/disable 時,會被同時操作的其他 Unit
2.5 Service段
Service 用來 Service 的配置,只有 Service 類型的 Unit 才有這個區塊。
2.5.1 啟動類型
-
Type:定義啟動時的進程行為。它有以下幾種值。
Type=simple:默認值,ExecStart字段啟動的進程為主進程
服務進程不會 fork,如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是 socket 激活型Type=forking:ExecStart字段將以fork()方式從父進程創建子進程啟動,創建后父進程會立即退出,子進程成為主進程。
通常需要指定PIDFile字段,以便 Systemd 能夠跟蹤服務的主進程對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可
Type=oneshot:只執行一次,Systemd 會等當前服務退出,再繼續往下執行, 適用於只執行一項任務、隨后立即退出的服務
通常需要指定RemainAfterExit=yes字段,使得 Systemd 在服務進程退出之后仍然認為服務處於激活狀態Type=dbus:當前服務通過 D-Bus 信號啟動。當指定的 BusName 出現在 DBus 系統總線上時,Systemd認為服務就緒
Type=notify:當前服務啟動完畢會發出通知信號,通知 Systemd,然后 Systemd 再啟動其他服務
Type=idle:Systemd 會等到其他任務都執行完,才會啟動該服務。一種使用場合是:讓該服務的輸出,不與其他服務的輸出相混合
2.5.2 啟動行為
-
ExecStart
:啟動當前服務的命令ExecStart=/bin/echo execstart1 ExecStart= ExecStart=/bin/echo execstart2
順序執行設定的命令,把字段置空,表示清除之前的值
-
ExecStartPre
:啟動當前服務之前執行的命令 -
ExecStartPost
:啟動當前服務之后執行的命令 -
ExecReload
:重啟當前服務時執行的命令 -
ExecStop
:停止當前服務時執行的命令 -
ExecStopPost
:停止當前服務之后執行的命令 -
RemainAfterExit
:當前服務的所有進程都退出的時候,Systemd 仍認為該服務是激活狀態, 這個配置主要是提供給一些並非常駐內存,而是啟動注冊后立即退出,然后等待消息按需啟動的特殊類型服務使用的 -
TimeoutSec
:定義 Systemd 停止當前服務之前等待的秒數
2.5.3 重啟行為
RestartSec
:Systemd 重啟當前服務間隔的秒數KillMode
:定義 Systemd 如何停止服務,可能的值包括:
control-group(默認值):當前控制組里面的所有子進程,都會被殺掉
process:只殺主進程(sshd 服務,推薦值)
mixed:主進程將收到 SIGTERM 信號,子進程收到 SIGKILL 信號
none:沒有進程會被殺掉,只是執行服務的 stop 命令。Restart
:定義何種情況 Systemd 會自動重啟當前服務,可能的值包括:
no(默認值):退出后不會重啟
on-success:只有正常退出時(退出狀態碼為0),才會重啟
on-failure:非正常退出時(退出狀態碼非0),包括被信號終止和超時,才會重啟(守護進程,推薦值)
on-abnormal:只有被信號終止和超時,才會重啟(對於允許發生錯誤退出的服務,推薦值)
on-abort:只有在收到沒有捕捉到的信號終止時,才會重啟
on-watchdog:超時退出,才會重啟
always:不管是什么退出原因,總是重啟
2.5.4 上下文
-
PIDFile
:指向當前服務 PID file 的絕對路徑。 -
User
:指定運行服務的用戶 -
Group
:指定運行服務的用戶組 -
EnvironmentFile
:指定當前服務的環境參數文件。該文件內部的key=value
鍵值對,可以用$key
的形式,在當前配置文件中獲取啟動
sshd
,執行的命令是/usr/sbin/sshd -D $OPTIONS
,其中的變量$OPTIONS
就來自EnvironmentFile
字段指定的環境參數文件。
2.6 占位符
在 Unit 文件中,有時會需要使用到一些與運行環境有關的信息,例如節點 ID、運行服務的用戶等。這些信息可以使用占位符來表示,然后在實際運行中動態地替換為實際的值。
- %n:完整的 Unit 文件名字,包括 .service 后綴名
- %p:Unit 模板文件名中 @ 符號之前的部分,不包括 @ 符號
- %i:Unit 模板文件名中 @ 符號之后的部分,不包括 @ 符號和 .service 后綴名
- %t:存放系統運行文件的目錄,通常是 “run”
- %u:運行服務的用戶,如果 Unit 文件中沒有指定,則默認為 root
- %U:運行服務的用戶 ID
- %h:運行服務的用戶 Home 目錄,即 %{HOME} 環境變量的值
- %s:運行服務的用戶默認 Shell 類型,即 %{SHELL} 環境變量的值
- %m:實際運行節點的 Machine ID,對於運行位置每個的服務比較有用
- %b:Boot ID,這是一個隨機數,每個節點各不相同,並且每次節點重啟時都會改變
- %H:實際運行節點的主機名
- %v:內核版本,即 “uname -r” 命令輸出的內容
- %%:在 Unit 模板文件中表示一個普通的百分號
2.7 模板
在現實中,往往有一些應用需要被復制多份運行,就會用到模板文件
模板文件的寫法與普通單元文件基本相同,只是模板文件名是以 @ 符號結尾。例如:apache@.service
通過模板文件啟動服務實例時,需要在其文件名的 @ 字符后面附加一個用於區分服務實例的參數字符串,通常這個參數是用於監控的端口號或控制台 TTY 編譯號
systemctl start apache@8080.service
Systemd 在運行服務時,首先尋找跟單元名完全匹配的單元文件,如果沒有找到,才會嘗試選擇匹配模板
例如上面的命令,System 首先會在約定的目錄下尋找名為 apache@8080.service 的單元文件,如果沒有找到,而文件名中包含 @ 字符,它就會嘗試去掉后綴參數匹配模板文件。對於 apache@8080.service,Systemd 會找到 apache@.service 模板文件,並通過這個模板文件將服務實例化。
3. Target
Target 就是一個 Unit 組,包含許多相關的 Unit 。啟動某個 Target 的時候,Systemd 就會啟動里面所有的 Unit。從這個意義上說,Target 這個概念類似於”狀態點”,啟動某個 Target 就好比啟動到某種狀態。
在傳統的 SysV-init 啟動模式里面,有 RunLevel 的概念,跟 Target 的作用很類似。不同的是,RunLevel 是互斥的,不可能多個 RunLevel 同時啟動,但是多個 Target 可以同時啟動。
3.1 target vs sysv-init
- 默認的 RunLevel(在 /etc/inittab 文件設置)現在被默認的 Target 取代,位置是 /etc/systemd/system/default.target,通常符號鏈接到graphical.target(圖形界面)或者multi-user.target(多用戶命令行)。
- 啟動腳本的位置,以前是 /etc/init.d 目錄,符號鏈接到不同的 RunLevel 目錄 (比如 /etc/rc3.d、/etc/rc5.d 等),現在則存放在 /lib/systemd/system 和 /etc/systemd/system 目錄。
- 配置文件的位置,以前 init 進程的配置文件是 /etc/inittab,各種服務的配置文件存放在 /etc/sysconfig 目錄。現在的配置文件主要存放在 /lib/systemd 目錄,在 /etc/systemd 目錄里面的修改可以覆蓋原始設置。
runlevel是 SysV init 初始化系統中的概念,在Systemd初始化系統中使用的是 Target,他們之間的映射關系是
Runlevel | Target | 說明 |
---|---|---|
0 | poweroff.target | 關閉系統 |
1 | rescue.target | 維護模式 |
2,3,4 | multi-user.target | 多用戶,無圖形系統(命令行界面) |
5 | graphical.target | 多用戶,圖形化系統(圖形用戶界面) |
6 | reboot.target | 重啟系統 |
3.2 target vs unit
如果一個target只包含一個Unit,那么該 target,沒有對應的目錄,指的就是這個 Unit, 例如 hibernate.target
只包含 systemd-hibernate.service
一個Unit.
如果一個target包含多個Unit,那么該target,有對應的 xxx.target.wants 目錄,指的是目錄里面所有的Unit, 例如multi-user.target
包含位於/etc/systemd/system/multi-user.target.wants
目錄下的多個 Unit.
3.3 target 命令
# 查看當前系統的所有 Target
$ systemctl list-unit-files --type=target
# 查看一個 Target 包含的所有 Unit
$ systemctl list-dependencies multi-user.target
# 查看啟動時的默認 Target
$ systemctl get-default
# 設置啟動時的默認 Target
$ sudo systemctl set-default multi-user.target
# 切換 Target 時,默認不關閉前一個 Target 啟動的進程,systemctl isolate 命令改變這種行為,關閉前一個 Target 里面所有不屬於后一個 Target 的進程
$ sudo systemctl isolate multi-user.target
3.4 啟動過程
- 讀入
/boot
目錄下的內核文件 - 內核文件加載完之后,開始執行第一個程序
/sbin/init
初始化進程,由 Systemd 初始化系統引導,完成相關的初始化工作 - Systemd 執行
default.target
,獲知設定的啟動 target (查看默認 target:systemctl get-default)
- Systemd 執行啟動 target 對應的單元文件。根據單元文件中定義的[依賴關系](https://www.freedesktop.org/software/systemd/man/bootup.html#System Manager Bootup),傳遞控制權,依次執行其他 target 單元文件,同時啟動每個 target 包含的單元
4. 命令
4.1 系統管理命令
systemctl
是 Systemd 的主命令,用於管理系統。
# 重啟系統
$ sudo systemctl reboot
# 關閉系統,切斷電源
$ sudo systemctl poweroff
# CPU停止工作
$ sudo systemctl halt
# 暫停系統
$ sudo systemctl suspend
# 讓系統進入冬眠狀態
$ sudo systemctl hibernate
# 讓系統進入交互式休眠狀態
$ sudo systemctl hybrid-sleep
# 啟動進入救援狀態(單用戶狀態)
$ sudo systemctl rescue
systemd-analyze
命令用於查看啟動耗時。
# 查看啟動耗時
$ systemd-analyze
# 查看每個服務的啟動耗時
$ systemd-analyze blame
# 顯示瀑布狀的啟動過程流
$ systemd-analyze critical-chain
# 顯示指定服務的啟動流
$ systemd-analyze critical-chain atd.service
4.2 查看配置文件
# 列出所有配置文件
# 這個列表顯示每個配置文件的狀態,一共有四種。
# enabled:已建立啟動鏈接
# disabled:沒建立啟動鏈接
# static:該配置文件沒有[Install]部分(無法執行),只能作為其他配置文件的依賴
# masked:該配置文件被禁止建立啟動鏈接
$ systemctl list-unit-files
# 列出指定類型的配置文件
$ systemctl list-unit-files --type=service
# 查看當前系統的所有 Target
$ systemctl list-unit-files --type=target
4.3 查看系統Unit
# 列出正在運行的 Unit
$ systemctl list-units
# 列出所有Unit,包括沒有找到配置文件的或者啟動失敗的
$ systemctl list-units --all
# 列出所有沒有運行的 Unit
$ systemctl list-units --all --state=inactive
# 列出所有加載失敗的 Unit
$ systemctl list-units --failed
# 列出所有正在運行的、類型為 service 的 Unit
$ systemctl list-units --type=service
# 查看 Unit 配置文件的內容
$ systemctl cat docker.service
4.4 查看 Unit 的狀態
# 顯示系統狀態
$ systemctl status
# 顯示單個 Unit 的狀態
$ systemctl status bluetooth.service
# 顯示遠程主機的某個 Unit 的狀態
$ systemctl -H root@levonfly.example.com status httpd.service
# 顯示某個 Unit 是否正在運行
$ systemctl is-active application.service
# 顯示某個 Unit 是否處於啟動失敗狀態
$ systemctl is-failed application.service
# 顯示某個 Unit 服務是否建立了啟動鏈接
$ systemctl is-enabled application.service
4.5 Unit 的管理
# 立即啟動一個服務
$ sudo systemctl start apache.service
# 立即停止一個服務
$ sudo systemctl stop apache.service
# 重啟一個服務
$ sudo systemctl restart apache.service
# 殺死一個服務的所有子進程
$ sudo systemctl kill apache.service
# 重新加載一個服務的配置文件
$ sudo systemctl reload apache.service
# 重載所有修改過的配置文件
$ sudo systemctl daemon-reload
# 顯示某個 Unit 的所有底層參數
$ systemctl show httpd.service
# 顯示某個 Unit 的指定屬性的值
$ systemctl show -p CPUShares httpd.service
# 設置某個 Unit 的指定屬性
$ sudo systemctl set-property httpd.service CPUShares=500
4.6 查看 Unit 的依賴關系
# 列出一個 Unit 的所有依賴,默認不會列出 target 類型
$ systemctl list-dependencies nginx.service
# 列出一個 Unit 的所有依賴,包括 target 類型
$ systemctl list-dependencies --all nginx.service
4.7 服務的生命周期
當一個新的 Unit 文件被放入 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 目錄中時,它是不會被自識識別的。
服務的激活
- systemctl enable:在 /etc/systemd/system/ 建立服務的符號鏈接,指向 /usr/lib/systemd/system/ 中
- systemctl start:依次啟動定義在 Unit 文件中的 ExecStartPre、ExecStart 和 ExecStartPost 命令
服務的啟動和停止
- systemctl start:依次啟動定義在 Unit 文件中的 ExecStartPre、ExecStart 和 ExecStartPost 命令
- systemctl stop:依次停止定義在 Unit 文件中的 ExecStopPre、ExecStop 和 ExecStopPost 命令
- systemctl restart:重啟服務
- systemctl kill:立即殺死服務
服務的開機啟動和取消
- systemctl enable:除了激活服務以外,也可以置服務為開機啟動
- systemctl disable:取消服務的開機啟動
服務的修改和移除
- systemctl daemon-reload:Systemd 會將 Unit 文件的內容寫到緩存中,因此當 Unit 文件被更新時,需要告訴 Systemd 重新讀取所有的 Unit 文件
- systemctl reset-failed:移除標記為丟失的 Unit 文件。在刪除 Unit 文件后,由於緩存的關系,即使通過 daemon-reload 更新了緩存,在 list-units 中依然會顯示標記為 not-found 的 Unit。
4.8 systemctl 與 service 命令的區別
- systemctl 融合了 service 和 chkconfig 的功能
- 在 Ubuntu18.04 中沒有自帶 chkconfig 命令;service 命令實際上重定向到 systemctl 命令
動作 | SysV Init 指令 | Systemd 指令 |
---|---|---|
啟動某服務 | service httpd start | systemctl start httpd |
停止某服務 | service httpd stop | systemctl stop httpd |
重啟某服務 | service httpd restart | systemctl restart httpd |
檢查服務狀態 | service httpd status | systemctl status httpd |
刪除某服務 | chkconfig –del httpd | 停掉應用,刪除其配置文件 |
使服務開機自啟動 | chkconfig –level 5 httpd on | systemctl enable httpd |
使服務開機不自啟動 | chkconfig –level 5 httpd off | systemctl disable httpd |
查詢服務是否開機自啟 | chkconfig –list | grep httpd | systemctl is-enabled httpd |
加入自定義服務 | chkconfig –add test | systemctl load test |
顯示所有已啟動的服務 | chkconfig –list | systemctl list-unit-files | grep enabled |
5. system 工具集
-
systemctl:用於檢查和控制各種系統服務和資源的狀態
-
bootctl:用於查看和管理系統啟動分區
-
hostnamectl:用於查看和修改系統的主機名和主機信息
# 顯示當前主機的信息 $ hostnamectl # 設置主機名。 $ sudo hostnamectl set-hostname levonfly
-
journalctl:用於查看系統日志和各類應用服務日志
-
localectl:用於查看和管理系統的地區信息
# 查看本地化設置 $ localectl # 設置本地化參數。 $ sudo localectl set-locale LANG=en_GB.utf8 $ sudo localectl set-keymap en_GB
-
loginctl:用於管理系統已登錄用戶和 Session 的信息
# 列出當前session $ loginctl list-sessions # 列出當前登錄用戶 $ loginctl list-users # 列出顯示指定用戶的信息 $ loginctl show-user ruanyf
-
machinectl:用於操作 Systemd 容器
-
timedatectl:用於查看和管理系統的時間和時區信息
# 查看當前時區設置 $ timedatectl # 顯示所有可用的時區 $ timedatectl list-timezones # 設置當前時區 $ sudo timedatectl set-timezone America/New_York $ sudo timedatectl set-time YYYY-MM-DD $ sudo timedatectl set-time HH:MM:SS
-
systemd-analyze 顯示此次系統啟動時運行每個服務所消耗的時間,可以用於分析系統啟動過程中的性能瓶頸
-
systemd-ask-password:輔助性工具,用星號屏蔽用戶的任意輸入,然后返回實際輸入的內容
-
systemd-cat:用於將其他命令的輸出重定向到系統日志
-
systemd-cgls:遞歸地顯示指定 CGroup 的繼承鏈
-
systemd-cgtop:顯示系統當前最耗資源的 CGroup 單元
-
systemd-escape:輔助性工具,用於去除指定字符串中不能作為 Unit 文件名的字符
-
systemd-hwdb:Systemd 的內部工具,用於更新硬件數據庫
-
systemd-delta:對比當前系統配置與默認系統配置的差異
-
systemd-detect-virt:顯示主機的虛擬化類型
-
systemd-inhibit:用於強制延遲或禁止系統的關閉、睡眠和待機事件
-
systemd-machine-id-setup:Systemd 的內部工具,用於給 Systemd 容器生成 ID
-
systemd-notify:Systemd 的內部工具,用於通知服務的狀態變化
-
systemd-nspawn:用於創建 Systemd 容器
-
systemd-path:Systemd 的內部工具,用於顯示系統上下文中的各種路徑配置
-
systemd-run:用於將任意指定的命令包裝成一個臨時的后台服務運行
-
systemd-stdio- bridge:Systemd 的內部 工具,用於將程序的標准輸入輸出重定向到系統總線
-
systemd-tmpfiles:Systemd 的內部工具,用於創建和管理臨時文件目錄
-
systemd-tty-ask-password-agent:用於響應后台服務進程發出的輸入密碼請求