---
url: /courses/cloud-platform-build-management/lab-02/index.md
---
# 实训 02：完成第一次 Linux 服务器巡检

## 任务情境

你已经能够从 WSL 登录 ECS。现在，团队准备在这台服务器上安装第一个 Web 服务。安装之前，需要先确认目录、权限、软件包、进程、内存和磁盘状态，并留下可以复查的巡检记录。

本次实训不按“敲了多少命令”打分，看重的是证据完整、权限修改最小，以及能否解释巡检结果。

## 学习成果

完成后，你应该能：

* 用账号、主机和目录说明命令运行位置；
* 安全地创建、复制、移动和检查实验文件；
* 读懂所有者、所属组和其他人的基本权限；
* 不使用 `chmod 777` 完成一次最小权限修复；
* 查找自己的测试进程并安全停止；
* 使用 `free`、`df`、`du` 和进程列表判断资源状态；
* 编写并解释一份最小巡检脚本。

## 开始前

阅读[课程作业提交规范](./assignment-submission-policy.md)，新建：

```txt
班级_学号_姓名_第02次课_Linux服务器巡检.docx
```

解压配套包，填写其中的 `server-inspection-report-template.docx`。

### A 路径：ECS 已可用

所有命令在 `[ECS]` 执行，完成真实服务器巡检。

### B 路径：ECS 暂不可用

在 `[WSL]` 完成相同任务，在标题和每张截图中明确标注 WSL。服务器可用后，重新运行 `server-check.sh` 并补交 ECS 资源证据。

## 安全边界

* 所有练习只在 `~/cloud-course/lab-02` 中进行。
* 修改、删除或覆盖前先执行 `whoami`、`hostname` 和 `pwd`。
* 不修改 `/etc`、`/usr`、`/var` 中的系统文件。
* 不使用 `chmod -R 777`、`rm -rf` 或来源不明的安装脚本。
* 不停止不认识的系统进程。
* 截图隐藏用户名、主机名、公网地址和其他个人信息。

## 任务 1：路径、目录和文件站

确认位置并建立实验目录：

```bash
[ECS] whoami
[ECS] hostname
[ECS] mkdir -p ~/cloud-course/lab-02/evidence
[ECS] cd ~/cloud-course/lab-02
[ECS] pwd
```

创建并整理文件：

```bash
[ECS] touch notes.txt
[ECS] printf 'lesson-02 baseline\n' > notes.txt
[ECS] cp notes.txt evidence/notes-copy.txt
[ECS] mv evidence/notes-copy.txt evidence/baseline.txt
```

只读检查：

```bash
[ECS] ls -lah
[ECS] file notes.txt
[ECS] stat notes.txt
[ECS] find . -maxdepth 2 -type f -print
[ECS] du -sh .
```

检查点：

* `pwd` 指向自己的 `lab-02`；
* 能说明 `notes.txt` 和 `./notes.txt` 为什么都能指向当前目录中的文件；
* 能从 `stat` 找到所有者、权限和时间信息；
* `find` 的结果只位于实验目录。

写入 Word：

* 图 1“当前账号、主机与实验目录”；
* 图 2“实验文件结构与属性”；
* 每张图写明运行位置、关键输出和结论。

## 任务 2：权限错误定位与修复

在实验目录中创建脚本：

```bash
[ECS] nano permission-demo.sh
```

写入：

```bash
#!/usr/bin/env bash
printf 'permission demo passed\n'
```

保存后故意保留不可执行状态：

```bash
[ECS] chmod 640 permission-demo.sh
[ECS] ls -l permission-demo.sh
[ECS] ./permission-demo.sh
```

看到 `Permission denied` 后，不要使用 `chmod 777`。按顺序检查：

```bash
[ECS] id
[ECS] stat -c 'owner=%U group=%G mode=%A (%a)' permission-demo.sh
[ECS] chmod u+x permission-demo.sh
[ECS] ls -l permission-demo.sh
[ECS] ./permission-demo.sh
```

写入 Word：

```txt
现象：
执行者：
文件所有者：
修复前权限：
真正缺少的权限：
采取的最小修改：
修复后验证：
为什么不使用 chmod 777：
```

至少插入“修复前”和“修复后”两张可对比截图。

## 任务 3：确认软件包与测试进程

检查 `curl`：

```bash
[ECS] command -v curl
[ECS] dpkg -l | grep '^ii' | grep curl
[ECS] apt-cache policy curl
```

如教师允许，可以刷新软件包索引：

```bash
[ECS] sudo apt update
```

不要自行执行全系统升级，也不要安装与课程无关的软件。

启动并查找自己的测试进程：

