创建 dev-lab
本节目标
在你明确选择的位置创建一个新的 dev-lab,并用只读 checker 确认目录结构;不触碰真实项目或系统配置。
开始前状态
先在终端进入你专门为学习准备的父目录。目标 dev-lab 必须不存在;若它已存在,本节停止并要求你先检查其中内容。
必要原理
dev-lab 是贯穿课程的隔离练习目录。只有明确不存在的目标才能由本节创建,这样不会覆盖已有资料。目录存在时不覆盖、不递归删除,也不猜测其中内容是否安全。
动手完成
运行位置: 你明确选择的学习目录的父目录。预期输出: 目标不存在时创建可通过 starter checker 的根 README 与五个子目录 README;目标已存在时显示检查提示。失败处理: 看到“目标已存在”后停止,使用 pwd 和 find 只读检查,而不是覆盖或删除。
target="$PWD/dev-lab"
if [[ -e "$target" ]]; then
printf '目标已存在,请先检查:%s\n' "$target"
else
mkdir -p "$target"/{config,data,notes,output,scripts}
printf '%s\n' \
'# dev-lab' \
'' \
'这是 Sonnet Pages“开发环境”模块使用的安全练习目录。' \
'' \
'## 当前状态' \
'' \
'- 已进入统一的 Linux/Unix 命令行主线;' \
'- 已创建练习目录和说明文件;' \
'- 尚未初始化 Git 仓库;' \
'- 尚未创建脚本、配置或样例数据。' \
'' \
'后续教程只在这个练习目录中执行示例操作,不使用读者的真实项目。' \
> "$target/README.md"
cat > "$target/config/README.md" <<'EOF'
# dev-lab 配置
这里将保存仅属于练习项目的配置示例。不要把真实账户、密钥或系统配置文件放入此目录。
EOF
cat > "$target/data/README.md" <<'EOF'
# dev-lab 数据
这里将保存后续练习使用的可公开、可重建的样例数据,不放个人数据或不可恢复的原始资料。
EOF
cat > "$target/notes/README.md" <<'EOF'
# dev-lab 笔记
这里记录命令观察、故障现象与练习结论,便于在后续教程中回看自己的学习证据。
EOF
cat > "$target/output/README.md" <<'EOF'
# dev-lab 输出
这里将保存由练习明确生成、可以安全重新创建的输出文件;不要把唯一副本当作练习输出。
EOF
cat > "$target/scripts/README.md" <<'EOF'
# dev-lab 脚本
这里将保存后续教程编写的小型练习脚本。执行前先阅读脚本内容,并只在 dev-lab 中运行。
EOF
fi
运行位置: 同一个父目录,且仅在刚才创建成功后。预期输出: 列出根目录与五个子目录。失败处理: 若结构不符,逐项检查路径拼写;不覆盖、不递归删除。
find ./dev-lab -maxdepth 1 -print | sort
下载本节 checker 后,按下面的 checkpoint 在包含脚本和 dev-lab 的父目录中运行。它只读取目标,不会改写练习目录。
观察结果
成功状态有一个根 README,以及 config、data、notes、output、scripts 五个带用途说明的目录。下一批教程会在这些明确位置添加练习文件,避免把操作扩散到真实项目。
常见问题
目标已经存在怎么办? 停止。先确认它是不是旧练习目录、是否有需要保留的资料;本节不提供覆盖或删除命令。
checker 失败怎么办? 读取错误中指出的路径或标题,人工比对后再修正。checker 不会创建日志、临时文件或目录。
完成检查
- 只在你指定且原本不存在的
dev-lab目标内创建了目录; - 没有覆盖已有文件,也没有进行递归删除;
- starter checker 成功时显示
starter checkpoint: ok。
下一步
按目录驱动导航进入终端与 Shell;后续教程会在此练习目录中逐步增加可验证状态。