这是用户在 2024-10-2 15:08 为 https://app.immersivetranslate.com/pdf/?file=file%3A%2F%2F%2FC%3A%2FUsers%2Ffengli%2FDownloads%2FLPI... 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

目录

主题 101:系统架构

1

101.1 确定和配置硬件设置

2

101.1 课程 1

3

介绍

3

设备激活

4

Linux 中的设备检查

4

信息文件和设备文件

11

存储设备

12

指导练习

14

探索性练习

15

摘要

16

指导练习的答案

17

探索性练习的答案

18

101.2 启动系统

19

101.2 课程 1

21

介绍

21

BIOS 或 UEFI

21

引导程序 如果您正在编写代码,请不要在每行代码前包含“line_number|”

23

系统初始化

25

初始化检查

26

指导练习

29

探索性练习

30

摘要

31

指导练习的答案

32

探索性练习的答案

33

101.3 更改运行级别 / 启动目标以及关闭或重启系统

34

101.3 课程 1

36

介绍

36

SysVinit

37

systemd

40

新兴企业

43

关机和重启

44

指导练习

46

探索性练习

47

摘要

48

指导练习的答案

49

探索性练习的答案

50

主题 102:LINUX 安装与软件包管理

51

102.1 设计硬盘布局

52

102.1 课程 1

53

介绍

53

挂载点

54

保持事物分离

55

Swap

57

LVM

58

指导练习

60

探索性练习

61

摘要

62

指导练习的答案

63

探索性练习的答案

64

102.2 安装引导管理器

65

102.2 课程 1

66

介绍

66

GRUB 传统版 vs. GRUB 2

67

引导加载程序在哪里

67

/boot 分区

68

GRUB 2

69

GRUB 传统

75

指导练习

80

探索性练习

81

摘要

82

指导练习的答案

83

探索性练习的答案

84

102.3 管理共享库

86

102.3 课程 1

87

介绍

87

共享库的概念

87

共享对象文件命名约定

88

共享库路径的配置

89

搜索特定可执行文件的依赖项

92

指导练习

94

探索性练习

95

摘要

96

指导练习的答案

98

探索性练习的答案

99

102.4 使用 Debian 包管理

100

102.4 课程 1

101

介绍

101

Debian 软件包工具(dpkg)

102

高级包工具 (apt)

106

指导练习

116

探索性练习

117

摘要

118

指导练习的答案

120

探索性练习的答案

121

102.5 使用 RPM 和 YUM 包管理

122

102.5 课程 1

123

介绍

123

RPM 包管理器(rpm)

124

黄色狗更新器修改版 (YUM)

129

DNF

134

Zypper

136

指导练习

143

探索性练习

144

摘要

145

指导练习的答案

146

探索性练习的答案

147

102.6 作为虚拟化客户机的 Linux

148

102.6 课程 1

149

介绍

149

虚拟化概述

149

虚拟机的类型

150

使用虚拟机模板

157

将虚拟机部署到云端

158

容器

161

指导练习

163

探索性练习

164

摘要

165

指导练习的答案

166

探索性练习的答案

167

主题 103:GNU 和 UNIX 命令

169

103.1 在命令行上工作

170

103.1 课程 1

172

介绍

172

获取系统信息

172

获取命令信息

173

使用您的命令历史记录

176

指导练习

177

探索性练习

178

摘要

179

指导练习的答案

180

探索性练习的答案

181

103.1 课程 2

182

介绍

182

查找您的环境变量

182

创建新的环境变量

183

删除环境变量

184

引用以转义特殊字符

185

指导练习

187

探索性练习

188

摘要

189

指导练习的答案

190

探索性练习的答案

191

103.2 使用过滤器处理文本流

192

103.2 课程 1

194

介绍

194

关于重定向和管道的快速回顾

194

处理文本流

196

指导练习

208

探索性练习

210

摘要

212

指导练习的答案

214

探索性练习的答案

219

103.3 执行基本文件管理

225

103.3 课程 1

227

介绍

227

操作文件

228

创建和删除目录

233

递归操作文件和目录

234

文件通配符和通配符

237

通配符的类型

238

指导练习

242

探索性练习

244

摘要

245

指导练习的答案

246

探索性练习的答案

248

103.3 课程 2

250

介绍

250

如何查找文件

250

归档文件

254

指导练习

260

探索性练习

261

摘要

262

指导练习的答案

263

探索性练习的答案

264

103.4 使用流、管道和重定向

266

103.4 课程 1

267

介绍

267

重定向

268

文档和字符串

271

指导练习

273

探索性练习

274

摘要

275

指导练习的答案

276

探索性练习的答案

277

103.4 课程 2

278

介绍

278

管道

278

命令替换

280

指导练习

283

探索性练习

284

摘要

285

指导练习的答案

286

探索性练习的答案

287

103.5 创建、监视和终止进程

288

103.5 课程 1

290

介绍

290

作业控制

290

过程监控

295

指导练习

306

探索性练习

308

摘要

310

指导练习的答案

312

探索性练习的答案

315

103.5 课程 2

318

介绍

318

终端复用器的特性

318

GNU Screen

319

tmux

326

指导练习

334

探索性练习

338

摘要

340

指导练习的答案

341

探索性练习的答案

345

103.6 修改进程执行优先级

347

103.6 课程 1

348

介绍

348

Linux 调度器

349

阅读优先级

349

处理友好性

351

指导练习

353

探索性练习

355

摘要

356

指导练习的答案

357

探索性练习的答案

359

103.7 使用正则表达式搜索文本文件

360

103.7 课程 1

361

介绍

361

括号表达式

362

量词

363

边界

364

分支和反向引用

365

使用正则表达式搜索

365

指导练习

367

探索性练习

368

摘要

369

指导练习的答案

370

探索性练习的答案

371

103.7 课程 2

372

介绍

372

模式查找器:grep

372

流编辑器:sed

376

结合 grep 和 sed

380

指导练习

383

探索性练习

384

摘要

386

指导练习的答案

387

探索性练习的答案

388

103.8 基本文件编辑

390

103.8 课程 1

391

介绍

391

插入模式

392

正常模式

392

冒号命令

395

替代编辑器

396

指导练习

398

探索性练习

399

摘要

400

指导练习的答案

401

探索性练习的答案

402

主题 104:设备、Linux 文件系统、文件系统层次标准

403

104.1 创建分区和文件系统

404

104.1 课程 1

405

介绍

405

理解 MBR 和 GPT

406

创建文件系统

413

使用 GNU Parted 管理分区

423

创建交换分区

430

指导练习

432

探索性练习

433

摘要

435

指导练习的答案

436

探索性练习的答案

437

104.2 维护文件系统的完整性

439

104.2 课程 1

440

介绍

440

检查磁盘使用情况

440

检查可用空间

443

维护 ext2、ext3 和 ext4 文件系统

447

指导练习

454

探索性练习

455

摘要

456

指导练习的答案

457

探索性练习的答案

459

104.3 控制文件系统的挂载和卸载

461

104.3 课程 1

462

介绍

462

挂载和卸载文件系统

462

在启动时挂载文件系统

466

使用 UUID 和标签

468

使用 Systemd 挂载磁盘

470

指导练习

474

探索性练习

475

摘要

476

指导练习的答案

477

探索性练习的答案

479

104.5 管理文件权限和所有权

481

104.5 课程 1

482

介绍

482

查询文件和目录的信息

482

关于目录

483

查看隐藏文件

484

理解文件类型

485

理解权限

485

修改文件权限

487

修改文件所有权

491

查询组

491

默认权限

492

特殊权限

494

指导练习

498

探索性练习

500

摘要

501

指导练习的答案

502

探索性练习的答案

505

104.6 创建和更改硬链接和符号链接

508

104.6 课程 1

509

介绍

509

理解链接

509

指导练习

514

探索性练习

515

摘要

518

指导练习的答案

519

探索性练习的答案

520

104.7 查找系统文件并将文件放置在正确的位置

524

104.7 课程 1

525

介绍

525

文件系统层次标准

525

查找文件

528

指导练习

537

探索性练习

538

摘要

539

指导练习的答案

540

探索性练习的答案

542

印记

544

主题 101:系统架构

LPIC-1 (101) (版本 5.0) |

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 1

101.1 确定和配置硬件设置

参考 LPI 目标

LPIC-1 v5,考试 101,目标 101.1

重量

2

关键知识领域

• 启用和禁用集成外设。

• 区分各种类型的磁盘存储设备。

• 确定设备的硬件资源。

• 列出各种硬件信息的工具和实用程序(例如 lsusb、lspci 等)。

• 操作 USB 设备的工具和实用程序。

• 对 sysfs、udev 和 dbus 的概念理解。

使用的文件、术语和工具的部分列表

/ sys /

/ proc /

/ dev /

modprobe

lsmod

lspci

lsusb

LPIC-1 (101) (版本 5.0) | 主题 101: 系统架构

2 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0。 | 版本:2023-09-04

101.1 课程 1

证书:LPIC-1

版本:5.0

主题:101 系统架构

目标:101.1 确定和配置硬件

设置

课程:1 / 1

介绍

自电子计算的早期以来,商业和个人计算机制造商在其机器中集成了各种硬件部件,这些部件又需要操作系统的支持。从操作系统开发者的角度来看,这可能是压倒性的,除非行业建立了指令集和设备通信的标准。类似于操作系统为应用程序提供的标准化抽象层,这些标准使得编写和维护不依赖于特定硬件模型的操作系统变得更加容易。然而,集成的底层硬件的复杂性有时需要调整资源如何暴露给操作系统,以便它能够正确安装和运行。

