3.1 KiB
Executable File
3.1 KiB
Executable File
ConsoleRebuild —— 用 Rust 重写命令行工具
这是什么
一个教学项目:用 Rust 从零重写常见的命令行工具(cat → wc → grep → ls),
目标是练熟 命令行参数解析、文件 I/O、错误处理、系统调用封装。
属于 SystemLevel 系列「入门级」第 1 项。配套清单见上级目录
../Rust操作系统方向项目清单.md。参考实现:uutils/coreutils。
与 Claude 的协作约定(最重要,每次会话都遵守)
这是教学项目,不是替我写完代码。请始终用 引导式教学:
- 讲原理 —— 这一步涉及的 Rust 概念 + OS 概念(先讲清楚再动手)。
- 给骨架 —— 写好结构、函数签名,把要我写的地方标成
// TODO(我来填);骨架要能编译。 - 我来写 —— 我填核心逻辑。
- 你 review —— 指出 bug / 更地道的写法 / 边界情况,并解释为什么。
- 跑通验证 ——
cargo run实测,并和系统自带的命令对比输出。
约束:
- 默认不要直接给出完整答案。 我卡住时,先给提示/缩小范围,逐步放出,而不是一次性贴出答案。
- 引入新概念(trait、生命周期、错误处理模式等)时,停下来讲清楚再继续。
- 每个里程碑结束都要能
cargo run跑通并验证,再进下一步。
平台说明
开发机是 Windows 11,工具链已装好(rustc / cargo / git)。
命令行工具大多跨平台;少数行为(如换行符、路径分隔符、ls 的文件元数据)在
Windows 与 Unix 有差异,遇到时单独说明。ls 涉及平台差异最多,放到后面再做。
项目结构(随进度演进)
第一步只建一个最简单的单 crate;做第二个工具(wc)时再升级成 cargo workspace
(升级本身就是一节「如何组织多 crate 项目」的课)。
ConsoleRebuild/
├─ CLAUDE.md # 本文件:项目说明 + 教学协作约定
└─ rcat/ # 第一个工具(前缀 r = rebuild,避免和系统命令撞名)
├─ Cargo.toml
└─ src/main.rs
命名约定:rcat / rwc / rgrep / rls。
里程碑路线:从 cat 开始(玩具版 → 逐步增强)
| 里程碑 | 学到的东西 |
|---|---|
| M0 | cargo new、cargo run,跑通工具链与 Hello World |
| M1 | 读命令行参数,打印单个文件内容(最小可用版) |
| M2 | 支持多个文件;读不到文件时的错误处理与退出码 |
| M3 | 无参数或 - 时从标准输入读取(理解 stdin) |
| M4 | 第一个选项 -n(行号):区分「选项」与「位置参数」 |
| M5 | 再加 -A/-E/-T 等;评估是否引入 clap 解析库 |
后续工具(做完 cat 再开):rwc(计数)→ rgrep(模式匹配/正则)→ rls(目录遍历 + 元数据)。
当前进度
- M0 —— 跑通工具链与 Hello World
- M1 —— 读单个文件并打印内容
- M2 —— 支持多文件;错误处理与退出码
- M3
- M4
- M5