理解六大内置工具,掌握 Claude Code 的真正威力
写在前面
说实话,上一篇我们认识了 Claude Code 的基本概念,装好了环境。
但你可能会疑惑:"Claude Code 到底能干什么?"
答案很简单:它手里有六把"钥匙"——六个内置工具。理解了这六个工具,你就理解了 Claude Code 的全部能力边界。
这篇文章,我们来逐一拆解这些工具,看看它们各自能干什么,以及一些你可能不知道的高级用法。
一、工具总览:Claude 的"工具箱"
先看一张图:
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code 工具箱 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Read │ │ Edit │ │ Write │ ← 文件操作 │
│ │ 读文件 │ │ 改文件 │ │ 写文件 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Bash │ │ Grep │ │ Glob │ ← 搜索/执行 │
│ │ 执行命令 │ │ 内容搜索 │ │ 文件搜索 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Task │ │ WebFetch │ ← 高级能力 │
│ │ 子代理 │ │ 网页获取 │ │
│ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
你不需要手动调用这些工具——告诉 Claude 你想干什么,它会自己选择合适的工具。
但理解它们的原理,能帮你写出更好的指令。
二、Read:读文件的"眼睛"
2.1 基本用法
Read 是最基础的工具,让 Claude 能看到你的代码。
你不需要说"用 Read 工具读取 xxx",只需要说:
> 看看 src/auth/login.ts 这个文件
Claude 会自动:
- 读取文件内容
- 理解代码结构
- 回答你的问题
2.2 智能读取:Claude 会自己找重点
大文件怎么办?
Claude 不会一次性读取整个文件,而是智能选择关键部分:
┌────────────────────────────────────────────────────────────┐
│ 大文件读取策略 │
├────────────────────────────────────────────────────────────┤
│ │
│ 文件大小 < 2000 行 │
│ └─→ 全部读取 │
│ │
│ 文件大小 > 2000 行 │
│ ├─→ 优先读取:导入语句、函数签名、类定义 │
│ ├─→ 按需读取:你问到的具体函数 │
│ └─→ 跳过:注释、空行、import 列表 │
│ │
└────────────────────────────────────────────────────────────┘
实战技巧:如果文件很大,指定你想看的部分:
> 看 src/huge-file.ts 的 handleRequest 函数
这样 Claude 会直接跳到那个函数,而不是从头开始读。
2.3 高级用法:指定行范围
你可以说得更精确:
> 读 src/main.ts 的 50-100 行
Claude 会只读取那个范围,节省 token。
三、Edit:改文件的"手术刀"
3.1 基本用法
Edit 用于修改现有文件,它是最常用的工具之一。
你只需要描述你想改什么:
> 把 src/auth/login.ts 的 login 函数改成支持 remember me 参数
Claude 会:
- 读取文件
- 找到 login 函数
- 精准修改
- 保持其他代码不变
3.2 Edit 的"精准"原则
Edit 工具不是简单的"全文替换",它是精准定位替换。
┌────────────────────────────────────────────────────────────┐
│ Edit 工作原理 │
├────────────────────────────────────────────────────────────┤
│ │
│ 1. Claude 找到要修改的代码片段(old_string) │
│ 2. 用新代码片段(new_string)替换它 │
│ 3. 如果 old_string 不唯一,Claude 会找更多上下文 │
│ │
│ 示例: │
│ ┌─────────────────────────────────────────────┐ │
│ │ old_string: │ │
│ │ function login(user, pwd) { │ │
│ │ return authenticate(user, pwd); │ │
│ │ } │ │
│ │ │ │
│ │ new_string: │ │
│ │ function login(user, pwd, remember) { │ │
│ │ return authenticate(user, pwd, │ │
│ │ remember); │ │
│ │ } │ │
│ └─────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────┘
这有什么好处?
- 不会误改同名函数
- 保持代码格式
- 只改需要改的部分
3.3 高级用法:批量修改
Claude 可以一次修改多处:
> 把项目中所有 console.log 改成 logger.debug
Claude 会:
- 用 Grep 搜索所有 console.log
- 逐个文件修改
- 确保不误改注释中的 console.log
四、Write:写文件的"笔"
4.1 基本用法
Write 用于创建新文件或完全覆盖现有文件。
典型用法:
> 创建一个 src/utils/date.ts,写一个日期格式化函数
Claude 会:
- 分析你的项目风格(TypeScript?JavaScript?)
- 创建符合风格的文件
- 写出可用的代码
4.2 Write vs Edit:什么时候用哪个?
┌────────────────────────────────────────────────────────────┐
│ Write vs Edit 选择指南 │
├────────────────────────────────────────────────────────────┤
│ │
│ 用 Write 当: │
│ ├─ 文件不存在,需要新建 │
│ ├─ 文件内容需要完全重写 │
│ └─ 创建配置文件、README 等 │
│ │
│ 用 Edit 当: │
│ ├─ 文件已存在,只需修改部分内容 │
│ ├─ 需要保持现有代码结构 │
│ └─ 修复 bug、添加功能 │
│ │
│ Claude 会自己判断用哪个,你不用担心 │
│ │
└────────────────────────────────────────────────────────────┘
4.3 安全机制:不会意外覆盖
Claude 在用 Write 覆盖现有文件前会先读取,确认文件内容后再覆盖。
这防止了:
- 意外覆盖重要文件
- 丢失未保存的工作
五、Bash:执行命令的"手"
5.1 基本用法
Bash 让 Claude 能在你的终端执行命令。
典型用法:
> 运行测试
> 安装依赖
> 启动开发服务器
Claude 会:
- 选择正确的命令(npm test?pytest?)
- 执行命令
- 分析输出
- 如果失败,尝试修复
5.2 安全边界
Claude 不会随意执行危险命令。
┌────────────────────────────────────────────────────────────┐
│ Bash 安全策略 │
├────────────────────────────────────────────────────────────┤
│ │
│ 默认需要确认的命令: │
│ ├─ rm -rf │
│ ├─ git push --force │
│ ├─ npm publish │
│ └─ 任何修改系统配置的命令 │
│ │
│ 永远不会执行的命令: │
│ ├─ 访问敏感文件(~/.ssh, ~/.gnupg) │
│ ├─ 修改系统设置 │
│ └─ 发送网络请求到未知地址 │
│ │
└────────────────────────────────────────────────────────────┘
5.3 高级用法:链式命令
Claude 可以执行复杂的命令链:
> 帮我清理 node_modules 重新安装,然后运行测试
Claude 会执行:
rm -rf node_modules
rm package-lock.json
npm install
npm test
5.4 实战技巧:让 Claude 帮你跑命令
有些命令太长记不住?让 Claude 帮你:
> 帮我查一下 git 怎么撤销最近一次 commit 但保留修改
Claude 不仅告诉你命令,还能帮你执行。
六、Grep:内容搜索的"放大镜"
6.1 基本用法
Grep 用于在文件内容中搜索。
你不需要说"用 Grep",只需要说:
> 找一下项目中哪里用到了 axios
Claude 会自动用 Grep 搜索,然后告诉你结果。
6.2 Grep 支持正则表达式
> 找一下所有的 TODO 或 FIXME 注释
Claude 会用正则 (TODO|FIXME) 搜索。
6.3 高级用法:过滤搜索
你可以指定搜索范围:
> 在 src/api 目录下找所有的 fetch 调用
Claude 会限定搜索范围,加快速度。
七、Glob:文件搜索的"探测器"
7.1 基本用法
Glob 用于按文件名模式搜索文件。
典型用法:
> 列出所有的 TypeScript 文件
> 找一下所有的测试文件
> 看看项目里有多少个组件
7.2 Glob 模式语法
┌────────────────────────────────────────────────────────────┐
│ Glob 模式速查 │
├────────────────────────────────────────────────────────────┤
│ │
│ 模式 匹配 │
│ ──────────────────────────────────────────── │
│ *.ts 所有 .ts 文件 │
│ **/*.ts 任意目录下的 .ts 文件 │
│ src/**/*.test.ts src 目录下的测试文件 │
│ *.{ts,tsx} .ts 或 .tsx 文件 │
│ src/**/ src 下的所有目录 │
│ │
└────────────────────────────────────────────────────────────┘
7.3 实战用法
快速了解项目结构:
> 用文件列表告诉我这个项目的结构
Claude 会用 Glob 列出关键文件,给你一个项目概览。
八、工具协作:真正的威力
单个工具固然有用,但真正的威力在于工具之间的协作。
8.1 典型协作模式
场景:重构一个函数
> 重构 src/utils/format.ts 的 formatDate 函数,让它更易读
Claude 的执行流程:
┌────────────────────────────────────────────────────────────┐
│ 工具协作流程 │
├────────────────────────────────────────────────────────────┤
│ │
│ 1. Read │
│ └─→ 读取 src/utils/format.ts │
│ │
│ 2. Grep │
│ └─→ 找到所有调用 formatDate 的地方 │
│ │
│ 3. Edit │
│ └─→ 重构 formatDate 函数 │
│ │
│ 4. Edit (多次) │
│ └─→ 更新所有调用处的参数(如果签名变了) │
│ │
│ 5. Bash │
│ └─→ 运行测试,确保没改坏 │
│ │
└────────────────────────────────────────────────────────────┘
一个指令,五个工具协作。这就是 Claude Code 的威力。
8.2 复杂协作示例
场景:添加一个新功能
> 添加一个用户头像上传功能,包括前端组件和后端 API
Claude 会:
- Glob - 找到现有的 API 和组件结构
- Read - 读取相关文件,理解项目风格
- Write - 创建新的 API 端点
- Write - 创建新的前端组件
- Edit - 在路由中注册新 API
- Edit - 在页面中引入新组件
- Bash - 运行类型检查和测试
一个指令,从零到完整功能。
九、高级技巧:让工具更好用
9.1 提供上下文
越具体的指令,效果越好:
# 不好的指令
> 改一下登录
# 好的指令
> 在 src/auth/login.ts 中,给 login 函数添加一个 rememberMe 参数,
默认为 false。记得更新类型定义和测试。
9.2 利用 CLAUDE.md
在项目根目录创建 CLAUDE.md,告诉 Claude 项目的特殊规则:
# 项目说明
## 命名规范
- 组件用 PascalCase
- 工具函数用 camelCase
## 禁止
- 不要修改 src/generated 目录
- 所有 API 调用必须经过 src/api/client.ts
这样 Claude 在使用工具时会遵守这些规则。
9.3 分步骤复杂任务
对于大型任务,可以分步骤:
> 第一步:分析 src/legacy 目录的代码结构
> (等 Claude 完成)
> 第二步:找出需要重构的函数
> (等 Claude 完成)
> 第三步:重构 formatDate 函数
这样你可以每一步确认,避免 Claude 走偏。
十、工具使用速查表
| 工具 | 用途 | 触发关键词 |
|---|---|---|
| Read | 读取文件 | "看看"、"读一下"、"这个文件" |
| Edit | 修改文件 | "改一下"、"修改"、"重构" |
| Write | 创建文件 | "创建"、"新建"、"写一个" |
| Bash | 执行命令 | "运行"、"安装"、"执行" |
| Grep | 内容搜索 | "找一下"、"搜索"、"哪里用到" |
| Glob | 文件搜索 | "列出"、"所有文件"、"项目结构" |
十、效果验证
学完本篇,你应该能够完成以下任务:
验证清单
- 用自然语言让 Claude 读取文件
- 用自然语言让 Claude 修改文件
- 用自然语言让 Claude 创建新文件
- 用自然语言让 Claude 执行命令
- 用自然语言让 Claude 搜索代码
动手练习(5分钟)
打开一个你的项目,依次测试以下指令:
测试 Read:
> 读取项目的 package.json,告诉我有哪些依赖
测试 Edit:
> 在 README.md 末尾添加一行:最后更新时间:[今天日期]
测试 Write:
> 创建一个 notes.txt 文件,写入「这是 Claude Code 创建的测试文件」
测试 Bash:
> 运行 git status,告诉我当前分支和文件状态
测试 Grep:
> 搜索项目中所有的 TODO 注释
测试 Glob:
> 列出项目中所有的 TypeScript 文件
综合测试
让 Claude 完成一个需要多个工具协作的任务:
> 分析 src 目录下最大的文件,告诉我它的行数和主要功能
这个任务需要 Claude:
- 用 Glob 找到所有文件
- 用 Bash 统计行数
- 用 Read 理解功能
如果 Claude 顺利完成,说明你已经理解了工具协作的原理。
十一、总结与下期预告
本文要点
- 六个工具,六个能力:读、改、写、执行、搜索内容、搜索文件
- 工具会自动协作:你只需要描述目标,Claude 自己决定用哪些工具
- 安全机制:危险操作需要确认,敏感文件禁止访问
- 上下文很重要:越具体的指令,效果越好
下期预告
下一篇,我们深入讲解 CLAUDE.md:
- 怎么写:从零开始配置项目上下文
- 最佳实践:让 Claude 真正理解你的项目
- 常见问题:为什么 Claude 总是不按我的规范来?
- 进阶技巧:用
.claude/rules/组织复杂规则
敬请期待!
附录:常见问题
Q1:Claude 读文件时会不会泄露我的代码?
不会。Claude 读取的文件只在当前会话中使用,不会被存储或用于其他目的。
Q2:Bash 执行命令会不会有安全隐患?
Claude Code 有多层安全机制:
- 敏感命令需要确认
- 敏感文件禁止访问
- 可以通过配置限制可执行的命令
Q3:文件太大怎么办?
Claude 会智能选择读取关键部分。你也可以:
- 指定读取的函数或类
- 指定行范围
- 让 Claude 先用 Grep 找到关键位置
Q4:工具执行失败怎么办?
Claude 会:
- 分析错误信息
- 尝试修复问题
- 如果无法修复,告诉你原因和建议
本篇属于 Claude Code 提效系列第 2 篇
下期预告:CLAUDE.md:让 Claude 懂你的项目
创建时间:2026-02-14
参考文档:Claude Code 中文文档
评论区