这些调整中的一些甚至可以在没有安装操作系统的情况下进行。大多数机器提供了一个可以在机器开机时执行的配置工具。直到 2000 年代中期,配置工具是在 BIOS(基本输入/输出系统)中实现的,这是包含 x86 主板中基本配置例程的固件标准。从 2000 年代第一个十年的末期开始,基于 x86 架构的机器开始用一种称为 UEFI(统一可扩展固件接口)的新实现替代 BIOS。

LPIC-1 (101) (版本 5.0) | 101.1 确定和配置硬件设置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 3

具有更复杂的识别、测试、配置和固件升级功能。尽管发生了变化,但仍然称配置工具为 BIOS 并不罕见,因为这两种实现都满足相同的基本目的。

NOTE

关于 BIOS 和 UEFI 之间的相似性和差异的更多细节将在后面的课程中介绍。

设备激活

系统配置工具在计算机开机时按下特定键后显示。按下哪个键因制造商而异,但通常是或某个功能键,例如或。使用的键组合通常在开机画面中显示。

在 BIOS 设置实用程序中,可以启用和禁用集成外设,激活基本错误保护,并更改硬件设置,如 IRQ(中断请求)和 DMA(直接内存访问)。在现代机器上,通常不需要更改这些设置,但可能需要进行调整以解决特定问题。例如,有些 RAM 技术与比默认值更快的数据传输速率兼容,因此建议将其更改为制造商指定的值。一些 CPU 提供的功能可能对于特定安装并不需要,可以被禁用。禁用的功能将减少功耗,并可以增加系统保护,因为包含已知错误的 CPU 功能也可以被禁用。

如果机器配备了多个存储设备,重要的是要定义哪个设备具有正确的引导加载程序,并应作为设备启动顺序中的第一个条目。如果不正确的设备在 BIOS 启动验证列表中排在第一位,操作系统可能无法加载。

Linux 中的设备检查

一旦设备被正确识别,操作系统就需要关联所需的相应软件组件。当硬件功能未按预期工作时,确定问题发生的具体位置非常重要。当操作系统未检测到某个硬件时,该部件或其连接的端口很可能是有缺陷的。当硬件部件被正确检测到,但仍然无法正常工作时,可能是操作系统方面的问题。因此,处理与硬件相关的问题时,第一步是检查操作系统是否正确检测到设备。在 Linux 系统上识别硬件资源有两种基本方法:使用专门的命令或读取特殊文件系统中的特定文件。

LPIC-1 (101) (版本 5.0) | 主题 101: 系统架构

4 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

101.2 启动系统

参考 LPI 目标

LPIC-1 v5,考试 101,目标 101.2

重量

3

关键知识领域

• 在启动时向引导加载程序提供常见命令和向内核提供选项。

• 演示从 BIOS/UEFI 到启动完成的启动序列知识。

• 理解 SysVinit 和 systemd。

• 对 Upstart 的认识。

• 检查日志文件中的启动事件。

使用的文件、术语和工具的部分列表

dmesg

journalctl

• BIOS

• UEFI

• 引导加载程序

• 内核

initramfs

init

• SysVinit

LPIC-1 (101) (版本 5.0) | 101.2 启动系统

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 19

探索性练习

作为系统管理员,需要定期检查以删除大量文件。这些大量文件位于 /var 中,并以 .backup 扩展名结尾。

◦ 使用 find 命令定位这些文件:

对这些文件大小的分析表明,它们的范围从 100M 到 1000M。使用此新信息完成之前的命令,以便您可以找到范围在 100M 到 1000M 之间的备份文件:

最后,完成此命令,执行删除操作,以便这些文件将被移除:

在 /var 目录中,存在四个备份文件:db-jan-2018.backup

db-feb-2018.backup db-march-2018.backup db-apr-2018.backup

使用 tar,指定创建名为 db-first- 的归档文件的命令

季度-2018.备份.tar:

使用 tar,指定创建归档并使用 gzip 压缩的命令。

请注意,生成的文件名应以 .gz 结尾:

LPIC-1 (101) (版本 5.0) | 103.3 执行基本文件管理

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 261

%CPU

CPU 使用百分比。

%MEM

物理内存使用百分比。

VSZ

进程的虚拟内存(以 KiB 为单位)。

RSS

进程使用的非交换物理内存(以 KiB 为单位)。

TT

终端 (tty) 控制进程。

STAT

表示进程状态的代码。除了 S、R 和 Z(我们在描述 top 的输出时看到的),其他可能的值包括:D(不可中断的睡眠 — 通常等待 I/O)、T(停止 — 通常由控制信号引起)。一些额外的修饰符包括:<(高优先级 — 对其他进程不友好)、N(低优先级 — 对其他进程友好)或 +(在前台进程组中)。

开始

进程开始的时间。

TIME

累计 CPU 时间。

命令

启动该进程的命令。

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 305

$ screen -ls

在以下屏幕上:

1090.第二次会话 (08/24/19 14:38:35) (附加) 1037.pts-0.debian (08/24/19 13:53:36) (附加) 在 /run/screen/S-carol 中有 2 个套接字。

要结束一个会话,请退出其所有窗口,或直接输入命令 screen -S SESSION-PID -X quit(您也可以提供会话名称)。让我们结束我们的第一个会话:

$ screen -S 1037 -X quit

您将被送回到屏幕外的终端提示符。但请记住,我们的第二个会话仍然处于活动状态:

$ screen -ls

在以下屏幕上:

1090.第二会话 (08/24/19 14:38:35) (分离) 1 个套接字在 /run/screen/S-carol。

然而,由于我们终止了其父会话,它被赋予了一个新标签:分离。

会话分离

出于多种原因,您可能希望将屏幕会话从其终端中分离:

• 让你在工作时的电脑完成其任务,并在家中远程连接。

• 与其他用户共享会话。

您可以使用键组合 + - 来分离会话。您将返回到终端:

[从 1090.第二会话中分离] $

要重新连接到会话,您可以使用命令 screen -r SESSION-PID。或者,您可以使用上面看到的 SESSION-NAME。如果只有一个分离的会话,则两者都不是强制的:

$ screen -r

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 323

$

[LPI] 0:窗口零- 1:窗口一* "debian" 19:05 27Aug-19

要垂直分割,请使用 + - :

│$

1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │

3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │

4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │

5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│

7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │

8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │

9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │

──────────────────────────────────────────────────────────────────────────────────────┴──────────── ───

$

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 329

[LPI] 0:窗口零- 1:窗口一* "debian" 19:05 27Aug-19

要销毁当前面板(连同其内部运行的伪终端以及任何相关程序),请使用 + - 。系统会在状态栏上询问您确认:

杀死面板 1?(y/n)

重要的窗格命令:

Ctrl

+ - , , ,

在窗格之间移动。

Ctrl

+ -

移动到最后一个活动窗格。

Ctrl

+ - +

调整窗格大小为一行。

Ctrl

+ - +

调整窗格大小五行。

Ctrl

+ -

交换窗格(当前到上一个)。

Ctrl

+ -

交换窗格(当前到下一个)。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

330 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

Ctrl

+ -

缩放面板。

Ctrl

+ -

tmux 在窗格内显示一个花哨的时钟(按 q 结束它)。

Ctrl

+ -

将面板转换为窗口。

要查看完整的命令列表,请查阅手册页。

会话

要在 tmux 中列出会话,可以使用 + - :

(0) + LPI: 2 个窗口(附加)

另外,您可以使用 tmux ls 命令:

$ tmux ls

LPI: 2 窗口(创建于 2019 年 8 月 27 日 19:01:49)[158x39](附加)

只有一个会话(LPI),其中包含两个窗口。让我们从当前会话中创建一个新会话。这可以通过使用 +,在提示符下输入 :new,然后按 Enter 来实现。您将被发送到新会话,可以在状态栏上观察到:

[2] 0:bash* "debian" 19:15 27-八月-19

默认情况下,tmux 将会话命名为 2。要重命名,请使用 + - 。当提示时,提供新名称并按 Enter 键:

(重命名会话) 第二会话

您可以使用 + - 切换会话(使用箭头键和):

(0) + LPI: 2 窗口 (1) + 第二会话: 1 窗口 (附加)

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 331

要终止一个会话,可以使用命令 tmux kill-session -t SESSION-NAME。如果您在当前已连接的会话中输入该命令,您将被退出 tmux 并返回到初始终端会话:

$ tmux kill-session -t "第二个会话"

[退出] $

会话分离

通过结束第二个会话,我们被抛出了 tmux。然而,我们仍然有一个活动会话。询问 tmux 会话列表,你肯定会在那里找到它:

$ tmux ls

LPI: 2 窗口(创建于 2019 年 8 月 27 日 19:01:49)[158x39]

然而,此会话与其终端已分离。我们可以使用 tmux attach -t SESSION-NAME 进行连接(attach 可以替换为 at 或 — 简单地 — a)。当只有一个会话时,名称规范是可选的:

$ tmux a

您现在已回到您的会话;要从中分离,请按 + - :

[分离(来自会话 LPI)] $

TIP

同一个会话可以附加到多个终端。如果您想附加一个会话并确保它首先从其他终端分离,请使用 -d 选项:tmux attach -d -t SESSION-NAME。

重要的会话附加/分离命令:

Ctrl

+ -

选择要分离的客户端。

Ctrl

+ -

刷新客户端的终端。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

332 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

要查看完整的命令列表,请查阅手册页。

复制和粘贴:滚动模式

tmux 还具有与 screen 基本相同的复制模式(记得使用 tmux 的命令前缀,而不是 screen 的!)。唯一的区别是,在命令上,你使用 + 空格来标记选择的开始,使用 + 来复制选定的文本。

tmux 的自定义设置

