新聞中心
目錄

創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為中山企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè),中山網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
- 3.1. 啟動(dòng)過程概述
-
- 3.1.1. 第一階段:UEFI
- 3.1.2. 第二階段:引載加載程序
- 3.1.3. 第三階段:迷你 Debian 系統(tǒng)
- 3.1.4. 第四階段:常規(guī) Debian 系統(tǒng)
- 3.2. Systemd 初始化
-
- 3.2.1. 主機(jī)名
- 3.2.2. 文件系統(tǒng)
- 3.2.3. 網(wǎng)絡(luò)接口初始化
- 3.3. 內(nèi)核消息
- 3.4. 系統(tǒng)消息
- 3.5. 系統(tǒng)管理
- 3.6. 其它系統(tǒng)監(jiān)控
- 3.7. 定制 systemd
-
- 3.7.1. 套接字激活
- 3.8. udev 系統(tǒng)
-
- 3.8.1. 內(nèi)核模塊初始化
作為系統(tǒng)管理員,粗略地了解 Debian 系統(tǒng)的啟動(dòng)和配置方式是明智的。盡管準(zhǔn)確的細(xì)節(jié)在安裝的軟件包及對(duì)應(yīng)的文檔中,但這些知識(shí)對(duì)我們大多數(shù)人來說都是必須掌握的。
下面是 Debian 系統(tǒng)初始化的要點(diǎn)概述。由于 Debian 系統(tǒng)在不斷發(fā)展,您應(yīng)該參考最新的文檔。
-
Debian Linux 內(nèi)核手冊(cè) 是關(guān)于 Debian 內(nèi)核的主要信息來源。
-
bootup(7) 介紹了基于systemd的系統(tǒng)啟動(dòng)流程。(近期的 Debian) -
boot(7) 介紹了基于 UNIX System V Release 4 的系統(tǒng)啟動(dòng)流程。(舊版的 Debian)
3.1. 啟動(dòng)過程概述
計(jì)算機(jī)系統(tǒng)從上電事件到能為用戶提供完整的操作系統(tǒng)(OS)功能為止,需要經(jīng)歷幾個(gè)階段的啟動(dòng)過程。
為簡(jiǎn)便起見,筆者將討論范圍限定在具有默認(rèn)安裝的典型 PC 平臺(tái)上。
典型的啟動(dòng)過程像是一個(gè)四級(jí)的火箭。每一級(jí)火箭將系統(tǒng)控制權(quán)交給下一級(jí)。
-
第 3.1.1 節(jié) “第一階段:UEFI”
-
第 3.1.2 節(jié) “第二階段:引載加載程序”
-
第 3.1.3 節(jié) “第三階段:迷你 Debian 系統(tǒng)”
-
第 3.1.4 節(jié) “第四階段:常規(guī) Debian 系統(tǒng)”
當(dāng)然,這些階段可以有不同的配置。比如,你編譯了自己的內(nèi)核,則可能會(huì)跳過迷你 Debian 系統(tǒng)的步驟。因此,在讀者親自確認(rèn)之前,請(qǐng)勿假定自己系統(tǒng)的情況也是如此。
3.1.1. 第一階段:UEFI
Unified Extensible Firmware Interface (UEFI) 統(tǒng)一可擴(kuò)展固件接口 定義了啟動(dòng)管理器作為 UEFI 規(guī)范的一部分。當(dāng)一個(gè)計(jì)算機(jī)打開電源,啟動(dòng)管理器是啟動(dòng)流程的第一階段,它檢查啟動(dòng)配置并基于啟動(dòng)配置的設(shè)置,執(zhí)行特定的操作系統(tǒng)引導(dǎo)加載程序或操作系統(tǒng)內(nèi)核(通常是引導(dǎo)加載程序)。啟動(dòng)配置通過變量存儲(chǔ)在 NVRAM,變量包括指示操作系統(tǒng)引導(dǎo)加載程序或操作系統(tǒng)內(nèi)核的文件系統(tǒng)路徑的變量。 EFI system partition (ESP) EFI 系統(tǒng)分區(qū) 是一個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備分區(qū),在計(jì)算機(jī)里用來遵照 UEFI 規(guī)范。當(dāng)計(jì)算機(jī)打開電源時(shí),由 UEFI 固件來訪問,它存儲(chǔ)了 UEFI 應(yīng)用程序和這些應(yīng)用程序運(yùn)行所需要的文件,包括操作系統(tǒng)的引導(dǎo)加載程序。(在老的 PC 系統(tǒng),存放在 MBR 里的 BIOS 可以用來代替。)
3.1.2. 第二階段:引載加載程序
引導(dǎo)加載程序是啟動(dòng)過程的第二階段,由 UEFI 啟動(dòng)。引導(dǎo)加載程序?qū)⑾到y(tǒng)內(nèi)核映像和 initrd 映像加載到內(nèi)存并將控制權(quán)交給它們。initrd 映像是根文件系統(tǒng)映像,其支持程度依賴于所使用的引導(dǎo)加載程序。
Debian 系統(tǒng)通常使用 Linux 內(nèi)核作為默認(rèn)的系統(tǒng)內(nèi)核。當(dāng)前的 5.x Linux 內(nèi)核的 initrd 映像在技術(shù)上是 initramfs(初始 RAM 文件系統(tǒng))映像。
有許多引導(dǎo)加載程序和配置選項(xiàng)存在。
表 3.1. 引導(dǎo)加載程序列表
| 軟件包 | 流行度 | 大小 | initrd | 引導(dǎo)加載程序 | 說明 |
|---|---|---|---|---|---|
| grub-efi-amd64 | I:236 | 158 | 支持 | GRUB UEFI | 可智能識(shí)別磁盤分區(qū)和文件系統(tǒng),例如 vfat、ext4…(UEFI) |
| grub-pc | V:25, I:737 | 533 | 支持 | GRUB 第 2 版 | 可智能識(shí)別磁盤分區(qū)和文件系統(tǒng),例如 vfat、ext4…(BIOS) |
| grub-rescue-pc | V:0, I:1 | 6476 | 支持 | GRUB 第 2 版 | 此為 GRUB 第 2 版的可引導(dǎo)修復(fù)映像(CD 和軟盤)(PC / BIOS 版本) |
| lilo | V:0, I:1 | 697 | 支持 | Lilo | 依賴于數(shù)據(jù)在硬盤上的扇區(qū)位置。(較老) |
| syslinux | V:3, I:43 | 344 | 支持 | Isolinux | 可識(shí)別 ISO9660 文件系統(tǒng)。引導(dǎo) CD 使用此項(xiàng)。 |
| syslinux | V:3, I:43 | 344 | 支持 | Syslinux | 可識(shí)別 MSDOS 文件系統(tǒng)(FAT)。引導(dǎo)軟盤使用此項(xiàng)。 |
| loadlin | V:0, I:0 | 90 | 支持 | Loadlin | 新系統(tǒng)從 FreeDOS 或 MSDOS 中啟動(dòng)。 |
| mbr | V:0, I:6 | 50 | 不支持 | Neil Turton 的 MBR | 此為取代 MSDOS MBR 的自由軟件。只可識(shí)別硬盤分區(qū)。 |
| 警告 | |
|---|---|
|
假如沒有從 |
GRUB 2 的菜單配置文件位于 /boot/grub/grub.cfg,它的菜單條目的關(guān)鍵部分看起來像:
menuentry 'Debian GNU/Linux' ... {
load_video
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1
echo 'Loading Linux 5.10.0-6-amd64 ...'
linux /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-5.10.0-6-amd64
}
對(duì)于這部分的 /boot/grub/grub.cfg,這個(gè)菜單條目的意義如下。
表 3.2. /boot/grub/grub.cfg 文件上面部分菜單條目意義
| 設(shè)置 | 值 |
|---|---|
| GRUB2 模塊加載 | gzio, part_gpt, ext2 |
| 使用的根文件系統(tǒng)分區(qū) | 由 UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 指定的分區(qū)標(biāo)識(shí) |
| 內(nèi)核鏡像文件在根文件系統(tǒng)中的路徑 | /boot/vmlinuz-5.10.0-6-amd64 |
| 使用的內(nèi)核啟動(dòng)參數(shù) | "root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet" |
| initrd 鏡像文件在根文件系統(tǒng)中的路徑 | /boot/initrd.img-5.10.0-6-amd64 |
| 提示 | |
|---|---|
|
通過設(shè)置在 |
參見 “info grub” 及 grub-install(8)。
3.1.3. 第三階段:迷你 Debian 系統(tǒng)
迷你 Debian 系統(tǒng)是啟動(dòng)流程的第三階段,由引導(dǎo)加載程序啟動(dòng)。它會(huì)在內(nèi)存中運(yùn)行系統(tǒng)內(nèi)核和根文件系統(tǒng)。這是啟動(dòng)流程的一個(gè)可選準(zhǔn)備階段。
| 注意 | |
|---|---|
|
“迷你 Debian 系統(tǒng)”是筆者自創(chuàng)的術(shù)語,用于在本文檔中描述啟動(dòng)流程的第三個(gè)階段。這個(gè)系統(tǒng)通常被稱為 initrd 或 initramfs 系統(tǒng)。內(nèi)存中類似的系統(tǒng)在 Debian 安裝程序中使用。 |
/init 程序是內(nèi)存中的根文件系統(tǒng)上執(zhí)行的第一個(gè)程序。這個(gè)程序在用戶空間把內(nèi)核初始化,并把控制權(quán)交給下一階段。迷你 Debian 系統(tǒng)能夠在主引導(dǎo)流程之前添加內(nèi)核模塊或以加密形式掛載根文件系統(tǒng),使引導(dǎo)流程更加靈活。
-
如果 initramfs 是由
initramfs-tools創(chuàng)建,則"/init" 程序是一個(gè) shell 腳本程序。-
通過給內(nèi)核添加 “
break=init" 等啟動(dòng)參數(shù),你可以中斷這部分啟動(dòng)流程以獲取 root shell。更多中斷條件請(qǐng)參見 ”/init“ 腳本。這個(gè) shell 環(huán)境已足夠成熟,你可通過它很好地檢查機(jī)器的硬件。 -
迷你 Debian 系統(tǒng)中可用的命令是精簡(jiǎn)過的,且主要由一個(gè)稱為
busybox(1) 的 GNU 工具提供。
-
-
如果 initramfs 是由
dracut創(chuàng)建,則 "/init" 程序是一個(gè)二進(jìn)制systemd程序。-
迷你 Debian 系統(tǒng)中可用的命令是一個(gè)精簡(jiǎn)過的
systemd(1) 環(huán)境。
-
| 小心 | |
|---|---|
|
當(dāng)在一個(gè)只讀的根文件系統(tǒng)上時(shí),使用 |
3.1.4. 第四階段:常規(guī) Debian 系統(tǒng)
常規(guī) Debian 系統(tǒng)是啟動(dòng)流程的第四階段,由迷你 Debian 系統(tǒng)啟動(dòng)。迷你 Debian 系統(tǒng)的內(nèi)核在此環(huán)境下繼續(xù)運(yùn)行。根文件系統(tǒng)將由內(nèi)存切換到實(shí)際的硬盤文件系統(tǒng)上。
init 程序是系統(tǒng)執(zhí)行的第一個(gè)程序(PID=1),它啟動(dòng)其它各種程序以完成主引導(dǎo)流程。init 程序的默認(rèn)路徑是 ”/sbin/init“,但可通過內(nèi)核啟動(dòng)參數(shù)修改,例如 ”init=/path/to/init_program"。
在 Debian 8 jessie(2015 年發(fā)布)版本后,"/sbin/init" 是一個(gè)到 "/lib/systemd/systemd" 的符號(hào)鏈接。
| 提示 | |
|---|---|
|
你的系統(tǒng)中實(shí)際使用的 init 命令可以使用 “ |
表 3.3. Debian 系統(tǒng)啟動(dòng)工具列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
systemd |
V:849, I:941 | 16625 | 基于事件且支持并發(fā)的 init(8) 守護(hù)進(jìn)程(可替代 sysvinit) |
systemd-sysv |
V:820, I:939 | 147 | systemd 需用的用以代替 sysvinit 的手冊(cè)頁和符號(hào)鏈接 |
init-system-helpers |
V:687, I:952 | 133 | 在 sysvinit 和 systemd 之間進(jìn)行轉(zhuǎn)換的幫助工具 |
initscripts |
V:64, I:238 | 172 | 用于初始化和關(guān)閉系統(tǒng)的腳本 |
sysvinit-core |
V:7, I:8 | 279 | 類 System V 的 init(8) 工具 |
sysv-rc |
V:127, I:251 | 82 | 類 System V 的運(yùn)行級(jí)別修改機(jī)制 |
sysvinit-utils |
V:403, I:999 | 81 | 類 System V 的實(shí)用工具(startpar(8),bootlogd(8),……) |
lsb-base |
V:895, I:999 | 49 | Linux 標(biāo)準(zhǔn)規(guī)范 3.2 版的 init 腳本功能 |
insserv |
V:153, I:248 | 153 | 利用 LSB init.d 腳本依賴性來組織啟動(dòng)步驟的工具 |
uswsusp |
V:1, I:5 | 714 | 使用 Linux 提供的用戶態(tài)軟件 suspend 的工具 |
kexec-tools |
V:1, I:7 | 289 | 用于 kexec(8) 重啟(熱啟動(dòng))的 kexec 工具 |
systemd-bootchart |
V:0, I:1 | 128 | 啟動(dòng)流程性能分析器 |
bootchart2 |
V:0, I:0 | NOT_FOUND | 啟動(dòng)流程性能分析器 |
pybootchartgui |
V:0, I:0 | NOT_FOUND | 啟動(dòng)流程性能分析器(可視化) |
mingetty |
V:0, I:3 | 38 | 僅包含控制臺(tái)的 getty(8) |
mgetty |
V:0, I:0 | 315 | 可智能調(diào)制解調(diào)的 getty(8) 替代品 |
| 提示 | |
|---|---|
|
有關(guān)啟動(dòng)流程加速的最新信息,請(qǐng)參見 Debian 維基:?jiǎn)?dòng)流程加速詞條。 |
3.2. Systemd 初始化
本節(jié)描述系統(tǒng)是怎樣通過 PID=1 的 systemd(1) 程序來啟動(dòng)(即初始化進(jìn)程)。
systemd 初始化進(jìn)程基于單元配置文件 (參見 systemd.unit(5)) 來并行派生進(jìn)程,這些單元配置文件使用聲明樣式來書寫,代替之前的類 SysV 的過程樣式。這些單元配置文件從下面的一系列路徑來加載 (參見 systemd-system.conf(5)) :
派生的進(jìn)程被放在一個(gè)單獨(dú)的 Linux control groups,在單元后命名,它們屬于一個(gè)私有的 systemd 層級(jí)結(jié)構(gòu)(參見 cgroups 和 第 4.7.4 節(jié) “Linux 安全特性”)。
單元配置文件從下列一系列路徑中加載(參見 systemd-system.conf(5)):
-
"
/lib/systemd/system": OS 默認(rèn)配置文件 -
"
/etc/systemd/system": 系統(tǒng)管理員的配置文件,它將忽略操作系統(tǒng)默認(rèn)的配置文件 -
"
/run/systemd/system": 運(yùn)行時(shí)產(chǎn)生的配置文件,它將忽略安裝的配置文件
他們的相互依賴關(guān)系通過"Wants=", "Requires=", "Before=", "After=", … 等指示來配置,(參見 systemd.unit(5) 里的 "MAPPING OF UNIT PROPERTIES TO THEIR INVERSES")。 資源控制也是被定義 (參見 systemd.resource-control(5)).
根據(jù)單元配置文件的后綴來區(qū)分它們的類型:
-
*.service 描述由
systemd控制和監(jiān)管的進(jìn)程.參見systemd.service(5). -
*.device 描述在
sysfs(5) 里面作為udev(7) 設(shè)備樹展示的設(shè)備。參見systemd.device(5). -
*.mount 描述由
systemd控制和監(jiān)管的文件系統(tǒng)掛載點(diǎn)。參見systemd.mount(5). -
*.automount 描述由
systemd控制和監(jiān)管的文件系統(tǒng)自動(dòng)掛載點(diǎn)。參見systemd.automount(5). -
*.swap 描述由
systemd控制和監(jiān)管的 swap 文件或設(shè)備。參見systemd.swap(5). -
*.path 描述被
systemd監(jiān)控的路徑,用于基于路徑的活動(dòng)。參見systemd.path(5). -
*.socket 描述被
systemd控制和監(jiān)管的套接字,用于基于套接字的活動(dòng)。參見systemd.socket(5). -
*.timer 描述被
systemd控制和監(jiān)管的計(jì)時(shí)器,用于基于時(shí)間的活動(dòng)。參見systemd.timer(5). -
*.slice 管理
cgroups(7) 的資源。參見systemd.slice(5). -
*.scope 使用
systemd的總線接口來程序化的創(chuàng)建,用以管理一系列系統(tǒng)進(jìn)程。 參見systemd.scope(5). -
*.target 把其它單元配置文件分組,在啟動(dòng)的時(shí)候,來創(chuàng)建同步點(diǎn)。參見
systemd.target(5).
系統(tǒng)啟動(dòng)時(shí)(即,init),systemd 進(jìn)程會(huì)嘗試啟動(dòng)"/lib/systemd/system/default.target(通常是到"graphical.target"的符號(hào)鏈接)。首先,一些特殊的 target 單元(參見 systemd.special(7)),比如 "local-fs.target"、"swap.target"和"cryptsetup.target"會(huì)被引入以掛載文件系統(tǒng)。之后,其它 target 單元也會(huì)根據(jù)單元依賴關(guān)系而被引入。詳細(xì)情況,請(qǐng)閱讀 bootup(7)。
systemd 提供向后兼容的功能。在 "/etc/init.d/rc[0123456S].d/[KS]name" 里面的 SysV 風(fēng)格的啟動(dòng)腳本仍然會(huì)被分析;telinit(8) 會(huì)被轉(zhuǎn)換為 systemd 的單元活動(dòng)請(qǐng)求。
| 小心 | |
|---|---|
|
模擬的運(yùn)行級(jí)別 2 到 4 全部被符號(hào)鏈接到了相同的“ |
3.2.1. 主機(jī)名
內(nèi)核維護(hù)系統(tǒng)主機(jī)名。在啟動(dòng)的時(shí)候,通過 systemd-hostnamed.service 啟動(dòng)的系統(tǒng)單位設(shè)置系統(tǒng)的主機(jī)名,此主機(jī)名保存在 "/etc/hostname"。這個(gè)文件應(yīng)該只包含系統(tǒng)主機(jī)名,而不是全稱域名。
不帶參數(shù)運(yùn)行 hostname(1) 命令可以打印出當(dāng)前的主機(jī)名。
3.2.2. 文件系統(tǒng)
硬盤和網(wǎng)絡(luò)文件系統(tǒng)的掛載選項(xiàng)可以在 "/etc/fstab" 中設(shè)置,參見 fstab(5) 和 第 9.6.7 節(jié) “通過掛載選項(xiàng)優(yōu)化文件系統(tǒng)”。
加密文件系統(tǒng)的配置設(shè)置在“/etc/crypttab”中。參見 crypttab(5)
軟 RAID 的配置 mdadm(8) 設(shè)置在 "/etc/mdadm/mdadm.conf". 參見 mdadm.conf(5).
| 警告 | |
|---|---|
|
每次啟動(dòng)的時(shí)候,在掛載了所有文件系統(tǒng)以后," |
3.2.3. 網(wǎng)絡(luò)接口初始化
對(duì)于使用 systemd 的現(xiàn)代 Debian 桌面系統(tǒng),網(wǎng)絡(luò)接口通常由兩個(gè)服務(wù)進(jìn)行初始化:lo 接口通常在“networking.service”處理,而其它接口則由“NetworkManager.service”處理。
參見 第 5 章 網(wǎng)絡(luò)設(shè)置 來獲取怎樣來配置它們的信息。
3.3. 內(nèi)核消息
在控制臺(tái)上顯示的內(nèi)核錯(cuò)誤信息,能夠通過設(shè)置他們的閾值水平來配置。
# dmesg -n3
表 3.4. 內(nèi)核錯(cuò)誤級(jí)別表
| 錯(cuò)誤級(jí)別值 | 錯(cuò)誤級(jí)別名稱 | 說明 |
|---|---|---|
| 0 | KERN_EMERG | 系統(tǒng)不可用 |
| 1 | KERN_ALERT | 行為必須被立即采取 |
| 2 | KERN_CRIT | 危險(xiǎn)條件 |
| 3 | KERN_ERR | 錯(cuò)誤條件 |
| 4 | KERN_WARNING | 警告條件 |
| 5 | KERN_NOTICE | 普通但重要的條件 |
| 6 | KERN_INFO | 信息提示 |
| 7 | KERN_DEBUG | debug 級(jí)別的信息 |
3.4. 系統(tǒng)消息
在 systemd 下, 內(nèi)核和系統(tǒng)的信息都通過日志服務(wù) systemd-journald.service (又名 journald)來記錄,放在"/var/log/journal"下的不變的二進(jìn)制數(shù)據(jù),或放在"/run/log/journal/"下的變化的二進(jìn)制數(shù)據(jù).這些二進(jìn)制日志數(shù)據(jù),可以通過 journalctl(1) 命令來訪問。例如,你可以顯示從最后一次啟動(dòng)以來的日志,按如下所示:
$ journalctl -b
表 3.5. 典型的 journalctl 命令片段列表
| 操作 | 命令片段 |
|---|---|
| 查看從最后一次啟動(dòng)開始的系統(tǒng)服務(wù)和內(nèi)核日志 | "journalctl -b --system" |
| 查看從最后一次啟動(dòng)開始的當(dāng)前用戶的服務(wù)日志 | "journalctl -b --user" |
查看從最后一次啟動(dòng)開始的 "$unit" 工作日志 |
"journalctl -b -u $unit" |
查看從最后一次啟動(dòng)開始的 "$unit"的工作日志 ("tail -f" 式樣) |
"journalctl -b -u $unit -f" |
在 systemd 下,系統(tǒng)日志工具 rsyslogd(8) 可以被卸載。如果安裝了它,它會(huì)改變它的行為來讀取易失性二進(jìn)制日志數(shù)據(jù)(代替在 systemd 之前默認(rèn)的 "/dev/log")并創(chuàng)建傳統(tǒng)的永久性 ASCII 系統(tǒng)日志數(shù)據(jù)。"/etc/default/rsyslog" 和 "/etc/rsyslog.conf" 能夠自定義日志文件和屏幕顯示。參見 rsyslogd(8) 和 rsyslog.conf(5),也可以參見第 9.3.2 節(jié) “日志分析”。
3.5. 系統(tǒng)管理
systemd 不僅僅提供系統(tǒng)初始化,還用 systemctl(1) 命令提供通用的系統(tǒng)管理操作。
表 3.6. 典型的 systemctl 命令片段列表
| 操作 | 命令片段 |
|---|---|
| 列出所有 target 單元配置 | "systemctl list-units --type=target" |
| 列出所有 service 單元配置 | "systemctl list-units --type=service" |
| 列出所有單元配置類型 | "systemctl list-units --type=help" |
| 列出內(nèi)存中所有 socket 單元 | "systemctl list-sockets" |
| 列出內(nèi)存中所有 timer 單元 | "systemctl list-timers" |
啟動(dòng) "$unit" |
"systemctl start $unit" |
停止 "$unit" |
"systemctl stop $unit" |
| 重新加載服務(wù)相關(guān)的配置 | "systemctl reload $unit" |
停止和啟動(dòng)所有 "$unit" |
"systemctl restart $unit" |
啟動(dòng) "$unit" 并停止所有其它的 |
"systemctl isolate $unit" |
轉(zhuǎn)換到 "圖形" (圖形界面系統(tǒng)) |
"systemctl isolate graphical" |
轉(zhuǎn)換到 "多用戶" (命令行系統(tǒng)) |
"systemctl isolate multi-user" |
轉(zhuǎn)換到 "應(yīng)急模式" (單用戶命令行系統(tǒng)) |
"systemctl isolate rescue" |
向"$unit"發(fā)送殺死信號(hào) |
"systemctl kill $unit" |
檢查"$unit"服務(wù)是否是活動(dòng)的 |
"systemctl is-active $unit" |
檢查"$unit"服務(wù)是否是失敗的 |
"systemctl is-failed $unit" |
檢查"$unit|$PID|device"的狀態(tài) |
"systemctl status $unit|$PID|$device" |
顯示"$unit|$job"的屬性 |
"systemctl show $unit|$job" |
重設(shè)失敗的"$unit" |
"systemctl reset-failed $unit" |
| 列出所有單元服務(wù)的依賴性 | "systemctl list-dependencies --all" |
| 列出安裝在系統(tǒng)上的單元文件 | "systemctl list-unit-files" |
啟用 "$unit" (增加符號(hào)鏈接) |
"systemctl enable $unit" |
禁用 "$unit" (刪除符號(hào)鏈接) |
"systemctl disable $unit" |
取消遮掩 "$unit" (刪除到 "/dev/null" 的符號(hào)鏈接) |
"systemctl unmask $unit" |
遮掩 "$unit" (增加到 "/dev/null" 的符號(hào)鏈接) |
"systemctl mask $unit" |
| 獲取默認(rèn)的 target 設(shè)置 | "systemctl get-default" |
設(shè)置默認(rèn) target 為"graphical" (圖形系統(tǒng)) |
"systemctl set-default graphical" |
設(shè)置默認(rèn)的 target 為"multi-user" (命令行系統(tǒng)) |
"systemctl set-default multi-user" |
| 顯示工作環(huán)境變量 | "systemctl show-environment" |
設(shè)置環(huán)境變量 "variable" 的值為 "value" |
"systemctl set-environment variable=value" |
取消環(huán)境變量 "variable" 的設(shè)置 |
"systemctl unset-environment variable" |
| 重新加載所有單元文件和后臺(tái)守護(hù)進(jìn)程(daemon) | "systemctl daemon-reload" |
| 關(guān)閉系統(tǒng) | "systemctl poweroff" |
| 關(guān)閉和重啟系統(tǒng) | "systemctl reboot" |
| 掛起系統(tǒng) | "systemctl suspend" |
| 休眠系統(tǒng) | "systemctl hibernate" |
這里, 上面例子中的"$unit",可以是一個(gè)單元名(后綴.service 和 .target 是可選的),或者,在很多情況下,也可以是匹配的多個(gè)單元 (shell 式樣的全局通配符"*", "?", "[]",通過使用 fnmatch(3) ,來匹配目前在內(nèi)存中的所有單元的基本名稱).
上面列子的系統(tǒng)狀態(tài)改變命令,通常是通過"sudo"來處理,用以獲得需要的系統(tǒng)管理權(quán)限。
"systemctl status $unit|$PID|$device" 的輸出使用有顏色的點(diǎn)("●")來概述單元狀態(tài),讓人看一眼就知道。
-
白色的 "●" 表示一個(gè) "不活動(dòng)"或"變?yōu)椴换顒?dòng)中"的狀態(tài)。
-
紅色的 "●"表示“失敗”或者“錯(cuò)誤”狀態(tài)。
-
綠色"●"表示“活動(dòng)”、“重新加載中”或“激活中”狀態(tài)。
3.6. 其它系統(tǒng)監(jiān)控
這里是 systemd 下其它零星的監(jiān)控命令列表。請(qǐng)閱讀包括 cgroups(7) 在內(nèi)的相關(guān)的 man 手冊(cè)頁。
表 3.7. systemd 下其它零星監(jiān)控命令列表
| 操作 | 命令片段 |
|---|---|
| 顯示每一個(gè)初始化步驟所消耗的時(shí)間 | "systemd-analyze time" |
| 列出所有單元的初始化時(shí)間 | "systemd-analyze blame" |
加載"$unit"文件并檢測(cè)錯(cuò)誤 |
"systemd-analyze verify $unit" |
| 簡(jiǎn)潔的顯示用戶調(diào)用會(huì)話的運(yùn)行時(shí)狀態(tài)信息 | "loginctl user-status" |
| 簡(jiǎn)潔的顯示調(diào)用會(huì)話的運(yùn)行時(shí)狀態(tài)信息 | "loginctl session-status" |
| 跟蹤 cgroups 的啟動(dòng)過程 | "systemd-cgls" |
| 跟蹤 cgroups 的啟動(dòng)過程 | "ps xawf -eo pid,user,cgroup,args" |
| 跟蹤 cgroups 的啟動(dòng)過程 | 讀取 "/sys/fs/cgroup/systemd/" 下的 sysfs |
3.7. 定制 systemd
3.7.1. 套接字激活
使用默認(rèn)安裝,通過 systemd 啟動(dòng)的過程中,在 network.target 啟動(dòng)后,很多網(wǎng)絡(luò)服務(wù) (參見 第 6 章 網(wǎng)絡(luò)應(yīng)用)作為后臺(tái)守護(hù)進(jìn)程(daemon)啟動(dòng)。 "sshd" 也不列外。讓我們修改為按需啟動(dòng)"sshd" 作為一個(gè)定制化的例子。
首先,禁用系統(tǒng)安裝的服務(wù)單元。
$ sudo systemctl stop sshd.service $ sudo systemctl mask sshd.service
傳統(tǒng) Unix 服務(wù)的按需套接字激活(on-demand socket activation)系統(tǒng)由 inetd (或 xinetd)超級(jí)服務(wù)來提供。在 systemd 下, 相同功能能夠通過增加*.socket 和 *.service 單元配置文件來啟用。
sshd.socket 用來定義一個(gè)監(jiān)聽的套接字
[Unit] Description=SSH Socket for Per-Connection Servers [Socket] ListenStream=22 Accept=yes [Install] WantedBy=sockets.target
[email protected] 作為 sshd.socket 匹配的服務(wù)文件
[Unit] Description=SSH Per-Connection Server [Service] ExecStart=-/usr/sbin/sshd -i StandardInput=socket
然后重新加載。
$ sudo systemctl daemon-reload
3.8. udev 系統(tǒng)
從 Linux 內(nèi)核 2.6 版開始,udev 系統(tǒng) 提供了自動(dòng)硬件發(fā)現(xiàn)和初始化機(jī)制。(參見 udev(7)).在內(nèi)核發(fā)現(xiàn)每個(gè)設(shè)備的基礎(chǔ)上,udev 系統(tǒng)使用從 sysfs 文件系統(tǒng) (參見 第 1.2.12 節(jié) “procfs 和 sysfs”)的信息啟動(dòng)一個(gè)用戶進(jìn)程,使用 modprobe(8) 程序 (參見 第 3.8.1 節(jié) “內(nèi)核模塊初始化”)加載支持它所要求的內(nèi)核模塊, 創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn)。
| 提示 | |
|---|---|
|
如果由于某些理由," " |
由于 udev 系統(tǒng)是一個(gè)正在變化的事物,我在其它文檔進(jìn)行了詳細(xì)描述,在這里只提供了最少的信息。
3.8.1. 內(nèi)核模塊初始化
通過 modprobe(8) 程序添加和刪除內(nèi)核模塊,使我們能夠從用戶進(jìn)程來配置正在運(yùn)行的 Linux 內(nèi)核。udev 系統(tǒng)(參見 第 3.8 節(jié) “udev 系統(tǒng)”)自動(dòng)化它的調(diào)用來幫助內(nèi)核模塊初始化。
下面的非硬件模塊和特殊的硬件驅(qū)動(dòng)模塊,需要被預(yù)先加載,把它們?cè)?/etc/modules"文件里列出 (參見 modules(5)).
-
TUN/TAP 模塊提供虛擬的 Point-to-Point 網(wǎng)絡(luò)設(shè)備 (TUN) 和虛擬的 Ethernet 以太網(wǎng)網(wǎng)絡(luò)設(shè)備 (TAP),
-
netfilter 模塊提供 netfilter 防火墻能力(
iptables(8), 第 5.6 節(jié) “Netfilter 網(wǎng)絡(luò)過濾框架”), -
watchdog timer 驅(qū)動(dòng)模塊。
modprobe(8) 程序的配置文件是按 modprobe.conf(5)的說明放在"/etc/modprobes.d/" 目錄下,(如果你想避免自動(dòng)加載某些內(nèi)核模塊,考慮把它們作為黑名單放在"/etc/modprobes.d/blacklist" 文件里.)
"/lib/modules/version/modules.dep" 文件由 depmod(8) 程序生成,它描述了 modprobe(8) 程序使用的模塊依賴性.
| 注意 | |
|---|---|
|
如果你在啟動(dòng)時(shí)出現(xiàn)模塊加載問題,或者 |
modinfo(8) 程序顯示 Linux 內(nèi)核模塊信息。
lsmod(8) 程序以好看的格式展示"/proc/modules"的內(nèi)容,顯示當(dāng)前內(nèi)核加載了哪些模塊。
| 提示 | |
|---|---|
|
你能夠精確識(shí)別你系統(tǒng)上的硬件。 參見第 9.5.3 節(jié) “硬件識(shí)別”. 你可以在啟動(dòng)時(shí)配置硬件來激活期望的硬件特征。參見 第 9.5.4 節(jié) “硬件配置”. 你可以重新編譯內(nèi)核來增加你的特殊設(shè)備的支持。參見 第 9.10 節(jié) “內(nèi)核”. |
網(wǎng)頁名稱:【Debian參考手冊(cè)】第?3?章?系統(tǒng)初始化
當(dāng)前URL:http://www.fisionsoft.com.cn/article/cdcgsjc.html


咨詢
建站咨詢