```bash
[ECS] sleep 300 &
[ECS] demo_pid=$!
[ECS] ps -p "$demo_pid" -o pid,user,stat,etime,cmd
[ECS] kill "$demo_pid"
[ECS] ps -p "$demo_pid"
```

检查点：

* 能解释 PID、用户、状态和运行时间；
* `kill` 的目标是自己刚创建的 `sleep`；
* 停止后再次查询，确认它已经退出。

写入 Word：

* 图 3“curl 命令与软件包状态”；
* 图 4“测试进程启动、核对和停止”；
* 解释为什么不能看到一个 PID 就直接 `kill -9`。

## 任务 4：完成资源巡检

执行：

```bash
[ECS] uptime
[ECS] nproc
[ECS] free -h
[ECS] df -hT /
[ECS] lsblk -f
[ECS] du -xh --max-depth=1 "$HOME" 2>/dev/null | sort -h
[ECS] ps -eo pid,user,comm,%cpu,%mem --sort=-%mem | head
```

从输出中形成至少四条结论：

1. CPU 核数与当前负载是否匹配；
2. `available` 内存还有多少；
3. 根文件系统使用率是否需要关注；
4. 家目录中哪个一级目录占用较大；
5. 哪个进程当前内存占用较高。

别只写“正常”或“不正常”，要用输出里的字段或具体数值作依据。

写入 Word：

* 图 5“CPU 与内存证据”；
* 图 6“磁盘、目录占用和高资源进程”；
* 图下填写四条带依据的巡检结论。

## 任务 5：编写 `server-check.sh`

在 `~/cloud-course/lab-02` 中创建脚本：

```bash
[ECS] nano server-check.sh
```

脚本至少包含：

* 检查时间；
* 当前账号、主机和目录；
* 系统、CPU 核数和负载；
* 内存；
* 根文件系统；
* 家目录占用；
* 内存占用较高的前五个进程。

可以从本课正文的最小脚本开始，但必须逐行说明输出用途。

运行：

```bash
[ECS] bash -n server-check.sh
[ECS] ls -l server-check.sh
[ECS] chmod u+x server-check.sh
[ECS] ./server-check.sh | tee server-check.txt
```

和同桌互换脚本代码，不要给账号、地址和私密配置。运行对方脚本前先用 `bash -n` 检查并阅读代码，别直接运行来历不明的内容。

写入 Word：

* 粘贴完整脚本代码，使用等宽字体；
* 插入图 7“脚本语法、权限与运行结果”；
* 解释每个检查区块回答了什么问题；
* 记录同伴提出的一条改进建议。

## 任务 6：运行本地验收

把 `verify.sh` 放在实验目录中：

```bash
[ECS] bash verify.sh --role ecs
```

B 路径使用：

```bash
[WSL] bash verify.sh --role wsl
```

验收只检查命令、目录和脚本基本条件，不读取凭据，也不修改系统。出现 `[WARN]` 时，把提醒写进报告并说明下一步检查，不截掉失败部分。

## 挑战任务

完成标准任务后任选一项：

1. 给巡检脚本增加退出码，并说明什么情况下应该返回非零。
2. 使用 `find` 在自己的实验目录中查找超过 1 MiB 的文件，不扫描整个系统。
3. 比较文件的 `x` 权限与目录的 `x` 权限有什么不同。
4. 解释为什么 `df` 显示空间紧张，但 `du` 统计结果可能对不上。

## Word 提交清单

* 一个规范命名的 `.docx`；
* A/B 路径与命令运行位置；
* 路径、目录和文件证据；
* 权限修复前后对比与最小权限解释；
* 软件包与测试进程证据；
* CPU、内存、磁盘和高资源进程结论；
* `server-check.sh` 完整代码、运行结果和解释；
* 验收结果、未通过项和下一步；
* 本课复盘。

## 提交到智慧职教

1. 重新打开 Word，确认截图清楚、代码没有被截断。
2. 检查所有用户名、主机名和地址已经脱敏。
3. 上传到智慧职教在线平台“第02次课”对应作业收集。
4. 确认平台显示提交成功，并核对附件名称。

本课默认只提交一个 `.docx`。除非教师另行要求，不单独上传脚本、输出文件或实验目录。

## 验收标准

| 等级 | 标准 |
|---|---|
| 保底 | 能在 WSL 完成目录、权限、进程和资源检查，报告结构完整 |
| 标准 | 在 ECS 完成全部分站任务，脚本可运行，能解释至少四条巡检结论 |
| 挑战 | 脚本有合理扩展，能解释权限、退出码或 `df`/`du` 差异 |

无论哪个等级，都不能用 `chmod 777` 逃避权限分析，也不能漏掉截图说明和脱敏检查。