tmux 的配置文件通常位于 /etc/tmux.conf 和 ~/.tmux.conf。当启动 tmux 时,如果这些文件存在,tmux 会加载它们。还可以使用 -f 选项启动 tmux,以提供备用配置文件。您可以在 /usr/share/doc/tmux/example_tmux.conf 找到一个 tmux 配置文件示例。您可以实现的自定义级别非常高。您可以做的一些事情包括:

• 更改前缀键 # 将前缀键更改为 C-a

设置 -g 前缀 C-a 解绑 C-b 绑定 C-a 发送前缀

• 为编号大于 9 的窗口设置额外的键绑定 # 一些额外的键绑定用于选择编号较高的窗口

绑定 F1 选择窗口 -t:10 绑定 F2 选择窗口 -t:11 绑定 F3 选择窗口 -t:12

要获取所有绑定的完整列表,请输入 + - (按 q 退出)或查阅手册页。

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 333

指导练习

1. 指出以下陈述/特性是否对应于 GNU Screen、tmux 或两者:特性/陈述 GNU Screen tmux

默认命令前缀是

Ctrl

+

客户端-服务器模型

窗格是伪终端

杀死一个区域并不会杀死其关联的窗口

会话包括窗口

会话可以被分离

在您的计算机上安装 GNU Screen(软件包名称:screen),并完成以下操作。

任务:

◦ 启动程序。你使用什么命令?

◦ 开始顶部:

◦ 使用 screen 的键前缀,打开一个新窗口;然后,使用 vi 打开 /etc/screenrc:

◦ 在屏幕底部列出窗口:

将当前窗口的名称更改为 vi:

◦ 将剩余窗口的名称更改为顶部。为此,首先显示所有窗口的列表,以便您可以上下移动并选择正确的窗口:

◦ 通过在底部显示窗口名称来检查名称是否已更改

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

334 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

屏幕再次:

◦ 现在,分离会话并让屏幕创建一个名为 ssh 的新会话:

◦ 也从 ssh 中分离,并让 screen 显示会话列表:

◦ 现在,使用其 PID 附加到第一个会话:

◦ 你应该回到显示顶部的窗口。水平拆分窗口并移动到新的空区域:

◦ 让屏幕列出所有窗口,并选择 vi 在新的空区域中显示:

◦ 现在,垂直拆分当前区域,进入新创建的空区域,并将其与一个全新的窗口关联:

◦ 终止除当前区域外的所有区域(请记住,尽管您终止了区域,但窗口仍然存在)。然后,退出当前会话的所有窗口,直到会话本身被终止:

最后,让 screen 再次列出其会话,通过 PID 杀死剩余的 ssh 会话,并检查实际上没有剩余的会话:

3. 在你的计算机上安装 tmux(软件包名称:tmux),并完成以下任务:◦ 启动程序。你使用什么命令?

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 335

我们的会话?

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 339

指导练习的答案

1. 指出以下陈述/特性是否对应于 GNU Screen、tmux 或两者:特性/陈述 GNU Screen tmux

默认命令前缀是

Ctrl

+

x

客户端-服务器模型 x

窗格是伪终端 x

杀死一个区域并不会杀死其关联的窗口

x

会话包括窗口 x x

会话可以被分离 x x

在您的计算机上安装 GNU Screen(软件包名称:screen),并完成以下操作。

任务:

◦ 启动程序。你使用什么命令?

屏幕

◦ 开始顶部:

top

◦ 使用 screen 的键前缀,打开一个新窗口;然后,使用 vi 打开 /etc/screenrc:

Ctrl

+ -

sudo vi /etc/screenrc

◦ 在屏幕底部列出窗口:

Ctrl

+ -

将当前窗口的名称更改为 vi:

Ctrl

+ - . 然后我们必须输入 vi 并按下 .

◦ 将剩余窗口的名称更改为顶部。为此,首先显示所有窗口的列表,以便您可以上下移动并选择正确的窗口:

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 341

首先我们输入 + - . 然后使用箭头键标记说 0 bash 的那一项并按 . 最后,我们输入 + - ,输入 top 并按 .

◦ 通过再次在屏幕底部显示窗口名称来检查名称是否已更改:

Ctrl

+ -

◦ 现在,分离会话并让屏幕创建一个名为 ssh 的新会话:

Ctrl

+ - screen -S "ssh" 然后按 .

◦ 也从 ssh 中分离,并让 screen 显示会话列表:

Ctrl

+ - screen -list 或 screen -ls.

◦ 现在,使用其 PID 附加到第一个会话:

screen -r 会话的 PID

◦ 你应该回到显示顶部的窗口。水平拆分窗口并移动到新的空区域:

Ctrl

+ -

Ctrl

+ -

◦ 让屏幕列出所有窗口,并选择 vi 在新的空区域中显示:

我们使用 + - 来显示所有窗口以供选择,标记 vi 并按 .

◦ 现在,垂直拆分当前区域,进入新创建的空区域,并将其与一个全新的窗口关联:

Ctrl

+ -

Ctrl

+ -

Ctrl

+ -

◦ 终止除当前区域外的所有区域(请记住,尽管您终止了区域,但窗口仍然存在)。然后,退出当前会话的所有窗口,直到会话本身被终止:

Ctrl

+ - . 退出 (退出 Bash)。 + ,然后我们输入 quit 并按 (退出 vi)。之后,

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

342 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

我们输入 exit(以退出底层 Bash shell)q(以终止 top);然后我们输入 exit(以退出底层 Bash shell)。

最后,让 screen 再次列出其会话,通过 PID 杀死剩余的 ssh 会话,并检查实际上没有剩余的会话:

screen -list 或 screen -ls

screen -S 会话的 PID -X 退出

screen -list 或 screen -ls

3. 在你的计算机上安装 tmux(软件包名称:tmux),并完成以下任务:◦ 启动程序。你使用什么命令?

tmux

◦ 开始顶部(注意在几秒钟内,窗口的名称在状态栏中变为顶部):

top

◦ 使用 tmux 的键前缀,打开一个新窗口;然后,使用 nano 创建 ~/.tmux.conf:

Ctrl

+ - nano ~/.tmux.conf

◦ 垂直拆分窗口并将新创建的窗格大小缩小几次:

Ctrl

+ -

Ctrl

+ - +

◦ 现在将当前窗口的名称更改为文本编辑;然后,让 tmux 显示所有会话的列表:

Ctrl

+ - . 然后我们提供新名称并按 . + - 或 tmux ls。

◦ 使用相同的键组合在运行 top 的窗口和当前窗口之间切换:

Ctrl

+ - 或 + -

◦ 从当前会话中分离并创建一个名为 ssh 的新会话及其窗口

名称是 ssh 窗口:

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 343

Ctrl

+ - tmux new -s "ssh" -n "ssh window"

◦ 也从 ssh 会话中分离,并让 tmux 再次显示会话列表:

Ctrl

+ - tmux ls

NOTE

从此时起,练习要求您使用远程机器通过 ssh 连接到本地主机(虚拟机是完全有效的,并且可以非常实用)。确保您的本地机器上安装并运行 openssh-server,并且远程机器上至少安装了 openssh-client。

◦ 现在,启动一台远程机器并通过 ssh 连接到本地主机。一旦连接建立,检查 tmux 会话:

在远程主机上:ssh local-username@local-ipaddress。连接到本地机器后:tmux ls。

在远程主机上,通过名称附加到 ssh 会话:

tmux a -t ssh(a 可以替换为 at 或 attach)。

在本地机器上,通过名称附加到 ssh 会话,确保首先终止与远程主机的连接:

tmux a -d -t ssh(a 可以替换为 at 或 attach)。

◦ 显示所有会话以供选择,然后进入您的第一个会话 ([0])。到达后,通过名称终止会话 ssh:

我们输入 + - ,使用箭头键标记会话 0,然后按 tmux kill-session -t ssh。

◦ 最后,通过名称从当前会话中分离并终止它:

Ctrl

+ - tmux kill-session -t 0.

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

344 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

探索性练习的答案

1. 屏幕和 tmux 都可以通过命令前缀 + 进入命令行模式(我们已经看到过 tmux 的简要示例)。在命令行中进行一些研究和以下任务。

模式:

◦ 使屏幕进入复制模式:

Ctrl

+ - — 然后,我们输入复制。

◦ 使 tmux 重命名当前窗口:

Ctrl

+ - — 然后,我们输入 rename-window。

◦ 使屏幕关闭所有窗口并终止会话:

Ctrl

然后,我们输入 quit。

◦ 使 tmux 将一个窗格分成两个:

Ctrl

+ - — 然后,我们输入 split-window。

◦ 使 tmux 终止当前窗口:

Ctrl

+ - — 然后,我们输入 kill-window。

2. 当你在 screen 中进入复制模式时,不仅可以使用箭头键和来导航当前窗口和滚动缓冲区。还可以使用一个

类似 vi 的全屏编辑器。使用此编辑器执行以下任务:

◦ 在您的屏幕终端回显 supercalifragilisticexpialidocious:

回声超级无敌的奇妙词

◦ 现在,复制光标上方一行中的五个连续字符(从左到右):

我们进入复制模式:+ - 或 + - 然后输入 copy。接着,我们使用 k 移动到上一行并按下以标记选择的开始。最后,我们使用 l 向前移动四个字符,再次按下以标记选择的结束。

◦ 最后,将选择(stice)粘贴回您的命令提示符:

Ctrl

+ -

3. 假设您想与另一个用户共享一个 tmux 会话(our_session)。您已经创建了

LPIC-1 (101) (版本 5.0) | 103.5 创建、监控和终止进程

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 345

确保套接字 (/tmp/our_socket) 具有正确的权限,以便您和其他用户都可以读取和写入。为了使第二个用户能够通过 tmux -S /tmp/our_socket a -t our_session 成功附加会话,还应满足其他两个条件是什么?

两个用户必须有一个共同的组,例如 multiplexer。然后,我们还必须将套接字更改为该组:chgrp multiplexer /tmp/our_socket。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

346 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

103.6 修改进程执行优先级

参考 LPI 目标

LPIC-1 v5,考试 101,目标 103.6

重量

2

关键知识领域

• 了解创建作业的默认优先级。

• 以高于或低于默认的优先级运行程序。

• 更改正在运行的进程的优先级。

使用的文件、术语和工具的部分列表

nice

ps

重优先级

top

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 347

103.6 课程 1

证书:LPIC-1

版本:5.0

主题:103 GNU 和 Unix 命令

目标:103.6 修改进程执行优先级

课程:1 / 1

介绍

能够同时运行多个进程的操作系统称为多任务或多处理系统。虽然真正的同时性仅在有多个处理单元可用时发生,但即使是单处理器系统也可以通过非常快速地在进程之间切换来模拟同时性。这种技术也应用于具有多个等效 CPU 或对称多处理器(SMP)系统的系统,因为潜在的并发进程数量远远超过可用处理单元的数量。

实际上,任何时候只有一个进程可以控制 CPU。然而,大多数进程活动都是系统调用,也就是说,正在运行的进程将 CPU 控制权转移给操作系统的进程,以便它执行请求的操作。系统调用负责所有设备间的通信,如内存分配、在文件系统上读写、在屏幕上打印文本、用户交互、网络传输等。在系统调用期间转移 CPU 控制权允许操作系统决定是将 CPU 控制权返回给先前的进程,还是将其交给另一个进程。由于现代 CPU 执行指令的速度远快于大多数外部硬件之间的通信速度,因此新的控制进程可以在先前请求的硬件响应仍不可用时进行大量的 CPU 工作。为了确保最大限度地利用 CPU,多进程操作系统保持一个动态队列,等待活动进程。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

348 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

为 CPU 时间片。

尽管它们可以显著提高 CPU 时间利用率,但仅依赖系统调用在进程之间切换并不足以实现令人满意的多任务性能。一个不进行系统调用的进程可以无限期地控制 CPU。这就是现代操作系统也是抢占式的原因,即正在运行的进程可以被放回队列,以便更重要的进程可以控制 CPU,即使正在运行的进程没有进行系统调用。

Linux 调度器

Linux 作为一个抢占式多处理操作系统,实现了一个调度器来组织进程队列。更准确地说,调度器还决定了哪个排队的线程将被执行——一个进程可以分支出许多独立的线程——但在这个上下文中,进程和线程是可以互换的术语。每个进程有两个影响其调度的谓词:调度策略和调度优先级。

调度策略主要有两种类型:实时策略和普通策略。在实时策略下,进程根据其优先级值直接进行调度。如果一个更重要的进程变为可运行状态,则一个优先级较低的正在运行的进程会被抢占,优先级更高的进程将控制 CPU。只有在优先级更高的进程空闲或等待硬件响应时,优先级较低的进程才会获得 CPU 控制权。

任何实时进程的优先级都高于普通进程。作为一个通用操作系统,Linux 仅运行少数实时进程。大多数进程,包括系统和用户程序,都是在普通调度策略下运行的。普通进程通常具有相同的优先级值,但普通策略可以使用另一个进程谓词定义执行优先级规则:nice 值。为了避免与从 nice 值派生的动态优先级混淆,调度优先级通常称为静态调度优先级。

Linux 调度程序可以以多种不同方式进行配置,并且存在更复杂的优先级设定方式,但这些一般概念始终适用。在检查和调整进程调度时,重要的是要记住,只有在正常调度策略下的进程才会受到影响。

阅读优先级

Linux 为实时进程保留了从 0 到 99 的静态优先级,正常进程被分配到从 100 到 139 的静态优先级,这意味着正常进程有 39 个不同的优先级级别。较低的值意味着更高的优先级。活动进程的静态优先级可以在 sched 文件中找到,该文件位于 /proc 中相应目录内。

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 349

文件系统:

$ grep ^prio /proc/1/sched

优先级 : 120

如示例所示,以 prio 开头的行给出了进程的优先级值(PID 1 进程是 init 或 systemd 进程,是内核在系统初始化期间启动的第一个进程)。正常进程的标准优先级为 120,因此可以降低到 100 或提高到 139。所有运行进程的优先级可以通过命令 ps -Al 或 ps -el 验证:

$ ps -el

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 1 0 0 80 0 - 9292 - ? 00:00:00 systemd

4 S 0 19 1 0 80 0 - 8817 - ? 00:00:00 systemd-journal

4 S 104 61 1 0 80 0 - 64097 - ? 00:00:00 rsyslogd

4 S 0 63 1 0 80 0 - 7244 - ? 00:00:00 cron

1 S 0 126 1 0 80 0 - 4031 - ? 00:00:00 dhclient

4 S 0 154 1 0 80 0 - 3937 - pts/0 00:00:00 agetty

4 S 0 155 1 0 80 0 - 3937 - pts/1 00:00:00 agetty

4 S 0 156 1 0 80 0 - 3937 - pts/2 00:00:00 agetty

4 S 0 157 1 0 80 0 - 3937 - pts/3 00:00:00 agetty

4 S 0 158 1 0 80 0 - 3937 - 控制台 00:00:00 agetty

4 S 0 160 1 0 80 0 - 16377 - ? 00:00:00 sshd

4 S 0 280 0 0 80 0 - 5301 - ? 00:00:00 bash

0 R 0 392 280 0 80 0 - 7221 - ? 00:00:00 ps

PRI 列表示内核分配的静态优先级。然而,请注意,ps 显示的优先级值与前一个示例中获得的值不同。由于历史原因,ps 显示的优先级默认范围为 -40 到 99,因此实际优先级是通过将其加 40 获得的(特别是,80 + 40 = 120)。

也可以使用程序 top 持续监控当前由 Linux 内核管理的进程。与 ps 一样,top 也以不同的方式显示优先级值。为了更容易识别实时进程,top 将优先级值减去 100,从而使所有实时优先级为负数,负数或 rt 用于标识它们。因此,top 显示的正常优先级范围为 0 到 39。

NOTE

要从 ps 命令获取更多详细信息,可以使用其他选项。将此命令的输出与我们之前示例的输出进行比较:

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

350 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

$ ps -e -o user,uid,comm,tty,pid,ppid,pri,pmem,pcpu --sort=-pcpu | head

处理友好性

每个正常进程的默认优先级值为 0(优先级 120)。nice 这个名称源于“更友好”的进程允许其他进程在特定执行队列中先于它们运行的想法。nice 值范围从-20(不友好,高优先级)到 19(更友好,低优先级)。Linux 还允许在同一进程内为线程分配不同的 nice 值。ps 输出中的 NI 列表示 nice 值。

只有根用户才能将进程的优先级降低到零以下。可以使用命令 nice 启动具有非标准优先级的进程。默认情况下,nice 将优先级更改为 10,但可以通过选项 -n 指定:

$ nice -n 15 tar czf home_backup.tar.gz /home

在这个例子中,命令 tar 以 15 的优先级执行。命令 renice 可用于更改正在运行的进程的优先级。选项 -p 表示目标进程的 PID 号。例如:

# renice -10 -p 2164

2164(进程 ID)旧优先级 0,新优先级 -10

选项 -g 和 -u 分别用于修改特定组或用户的所有进程。使用 renice +5 -g users,将提高组 users 中用户拥有的进程的优先级五。

除了 renice,进程的优先级还可以通过其他程序进行修改,例如程序 top。在 top 主屏幕上,可以通过按 r 然后输入进程的 PID 号来修改进程的亲和度:

顶级 - 11:55:21 已运行 23:38,1 用户,负载平均值:0.10,0.04,0.05 任务:总计 20,1 正在运行,19 休眠,0 停止,0 僵尸 %Cpu(s):0.5 us,0.3 sy,0.0 ni,99.0 id,0.0 wa,0.2 hi,0.0 si,0.0 st KiB 内存:4035808 总计,774700 空闲,1612600 已用,1648508 缓冲/缓存 KiB 交换:7999828 总计,7738780 空闲,261048 已用。2006688 可用内存

PID 重新调整优先级 [默认 pid = 1]

PID 用户 PR NI 虚拟内存 物理内存 共享内存 S %CPU %MEM 时间+ 命令 1 root 20 0 74232 7904 6416 S 0.000 0.196 0:00.12 systemd

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 351

15 root 20 0 67436 6144 5568 S 0,000 0,152 0:00.03 systemd-journal

21 root 20 0 61552 5628 5000 S 0,000 0,139 0:00.01 systemd-logind

22 消息 + 20 0 43540 4072 3620 S 0,000 0,101 0:00.03 dbus-daemon

23 root 20 0 45652 6204 4992 S 0,000 0,154 0:00.06 wickedd-dhcp4

24 root 20 0 45648 6276 5068 S 0,000 0,156 0:00.06 wickedd-auto4

25 root 20 0 45648 6272 5060 S 0,000 0,155 0:00.06 wickedd-dhcp6

消息 PID 可以重置为 [默认 PID = 1],此时默认选中列表中的第一个进程。要更改另一个进程的优先级,请输入其 PID 并按 Enter。然后,将出现消息 Renice PID 1 到值(包含请求的 PID 号码),并可以分配新的 nice 值。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

352 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

指导练习

在抢占式多任务系统中,当一个低优先级进程占用处理器而一个高优先级进程排队等待执行时,会发生什么?

2. 考虑以下顶部屏幕:top - 08:43:14 已运行 23 天,12:29,5 个用户,平均负载:0.13,0.18,0.21

任务:总计 240,正在运行 2,休眠 238,停止 0,僵尸 0 %Cpu(s):1.4 us,0.4 sy,0.0 ni,98.1 id,0.0 wa,0.0 hi,0.0 si,0.0 st MiB 内存:7726.4 总计,590.9 空闲,1600.8 使用,5534.7 缓冲/缓存 MiB 交换:30517.0 总计,30462.5 空闲,54.5 使用。5769.4 可用内存

PID 用户 PR NI 虚拟内存 物理内存 共享内存 S %CPU %MEM 时间+ 命令

1 root 20 0 171420 10668 7612 S 0,0 0,1 9:59.15 systemd

2 root 20 0 0 0 0 S 0,0 0,0 0:02.76 kthreadd

3 根 0 -20 0 0 0 我 0,0 0,0 0:00.00 rcu_gp

4 根 0 -20 0 0 0 I 0,0 0,0 0:00.00 rcu_par_gp

8 根 0 -20 0 0 0 I 0,0 0,0 0:00.00 mm_percpu_wq

9 root 20 0 0 0 0 S 0,0 0,0 0:49.06 ksoftirqd/0

10 根 20 0 0 0 0 我 0,0 0,0 18:24.20 rcu_sched

11 root 20 0 0 0 0 I 0,0 0,0 0:00.00 rcu_bh

12 root rt 0 0 0 0 S 0,0 0,0 0:08.17 migration/0

14 root 20 0 0 0 0 S 0,0 0,0 0:00.00 cpuhp/0

15 根 20 0 0 0 0 S 0,0 0,0 0:00.00 cpuhp/1

16 root rt 0 0 0 0 S 0,0 0,0 0:11.79 migration/1

17 root 20 0 0 0 0 S 0,0 0,0 0:26.01 ksoftirqd/1

哪些进程 ID 具有实时优先级?

3. 考虑以下 ps -el 列表: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 1 0 0 80 0 - 42855 - ? 00:09:59 systemd

1 S 0 2 0 0 80 0 - 0 - ? 00:00:02 kthreadd

1 我 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp

1 S 0 9 2 0 80 0 - 0 - ? 00:00:49 ksoftirqd/0

1 我 0 10 2 0 80 0 - 0 - ? 00:18:26 rcu_sched

1 我 0 11 2 0 80 0 - 0 - ? 00:00:00 rcu_bh

1 S 0 12 2 0 -40 - - 0 - ? 00:00:08 迁移/0

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 353

1 S 0 14 2 0 80 0 - 0 - ? 00:00:00 cpuhp/0 5 S 0 15 2 0 80 0 - 0 - ? 00:00:00 cpuhp/1

哪个 PID 优先级更高?

4. 尝试使用 renice 调整进程优先级时,出现以下错误:$ renice -10 21704

renice:无法为 21704(进程 ID)设置优先级:权限被拒绝

错误的可能原因是什么?

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

354 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

探索性练习

1. 当一个进程占用过多的 CPU 时间时,通常需要更改进程优先级。使用 ps 命令的标准选项以长格式打印所有系统进程时,哪个 --sort 标志将按 CPU 利用率进行排序,升序排列?

2. 命令 schedtool 可以设置 Linux 能够支持的所有 CPU 调度参数或显示给定进程的信息。如何使用它来显示进程 1750 的调度参数?此外,如何使用 schedtool 将进程 1750 更改为实时优先级 -90(如 top 所示)?

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 355

摘要

本课程介绍了 Linux 如何在其管理的进程之间共享 CPU 时间。为了确保最佳性能,更关键的进程必须超越较不关键的进程。本课程将通过以下步骤进行讲解:

• 多处理系统的基本概念。

• 什么是进程调度器,Linux 是如何实现它的。

• 什么是 Linux 优先级、nice 值及其目的。

• 如何在 Linux 中读取和解释进程优先级。

• 如何在进程执行前和执行期间更改进程的优先级。

LPIC-1 (101) (版本 5.0) | 主题 103:GNU 和 Unix 命令

356 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0。 | 版本:2023-09-04

指导练习的答案

在抢占式多任务系统中,当一个低优先级进程占用处理器而一个高优先级进程排队等待执行时,会发生什么?

低优先级进程暂停,而高优先级进程则被执行。

2. 考虑以下顶部屏幕:top - 08:43:14 已运行 23 天,12:29,5 个用户,平均负载:0.13,0.18,0.21

任务:总计 240,正在运行 2,休眠 238,停止 0,僵尸 0 %Cpu(s):1.4 us,0.4 sy,0.0 ni,98.1 id,0.0 wa,0.0 hi,0.0 si,0.0 st MiB 内存:7726.4 总计,590.9 空闲,1600.8 使用,5534.7 缓冲/缓存 MiB 交换:30517.0 总计,30462.5 空闲,54.5 使用。5769.4 可用内存

PID 用户 PR NI 虚拟内存 物理内存 共享内存 S %CPU %MEM 时间+ 命令

1 root 20 0 171420 10668 7612 S 0,0 0,1 9:59.15 systemd

2 root 20 0 0 0 0 S 0,0 0,0 0:02.76 kthreadd

3 根 0 -20 0 0 0 我 0,0 0,0 0:00.00 rcu_gp

4 根 0 -20 0 0 0 I 0,0 0,0 0:00.00 rcu_par_gp

8 根 0 -20 0 0 0 I 0,0 0,0 0:00.00 mm_percpu_wq

9 root 20 0 0 0 0 S 0,0 0,0 0:49.06 ksoftirqd/0

10 根 20 0 0 0 0 我 0,0 0,0 18:24.20 rcu_sched

11 root 20 0 0 0 0 I 0,0 0,0 0:00.00 rcu_bh

12 root rt 0 0 0 0 S 0,0 0,0 0:08.17 migration/0

14 root 20 0 0 0 0 S 0,0 0,0 0:00.00 cpuhp/0

15 根 20 0 0 0 0 S 0,0 0,0 0:00.00 cpuhp/1

16 root rt 0 0 0 0 S 0,0 0,0 0:11.79 migration/1

17 root 20 0 0 0 0 S 0,0 0,0 0:26.01 ksoftirqd/1

哪些进程 ID 具有实时优先级?

PIDs 12 和 16。

3. 考虑以下 ps -el 列表: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 1 0 0 80 0 - 42855 - ? 00:09:59 systemd

1 S 0 2 0 0 80 0 - 0 - ? 00:00:02 kthreadd

1 我 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp

1 S 0 9 2 0 80 0 - 0 - ? 00:00:49 ksoftirqd/0

1 我 0 10 2 0 80 0 - 0 - ? 00:18:26 rcu_sched

LPIC-1 (101) (版本 5.0) | 103.6 修改进程执行优先级

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 357

探索性练习的答案

考虑您在 /dev/sda1 上有一个 ext4 文件系统,具有以下参数:

使用 tune2fs:

挂载计数:8 最大挂载计数:-1

在下次启动时,如果发出命令 tune2fs -c 9 /dev/sda1,会发生什么?

该命令将文件系统的最大挂载次数设置为 9。由于当前挂载次数为 8,下次系统启动将导致文件系统检查。

2. 考虑以下 du -h 的输出: $ du -h

216K ./somedir/anotherdir 224K ./somedir 232K .

当前目录中的文件占用了多少空间?我们如何重写命令以更清晰地显示此信息?

在使用的 232K 总量中,224K 被子目录 somedir 及其子目录使用。因此,排除这些后,当前目录中的文件占用了 8K。使用-S 参数可以更清楚地显示此信息,它将按目录分开计数。

3. 如果发出以下命令,ext2 文件系统 /dev/sdb1 会发生什么? # tune2fs -j /dev/sdb1 -J device=/dev/sdc1 -i 30d

将会在 /dev/sdb1 添加一个日志,将其转换为 ext3。日志将存储在设备 /dev/sdc1 上,文件系统将每 30 天检查一次。

4. 我们如何检查位于 /dev/sda1 上的 XFS 文件系统(其日志部分位于 /dev/sdc1)上的错误,而不实际进行任何修复?

使用 xfs_repair,后接 -l /dev/sdc1 以指示包含日志部分的设备,并使用 -n 以避免进行任何更改。

LPIC-1 (101) (版本 5.0) | 104.2 维护文件系统的完整性

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 459

# xfs_repair -l /dev/sdc1 -n

5. df 的-T 和-t 参数有什么区别?参数-T 将在 df 的输出中包含每个文件系统的类型。-t 是一个过滤器,只会在输出中显示给定类型的文件系统,排除所有其他类型。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

460 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

104.3 控制文件系统的挂载和卸载

参考 LPI 目标

LPIC-1 版本 5.0,考试 101,目标 104.3

重量

3

关键知识领域

• 手动挂载和卸载文件系统。

• 在启动时配置文件系统挂载。

• 配置用户可挂载的可移动文件系统。

• 使用标签和 UUID 来识别和挂载文件系统。

• 对 systemd 挂载单元的认识。

使用的文件、术语和工具的部分列表

/等/fstab

/媒体/

挂载

卸载

blkid

lsblk

LPIC-1 (101) (版本 5.0) | 104.3 控制文件系统的挂载和卸载

版本:2023-09-04 | 根据 CC BY-NC-ND 4.0 许可。 | learning.lpi.org | 461

104.3 课程 1

证书:LPIC-1

版本:5.0

主题:104 设备,Linux 文件系统,文件系统

层级标准

目标:104.3 控制挂载和卸载

文件系统

课程:1 / 1

介绍

直到现在,你已经学习了如何对磁盘进行分区以及如何在其上创建和维护文件系统。然而,在 Linux 上访问文件系统之前,它需要被挂载。

这意味着将文件系统附加到系统目录树中的特定点,称为挂载点。文件系统可以手动或自动挂载,并且有许多方法可以做到这一点。我们将在本课中学习其中的一些。

挂载和卸载文件系统

手动挂载文件系统的命令称为 mount,其语法为:

挂载 -t 类型 设备 挂载点

在哪里:

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

462 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

TYPE

挂载的文件系统类型(例如:ext4、btrfs、exfat 等)。

设备

包含文件系统的分区名称(例如 /dev/sdb1)

挂载点

文件系统将被挂载的位置。挂载目录不必为空,但必须存在。然而,在挂载文件系统期间,目录中的任何文件都将无法通过名称访问。

例如,要将位于 /dev/sdb1 的 exFAT 文件系统的 USB 闪存驱动器挂载到您主目录下名为 flash 的目录,可以使用:

# mount -t exfat /dev/sdb1 ~/flash/

TIP

许多 Linux 系统使用 Bash shell,在这些系统中,挂载点路径上的波浪号~是当前用户主目录的简写。例如,如果当前用户名为 john,它将被替换为/home/john。

挂载后,文件系统的内容将可以在 ~/flash 目录下访问:

$ ls -lh ~/flash/

总计 469M -rwxrwxrwx 1 root root 454M 7 月 19 09:49 lineage-16.0-20190711-MOD-quark.zip -rwxrwxrwx 1 root root 16M 7 月 19 09:44 twrp-3.2.3-mod_4-quark.img

列出已挂载的文件系统

如果您只输入 mount,您将获得当前在系统上挂载的所有文件系统的列表。此列表可能相当庞大,因为除了附加到系统的磁盘外,它还包含一些在内存中运行的文件系统,这些文件系统用于各种目的。要过滤输出,您可以使用 -t 参数仅列出相应类型的文件系统,如下所示:

# mount -t ext4

/ dev / sda1 在 / 上,类型 ext4 (rw,noatime,errors=remount-ro)

您可以通过用逗号分隔来一次指定多个文件系统:

LPIC-1 (101) (版本 5.0) | 104.3 控制文件系统的挂载和卸载

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 463

探索性练习的答案

1. 考虑 /etc/fstab 中的以下条目:/dev/sdc1 /backup ext4 noatime,nouser,async。用户可以使用命令 mount /backup 挂载此文件系统吗?为什么?

不,参数 nouser 不允许普通用户挂载此文件系统。

2. 考虑一个挂载在 /mnt/server 的远程文件系统,由于网络连接丢失而变得无法访问。你如何强制卸载它,或者如果不可能的话,将其挂载为只读?

将 -f 和 -r 参数传递给卸载。命令为 umount -f -r /mnt/server。请记住,您可以将参数组合,因此 umount -fr /mnt/server 也可以工作。

3. 编写一个 /etc/fstab 条目,以在 /mnt/backup 上挂载标签为 Backup 的 btrfs 卷,使用默认选项,并且不允许从中执行二进制文件。

该行应为 LABEL=Backup /mnt/backup btrfs defaults,noexec

4. 考虑以下 systemd 挂载单元: [Unit]

描述=外部数据磁盘

[挂载] 什么=/dev/disk/by-uuid/56C11DCC5D2E1334 哪里=/mnt/external 类型=ntfs 选项=默认

[安装] WantedBy=multi-user.target

◦ 这个文件系统的等效 /etc/fstab 条目是什么?

条目为:UUID=56C11DCC5D2E1334 /mnt/external ntfs defaults

5. 上述单元的文件名应该是什么,以便可以被 systemd 使用?它应该放置在哪里?

LPIC-1 (101) (版本 5.0) | 104.3 控制文件系统的挂载和卸载

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 479

文件名必须与挂载点相同,因此 mnt-external.mount 应放置在 /etc/systemd/system 中。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

480 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

104.5 管理文件权限和所有权

参考 LPI 目标

LPIC-1 版本 5.0,考试 101,目标 104.5

重量

3

关键知识领域

• 管理常规文件、特殊文件和目录的访问权限。

• 使用访问模式,如 suid、sgid 和粘滞位来维护安全性。

• 知道如何更改文件创建掩码。

• 使用组字段授予组成员文件访问权限。

使用的文件、术语和工具的部分列表

chmod

umask

chown

chgrp

LPIC-1 (101) (版本 5.0) | 104.5 管理文件权限和所有权

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 481

104.5 课程 1

证书:LPIC-1

版本:5.0

主题:104 设备,Linux 文件系统,文件系统

层级标准

目标:104.5 管理文件权限和所有权

课程:1 / 1

介绍

作为一个多用户系统,Linux 需要某种方式来跟踪每个文件的所有者以及用户是否被允许对文件执行操作。这是为了确保希望保持文件内容机密的用户的隐私,同时通过使某些文件对多个用户可访问来确保协作。

这是通过三级权限系统完成的。磁盘上的每个文件都由一个用户和一个用户组拥有,并具有三组权限:一组是文件所有者的权限,一组是拥有该文件的组的权限,还有一组是其他所有人的权限。在本课中,您将学习如何查询文件的权限,这些权限的含义以及如何操作它们。

查询文件和目录的信息

命令 ls 用于获取任何目录内容的列表。在这种基本形式下,您得到的只是文件名:

$ ls

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

482 | learning.lpi.org | 依据 CC BY-NC-ND 4.0 许可协议。| 版本:2023-09-04

另一个目录 picture.jpg text.txt

但每个文件还有更多信息可供查看,包括其类型、大小、所有权等。要查看这些信息,您必须使用 -l 参数向 ls 请求“长格式”列表:

$ ls -l

总计 536 drwxrwxr-x 2 carol carol 4096 12 月 10 15:57 Another_Directory -rw------- 1 carol carol 539663 12 月 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 12 月 10 15:57 text.txt

输出上方的每一列都有其含义。让我们来看看与本课相关的列。

• 列表中的第一列显示文件类型和权限。例如,在 drwxrwxrx 上:

◦ 第一个字符 d 表示文件类型。

下三个字符 rwx 表示文件所有者的权限,也称为用户或 u。

接下来的三个字符,rwx,表示拥有该文件的组的权限,也称为 g。

最后三个字符 r-x 表示其他用户的权限,也称为其他人或 o。

TIP

也常听到其他权限集被称为世界权限,例如“世界上其他所有人都有这些权限”。

• 第三列和第四列显示所有权信息:分别是拥有该文件的用户和组。

第七列也是最后一列显示文件名。

第二列表示指向该文件的硬链接数量。第五列显示文件大小。第六列显示文件最后修改的日期和时间。但这些列与当前主题无关。

目录怎么样?

如果您尝试使用 ls -l 查询有关目录的信息,它将显示该目录内容的列表:

LPIC-1 (101) (版本 5.0) | 104.5 管理文件权限和所有权

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 483

探索性练习的答案

1. 在终端上尝试这个:使用命令 touch emptyfile 创建一个名为 emptyfile 的空文件。现在使用 chmod 000 emptyfile 将文件的权限“归零”。如果你只传递一个八进制值给 chmod,例如 chmod 4 emptyfile,改变 emptyfile 的权限会发生什么?如果你使用两个值,例如 chmod 44 emptyfile 呢?我们可以从 chmod 读取数值的方式中学到什么?

请记住,我们将 emptyfile 的权限“归零”。因此,它的初始状态将是:

---------- 1 carol carol 0 12 月 11 10:55 emptyfile

现在,让我们尝试第一个命令,chmod 4 emptyfile:

$ chmod 4 emptyfile $ ls -l emptyfile

-------r-- 1 carol carol 0 12 月 11 10:55 emptyfile

看到了吗?其他人的权限被更改了。如果我们尝试两个数字,比如在 chmod 44 emptyfile 中呢?

$ chmod 44 emptyfile $ ls -l emptyfile

----r--r-- 1 carol carol 0 12 月 11 10:55 emptyfile

现在,组和其他用户的权限受到了影响。由此我们可以得出结论,在八进制模式下,chmod 从最低有效位(其他用户)到最高有效位(用户)“反向”读取值。如果传递一个数字,则修改其他用户的权限。如果传递两个数字,则修改组和其他用户的权限;如果传递三个数字,则修改用户、组和其他用户的权限;如果传递四个数字,则修改用户、组、其他用户和特殊权限。

2. 考虑 Linux 系统上临时目录的权限,/tmp: $ ls -l /tmp

drwxrwxrwt 19 root root 16K 12 月 21 18:58 tmp

用户、组和其他人拥有完全权限。但是普通用户可以删除此目录中的任何文件吗?为什么会这样?

LPIC-1 (101) (版本 5.0) | 104.5 管理文件权限和所有权

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 505

/ tmp 是我们所称的可全局写入目录,这意味着任何用户都可以写入它。但我们不希望一个用户干扰其他用户创建的文件,因此设置了粘滞位(如其他用户的权限中所示的 t)。这意味着用户可以删除 /tmp 上的文件,但只能删除自己创建的文件。

3. 一个名为 test.sh 的文件具有以下权限:-rwsr-xr-x,意味着 SUID 位已设置。

现在,运行以下命令:

$ chmod u-x test.sh $ ls -l test.sh

-rwSr-xr-x 1 carol carol 33 12 月 11 10:36 test.sh

我们做了什么?大写的 S 代表什么?

我们为拥有该文件的用户移除了执行权限。s(或 t)在 ls -l 的输出中取代了 x,因此系统需要一种方法来显示用户是否具有执行权限。它通过改变特殊字符的大小写来实现这一点。

第一个权限组中的小写字母 s 表示拥有该文件的用户具有执行权限,并且设置了 SUID 位。大写字母 S 表示拥有该文件的用户缺乏 (-) 执行权限,并且设置了 SUID 位。

对于 SGID 也是如此,第二组权限中的小写 s 表示拥有该文件的组具有执行权限,并且 SGID 位已设置。大写 S 表示拥有该文件的组缺少 (-) 执行权限,并且 SGID 位已设置。

这对于粘滞位也是如此,粘滞位在权限的第三组中用 t 表示。小写 t 表示粘滞位已设置,并且其他用户具有执行权限。大写 T 表示粘滞位已设置,并且其他用户没有执行权限。

4. 如何创建一个名为 Box 的目录,使所有文件自动归用户组所有,并且只能由创建它们的用户删除?

这是一个多步骤的过程。第一步是创建目录:

$ mkdir Box

我们希望在此目录中创建的每个文件都自动分配给用户组。我们可以通过将该组设置为目录的所有者,然后在其上设置 SGID 位来实现这一点。我们还需要确保该组的任何成员都可以写入该目录。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

506 | learning.lpi.org | 按照 CC BY-NC-ND 4.0 许可。| 版本:2023-09-04

目录。

由于我们不关心其他权限是什么,并且只想“翻转”特殊位,因此使用符号模式是有意义的:

$ chown :users Box/ $ chmod g+wxs Box/

请注意,如果您当前的用户不属于用户组,则必须在上述命令前使用命令 sudo 以 root 身份进行更改。

现在最后一部分,确保只有创建文件的用户可以删除它。这是通过在目录上设置粘滞位(用 t 表示)来完成的。请记住,它是在其他用户(o)的权限上设置的。

$ chmod o+t Box/

目录 Box 的权限应如下所示:

drwxrwsr-t 2 carol users 4,0K 1 月 18 19:09 Box

当然,您可以仅使用一个 chmod 命令来指定 SGID 和粘滞位:

$ chmod g+wxs,o+t Box/

额外加分,如果你想到了这一点。

LPIC-1 (101) (版本 5.0) | 104.5 管理文件权限和所有权

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 507

104.6 创建和更改硬链接和符号链接

参考 LPI 目标

LPIC-1 版本 5.0,考试 101,目标 104.6

重量

2

关键知识领域

• 创建链接。

• 识别硬链接和/或软链接。

• 复制与链接文件。

• 使用链接来支持系统管理任务。

使用的文件、术语和工具的部分列表

ln

ls

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

508 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

104.6 课程 1

证书:LPIC-1

版本:5.0

主题:104 设备,Linux 文件系统,文件系统

层级标准

目标:104.6 创建和更改硬链接和符号链接

链接

课程:1 / 1

介绍

在 Linux 中,一些文件会因为存储位置(例如临时文件)或与文件系统的交互方式(如链接)而受到特殊处理。在本课中,您将学习什么是链接以及如何管理它们。

理解链接

正如前面提到的,在 Linux 上,一切都被视为文件。但有一种特殊类型的文件,称为链接,Linux 系统上有两种类型的链接:

符号链接

也称为软链接,它们指向另一个文件的路径。如果您删除链接指向的文件(称为目标),链接仍然存在,但它“停止工作”,因为它现在指向“无”。

硬链接

将硬链接视为原始文件的第二个名称。它们不是重复的,而是

LPIC-1 (101) (版本 5.0) | 104.6 创建和更改硬链接和符号链接

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 509

您然后在 somedir 中创建一个名为 partners.txt 的链接,指向此文件,使用以下命令:

$ cd somedir/ $ ln -s clients.txt partners.txt

所以,目录结构是:

文档 |-- clients.txt `-- somedir

|-- clients.txt `-- partners.txt -> clients.txt

现在,将 partners.txt 从 somedir 移动到 ~/Documents,并列出其内容。

$ cd ~/Documents/ $ mv somedir/partners.txt .

$ less partners.txt

链接还会有效吗?如果会,哪个文件的内容会被列出?为什么?

这是一个“棘手”的问题,但链接会有效,列出的文件将是位于 ~/Documents 中的文件,包含名称 John、Michael、Bob。

请记住,由于您在创建软链接 partners.txt 时没有指定目标 clients.txt 的完整路径,因此目标位置将被解释为相对于链接的位置,在这种情况下是当前目录。

当链接从 ~/Documents/somedir 移动到 ~/Documents 时,它应该停止工作,因为目标不再与链接在同一目录中。然而,恰好在 ~/Documents 中有一个名为 clients.txt 的文件,因此链接将指向这个文件,而不是 ~/somedir 中的原始目标。

为了避免这种情况,在创建符号链接时始终指定目标的完整路径。

5. 考虑以下文件:-rw-r--r-- 1 carol carol 19 6 月 24 11:12 clients.txt

lrwxrwxrwx 1 carol carol 11 6 月 24 11:13 partners.txt -> clients.txt

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

522 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

合作伙伴.txt 的访问权限是什么?为什么?

partners.txt 的访问权限为 rw-r—r--,因为链接总是继承与目标相同的访问权限。

LPIC-1 (101) (版本 5.0) | 104.6 创建和更改硬链接和符号链接

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 523

104.7 查找系统文件并将文件放置在正确的位置

参考 LPI 目标

LPIC-1 版本 5.0,考试 101,目标 104.7

重量

2

关键知识领域

• 理解 FHS 下文件的正确位置。

• 在 Linux 系统上查找文件和命令。

• 了解 FHS 中定义的重要文件和目录的位置及其目的。

使用的文件、术语和工具的部分列表

find

定位

更新数据库

在哪里

哪个

type

/ etc/updatedb.conf

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

524 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

104.7 课程 1

证书:LPIC-1

版本:5.0

主题:104 设备,Linux 文件系统,文件系统

层级标准

目标:104.7 查找系统文件并放置文件在

正确的位置

课程:1 / 1

介绍

Linux 发行版有各种形状和大小,但几乎所有发行版都有一个共同点,即它们遵循文件系统层次标准 (FHS),该标准定义了文件系统的“标准布局”,使得互操作性和系统管理变得更加容易。在本课中,您将了解更多关于该标准的信息,以及如何在 Linux 系统上查找文件。

文件系统层次标准

文件系统层次标准(FHS)是 Linux 基金会为标准化 Linux 系统上的目录结构和目录内容而进行的努力。遵守该标准并不是强制性的,但大多数发行版都遵循它。

NOTE

有兴趣了解文件系统组织细节的人可以阅读 FHS 3.0 规范,该规范以多种格式提供,网址为:http://refspecs.linuxfoundation.org/ fhs.shtml

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 525

根据标准,基本目录结构如下:

/

这是根目录,层次结构中的最上层目录。其他所有目录都位于其中。文件系统通常被比作一棵“树”,因此这将是所有分支连接的“树干”。

/bin

必要的二进制文件,所有用户均可使用。

/boot

启动过程所需的文件,包括初始 RAM 磁盘(initrd)和 Linux 内核本身。

/dev

设备文件。这些可以是连接到系统的物理设备(例如,/dev/sda 将是第一个 SCSI 或 SATA 磁盘)或由内核提供的虚拟设备。

/etc

主机特定配置文件。程序可以在 /etc 下创建子目录以存储多个配置文件(如果需要)。

/家

系统中的每个用户都有一个“主”目录来存储个人文件和偏好,大多数位于 /home 下。通常,主目录与用户名相同,因此用户 John 的目录位于 /home/john 下。例外是超级用户(root),它有一个单独的目录 (/root) 和一些系统用户。

/lib

启动操作系统和运行/bin 和/sbin 下的二进制文件所需的共享库。

/媒体

用户可挂载的可移动媒体,如闪存驱动器、CD 和 DVD-ROM 读取器、软盘、存储卡和外部磁盘,挂载在这里。

/mnt

临时挂载文件系统的挂载点。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

526 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

/opt

应用软件包。

/根

超级用户(root)的主目录。

/run

运行时变量数据。

/ sbin

系统二进制文件。

/srv

系统提供的数据。例如,web 服务器提供的页面可以存储在 /srv/www 目录下。

/tmp

临时文件。

/usr

只读用户数据,包括某些辅助工具和应用程序所需的数据。

/ proc

虚拟文件系统,包含与正在运行的进程相关的数据。

/var

在系统运行期间写入的变量数据,包括打印队列、日志数据、邮箱、临时文件、浏览器缓存等。

请记住,其中一些目录,如 /etc、/usr 和 /var,包含其下的整个子目录层次结构。

临时文件

临时文件是程序用来存储仅在短时间内需要的数据的文件。这可以是正在运行的进程的数据、崩溃日志、自动保存的临时文件、文件转换过程中使用的中间文件、缓存文件等。

临时文件的位置

文件系统层次标准(FHS)第 3.0 版定义了临时文件的标准位置。

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0。 | learning.lpi.org | 527

在 Linux 系统上的文件。每个位置都有不同的目的和行为,建议开发人员在将临时数据写入磁盘时遵循 FHS 设定的约定。

/tmp

根据 FHS,程序不应假设在此处写入的文件将在程序调用之间保留。建议在系统启动时清空此目录(删除所有文件),尽管这不是强制性的。

/var/tmp

另一个临时文件的位置,但这个位置在系统启动时不应被清除。存储在这里的文件通常会在重启之间保持。

/run

该目录包含运行进程使用的运行时变量数据,例如进程标识符文件(.pid)。需要多个运行时文件的程序可以在此创建子目录。此位置必须在系统启动时清除。该目录的目的曾由 /var/run 提供,在某些系统上,/var/run 可能是指向 /run 的符号链接。

请注意,没有任何东西可以阻止程序在系统的其他地方创建临时文件,但遵循 FHS 设定的约定是良好的实践。

查找文件

在 Linux 系统上搜索文件时,可以使用 find 命令。这是一个非常强大的工具,拥有众多参数,可以根据您的需求调整其行为和修改输出。

要开始,find 需要两个参数:起始点和要查找的内容。例如,要搜索当前目录(及子目录)中所有名称以 .jpg 结尾的文件,可以使用:

$ find . -name '*.jpg'

./pixel_3a_seethrough_1.jpg ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

528 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

这将匹配任何文件,其名称的最后四个字符是.jpg,无论前面是什么,因为*是“任何事物”的通配符。但是,看看如果在模式的末尾添加另一个*会发生什么:

$ find . -name '*.jpg*'

./pixel_3a_seethrough_1.jpg

./Pentaro.jpg.zip

./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg

文件 Pentaro.jpg.zip(如上所示)未包含在之前的列表中,因为即使它的名称中包含 .jpg,但由于后面有额外的字符,它并不符合模式。新的模式意味着“任何 .jpg 任何”,因此它匹配。

TIP

请记住,-name 参数是区分大小写的。如果您希望进行不区分大小写的搜索,请使用 -iname。

*.jpg 表达式必须放在单引号内,以避免 shell 解释模式本身。尝试不加引号,看看会发生什么。

默认情况下,find 将从起始点开始,并遍历找到的任何子目录(以及这些子目录的子目录)。您可以使用 -maxdepth N 参数限制此行为,其中 N 是最大级别数。

要仅搜索当前目录,您可以使用 -maxdepth 1。假设您有以下目录结构:

目录 ├── clients.txt ├── partners.txt -> clients.txt └── somedir

├── anotherdir └── clients.txt

要在 somedir 中搜索,您需要使用 -maxdepth 2(当前目录 +1 级)。要在 anotherdir 中搜索,则需要 -maxdepth 3(当前目录 +2 级)。

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 529

参数 -mindepth N 以相反的方式工作,仅在至少 N 层级的目录中进行搜索。

-mount 参数可用于避免 find 命令进入已挂载的文件系统。您还可以使用 -fstype 参数将搜索限制为特定的文件系统类型。因此,find /mnt -fstype exfat -iname "*report*" 仅会在挂载在 /mnt 下的 exFAT 文件系统中进行搜索。

搜索属性

您可以使用以下参数搜索具有特定属性的文件,例如可由您的用户写入、具有特定权限集或具有特定大小的文件:

-用户 用户名

匹配由用户 USERNAME 拥有的文件。

-group 组名

匹配由组 GROUPNAME 拥有的文件。

-可读的

匹配当前用户可读的文件。

-writable

匹配当前用户可写的文件。

-可执行的

匹配当前用户可执行的文件。在目录的情况下,这将匹配用户可以进入的任何目录(x 权限)。

-perm NNNN

这将匹配具有完全 NNNN 权限的任何文件。例如,-perm 0664 将匹配用户和组可以读写的文件,以及其他用户可以读取的文件(或 rw-rw-r--)。

您可以在 NNNN 之前添加一个-来检查至少具有指定权限的文件。例如,-perm -644 将匹配至少具有 644(rw-r—r--)权限的文件。这包括具有 664(rw-rw-r--)甚至 775(rwxrwx-r-x)权限的文件。

-空

将匹配空文件和目录。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

530 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

上述结果包括二进制文件 (/usr/bin/locate) 和压缩的手册页 (/usr/share/man/man1/locate.1.gz)。

您可以使用命令行开关快速过滤结果,例如 -b,这将仅限于二进制文件,-m,这将仅限于手册页,或 -s,这将仅限于源代码。重复上述示例,您将得到:

$ whereis -b locate

定位:/usr/bin/locate

$ whereis -m locate

定位:/usr/share/man/man1/locate.1.gz

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

536 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

指导练习

1. 想象一个程序需要创建一个一次性临时文件,该文件在程序关闭后将不再需要。创建此文件的正确目录是什么?

2. 在启动过程中必须清除的临时目录是什么?

3. 使用 find,仅在当前目录中搜索用户可写、在过去 10 天内被修改且大于 4 GiB 的文件。

4. 使用 locate,查找任何文件名中同时包含模式 report 和 updated、update 或 updating 的文件。

5. 如何找到 ifconfig 的手册页存储在哪里?

6. 要使 updatedb 忽略 ntfs 文件系统,需要在 /etc/updatedb.conf 中添加哪个变量?

7. 系统管理员希望挂载一个内部磁盘 (/dev/sdc1)。根据 FHS,该磁盘应挂载在哪个目录下?

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 537

探索性练习

1. 当使用 locate 时,结果是从由 updatedb 生成的数据库中提取的。然而,这个数据库可能已经过时,导致 locate 显示不再存在的文件。如何使 locate 仅在其输出中显示现有文件?

在当前目录或子目录中查找任何文件,深度最多为 2 级,排除挂载的文件系统,文件名中包含模式 Status 或 statute。

3. 将搜索限制为 ext4 文件系统,查找 /mnt 下任何具有至少对组的执行权限、对当前用户可读并且在过去 2 小时内有任何属性更改的文件。

4. 查找在当前目录下创建超过 30 天的空文件,并且至少在两个层级以下

5. 考虑用户 carol 和 john 是组 mkt 的一部分。在 john 的主目录中查找任何 carol 也可以读取的文件。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

538 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0。 | 版本:2023-09-04

摘要

在本课中,您了解了根据 FHS 在 Linux 机器上文件系统的基本组织,以及如何通过名称或属性查找二进制文件和文件。本课讨论了以下命令:

find

一种多功能命令,用于根据各种搜索条件查找文件和文件夹。

定位

一个使用本地数据库的工具,该数据库包含本地存储文件的位置。

更新数据库

更新 locate 命令使用的本地数据库。

哪个

显示可执行文件的完整路径。

在哪里

显示系统上手册页、二进制文件和源代码的位置。

type

显示二进制文件的位置及其应用程序类型(例如已安装的程序、内置的 Bash 程序等)。

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 539

指导练习的答案

1. 想象一个程序需要创建一个一次性临时文件,该文件在程序关闭后将不再需要。创建此文件的正确目录是什么?

由于我们在程序运行结束后不关心该文件,正确的目录是 /tmp。

2. 在启动过程中必须清除的临时目录是什么?该目录是 /run 或在某些系统上是 /var/run。

3. 使用 find,仅在当前目录中搜索用户可写、在过去 10 天内被修改且大于 4 GiB 的文件。

对于此,您将需要 -writable、-mtime 和 -size 参数:

find . -可写 -mtime -10 -size +4G

4. 使用 locate,查找任何文件名中同时包含模式 report 和 updated、update 或 updating 的文件。

由于 locate 需要匹配所有模式,请使用 -A 选项:

定位 -A "报告" "更新"

5. 如何找到 ifconfig 的手册页存储在哪里?使用 whereis 的 -m 参数:

whereis -m ifconfig

6. 要使 updatedb 忽略 ntfs 文件系统,需要在 /etc/updatedb.conf 中添加哪个变量?

变量为 PRUNEFS=,后面跟着文件系统类型:PRUNEFS=ntfs

7. 系统管理员希望挂载一个内部磁盘 (/dev/sdc1)。根据 FHS,该磁盘应挂载在哪个目录下?

在实践中,磁盘可以挂载在任何地方。然而,FHS 推荐将临时

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

540 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

挂载应在 /mnt 下完成

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 541

探索性练习的答案

1. 当使用 locate 时,结果是从由 updatedb 生成的数据库中提取的。然而,这个数据库可能已经过时,导致 locate 显示不再存在的文件。如何使 locate 仅在其输出中显示现有文件?

将 -e 参数添加到 locate,如 locate -e PATTERN。

在当前目录或子目录中查找任何文件,深度最多为 2 级,排除挂载的文件系统,文件名中包含模式 Status 或 statute。

请记住,对于 -maxdepth,您还必须考虑当前目录,因此我们希望有三个级别(当前目录加上 2 个级别)

find . -maxdepth 3 -mount -iname "*statu*"

3. 将搜索限制为 ext4 文件系统,查找 /mnt 下任何具有至少对组的执行权限、对当前用户可读并且在过去 2 小时内有任何属性更改的文件。

使用 mount 的 -fstype 参数将搜索限制为特定的文件系统类型。当前用户可读的文件在权限的第一位至少为 4,而组可执行的文件在第二位至少为 1。由于我们不关心其他用户的权限,因此可以将第三位设置为 0。使用 -cmin N 来过滤最近的属性更改,记住 N 是以分钟为单位指定的。因此:

查找 /mnt -fstype ext4 -perm -410 -cmin -120

4. 查找在当前目录下至少两级且修改时间超过 30 天的空文件

参数 -mindepth N 可用于将搜索限制为至少 N 级,但请记住,您必须将当前目录计入总数。使用 -empty 检查空文件,使用 -mtime N 检查修改时间。因此:

find . -empty -mtime +30 -mindepth 3

5. 考虑用户 carol 和 john 是组 mkt 的一部分。在 john 的主目录中查找任何 carol 也可以读取的文件。

LPIC-1 (101) (版本 5.0) | 主题 104:设备、Linux 文件系统、文件系统层次标准

542 | learning.lpi.org | 许可协议:CC BY-NC-ND 4.0 | 版本:2023-09-04

考虑到他们是同一组的成员,我们需要至少在组权限上有 r (4),而其他的我们不在乎。所以:

查找 /home/john -perm -040

LPIC-1 (101) (版本 5.0) | 104.7 查找系统文件并将文件放置在正确的位置

版本:2023-09-04 | 许可协议:CC BY-NC-ND 4.0 | learning.lpi.org | 543

文件名:

-

文件大小:

-

标题:

-

作者:

-

主题:

-

关键词:

-

创建日期:

-

修改日期:

-

创建者:

-

PDF 生成器:

-

PDF 版本:

-

页数:

-

页面大小:

-

快速 Web 视图:

-

正在准备打印文档…
0%