aaihubhub
Claude Code 小白进阶课:从第一次对话到可靠协作 · 第 2 课 / 共 20 课 ↗ AI 教程

02|CLI 入门:启动、查询、恢复会话与选择模型

通过真实 CLI 命令掌握交互、打印、恢复、模型和配置选项。

kimi
LESSON BRIEFING02 / 20

通过真实 CLI 命令掌握交互、打印、恢复、模型和配置选项。

终端像一张写着当前房间地址的工作台。安装程序只是把一个新工具放进工具柜;真正危险的不是命令行本身,而是不知道自己在哪个目录、命令将碰哪些文件。

本课交付物

检查 Node 与 Git 版本,在临时练习目录安装并启动 Claude Code;记录 which、pwd、git status 的输出,确认工具位置、当前目录与仓库状态。


概览

Claude Code 的 CLI(命令行接口)是与 Claude Code 交互的主要方式。它提供了强大的参数和命令,用于执行查询、管理会话、配置模型,并把 Claude 集成进你的开发工作流。

架构

graph TD
    A["用户终端"] -->|"claude [options] [query]"| B["Claude Code CLI"]
    B -->|Interactive| C["REPL 模式"]
    B -->|"--print"| D["打印模式(SDK)"]
    B -->|"--resume"| E["恢复会话"]
    C -->|Conversation| F["Claude API"]
    D -->|Single Query| F
    E -->|Load Context| F
    F -->|Response| G["输出"]
    G -->|text/json/stream-json| H["终端 / 管道"]

CLI 命令

命令 说明 示例
claude 启动交互式 REPL claude
claude "query" 带初始提示启动 REPL claude "解释这个项目"
claude -p "query" 打印模式,查询后退出 claude -p "解释这个函数"
cat file | claude -p "query" 处理通过管道传入的内容 cat logs.txt | claude -p "解释这些日志"
claude -c 继续最近一次会话 claude -c
claude -c -p "query" 在打印模式下继续会话 claude -c -p "检查类型错误"
claude -r "<session>" "query" 通过 ID 或名称恢复会话 claude -r "auth-refactor" "完成这个 PR"
claude update 更新到最新版本 claude update
claude mcp 配置 MCP servers 见 MCP 文档
claude mcp serve 将 Claude Code 作为 MCP server 运行 claude mcp serve
claude agents 列出所有已配置的 subagents claude agents
claude auto-mode defaults 以 JSON 打印 auto mode 默认规则 claude auto-mode defaults
claude remote-control 启动远程控制服务 claude remote-control
claude plugin 管理插件(安装、启用、禁用) claude plugin install my-plugin
claude auth login 登录(支持 --email--sso claude auth login --email user@example.com
claude auth logout 注销当前账号 claude auth logout
claude auth status 检查登录状态(已登录返回 0,否则返回 1) claude auth status

核心标志

参数 说明 示例
-p, --print 不进入交互式模式,直接输出结果 claude -p "query"
-c, --continue 加载最近一次会话 claude --continue
-r, --resume 按 ID 或名称恢复指定会话 claude --resume auth-refactor
-v, --version 输出版本号 claude -v
-w, --worktree 在隔离的 git worktree 中启动 claude -w
-n, --name 设置会话显示名称 claude -n "auth-refactor"
--from-pr <number> 恢复与 GitHub PR 关联的会话 claude --from-pr 42
--remote "task" 在 claude.ai 上创建 web session claude --remote "implement API"
--remote-control, --rc 使用 Remote Control 进入交互式会话 claude --rc
--teleport 将 web session 恢复到本地 claude --teleport
--teammate-mode agent team 显示模式 claude --teammate-mode tmux
--bare 极简模式,跳过 hooks、skills、plugins、MCP、自动记忆和 CLAUDE.md claude --bare
--enable-auto-mode 解锁 auto permission mode claude --enable-auto-mode
--channels 订阅 MCP channel 插件 claude --channels discord,telegram
--chrome / --no-chrome 启用 / 禁用 Chrome 浏览器集成 claude --chrome
--effort 设置推理强度 claude --effort high
--init / --init-only 运行初始化 hooks claude --init
--maintenance 运行维护 hooks 后退出 claude --maintenance
--disable-slash-commands 禁用所有 skills 和 slash commands claude --disable-slash-commands
--no-session-persistence 禁用会话保存(打印模式) claude -p --no-session-persistence "query"

交互模式 vs 打印模式

graph LR
    A["claude"] -->|默认| B["交互式 REPL"]
    A -->|"-p 参数"| C["打印模式"]
    B -->|特性| D["多轮对话<br>Tab 补全<br>历史记录<br>Slash commands"]
    C -->|特性| E["单次查询<br>可脚本化<br>可管道化<br>JSON 输出"]

交互模式(默认):

# 启动交互式会话
claude

# 带初始提示启动
claude "解释这个认证流程"

打印模式(非交互式):

# 单次查询后退出
claude -p "这个函数做什么?"

# 处理文件内容
cat error.log | claude -p "解释这个错误"

# 与其他工具串联
claude -p "列出待办事项" | grep "URGENT"

模型与配置

参数 说明 示例
--model 设置模型(sonnet、opus、haiku,或完整模型名) claude --model opus
--fallback-model 当前模型负载过高时自动切换的后备模型 claude -p --fallback-model sonnet "query"
--agent 为当前会话指定 agent claude --agent my-custom-agent
--agents 通过 JSON 定义自定义 subagents Agents Configuration
--effort 设置推理级别(low、medium、high、max) claude --effort high

模型选择示例

# 复杂任务使用 Opus 4.6
claude --model opus "设计一个缓存策略"

# 快速任务使用 Haiku 4.5
claude --model haiku -p "格式化这个 JSON"

# 使用完整模型名
claude --model claude-sonnet-4-6-20250929 "审查这段代码"

# 带后备模型以提升稳定性
claude -p --model opus --fallback-model sonnet "分析架构"

# 使用 opusplan(Opus 负责规划,Sonnet 负责执行)
claude --model opusplan "设计并实现缓存层"

系统提示词自定义

参数 说明 示例
--system-prompt 替换整段默认系统提示词 claude --system-prompt "You are a Python expert"
--system-prompt-file 从文件加载提示词(仅打印模式) claude -p --system-prompt-file ./prompt.txt "query"
--append-system-prompt 在默认提示词后追加内容 claude --append-system-prompt "Always use TypeScript"

系统提示词示例

# 完整自定义人格
claude --system-prompt "你是一名资深安全工程师,重点关注漏洞。"

# 追加特定指令
claude --append-system-prompt "始终在代码示例中包含单元测试"

# 从文件加载复杂提示词
claude -p --system-prompt-file ./prompts/code-reviewer.txt "review main.py"

系统提示词参数对比

参数 行为 交互模式 打印模式
--system-prompt 替换整个默认系统提示词
--system-prompt-file 用文件中的提示词替换
--append-system-prompt 追加到默认系统提示词后

仅在打印模式中使用 --system-prompt-file。交互模式请使用 --system-prompt--append-system-prompt

工具与权限管理

参数 说明 示例
--tools 限制可用的内置工具 claude -p --tools "Bash,Edit,Read" "query"
--allowedTools 无需提示即可执行的工具 "Bash(git log:*)" "Read"
--disallowedTools 从上下文中移除的工具 "Bash(rm:*)" "Edit"
--dangerously-skip-permissions 跳过所有权限提示 claude --dangerously-skip-permissions
--permission-mode 以指定权限模式启动 claude --permission-mode auto
--permission-prompt-tool 用于权限处理的 MCP tool claude -p --permission-prompt-tool mcp_auth "query"
--enable-auto-mode 解锁 auto permission mode claude --enable-auto-mode

权限示例

# 代码审查只读模式
claude --permission-mode plan "审查这个代码库"

# 只允许安全工具
claude --tools "Read,Grep,Glob" -p "找出所有 TODO 注释"

# 允许特定 git 命令无需提示
claude --allowedTools "Bash(git status:*)" "Bash(git log:*)"

# 阻止危险操作
claude --disallowedTools "Bash(rm -rf:*)" "Bash(git push --force:*)"

输出与格式

参数 说明 选项 示例
--output-format 指定输出格式(打印模式) textjsonstream-json claude -p --output-format json "query"
--input-format 指定输入格式(打印模式) textstream-json claude -p --input-format stream-json
--verbose 启用详细日志 claude --verbose
--include-partial-messages 包含流式事件 需要 stream-json claude -p --output-format stream-json --include-partial-messages "query"
--json-schema 获取符合 schema 的 JSON 输出 claude -p --json-schema '{"type":"object"}' "query"
--max-budget-usd 打印模式最大花费 claude -p --max-budget-usd 5.00 "query"

输出格式示例

# 纯文本(默认)
claude -p "解释这段代码"

# 供程序使用的 JSON
claude -p --output-format json "列出 main.py 中的所有函数"

# 用于实时处理的流式 JSON
claude -p --output-format stream-json "生成一份长报告"

# 使用 schema 验证的结构化输出
claude -p --json-schema '{"type":"object","properties":{"bugs":{"type":"array"}}}' \
  "找出这段代码中的 bug,并以 JSON 返回"

工作区与目录

参数 说明 示例
--working-directory 设置工作目录 claude --working-directory /path/to/project
--add-dir 追加额外工作目录 claude --add-dir /path/to/other/project

多目录示例

# 在多个项目目录中协作
claude --working-directory ~/projects/app --add-dir ~/projects/shared

# 加载自定义设置
claude --working-directory ./backend --add-dir ./frontend

MCP 配置

参数 说明 示例
--mcp-config 从文件加载 MCP 配置 claude --mcp-config ./mcp.json
--mcp 启用 / 配置 MCP 服务 claude --mcp github
--mcp-list 列出可用 MCP 配置 claude --mcp-list

MCP 示例

# 加载 GitHub MCP server
claude --mcp-config ./configs/github-mcp.json

# 严格模式,只允许指定的 server
claude --mcp-config ./configs/strict-mcp.json --mcp github

本站实战工作台

安装前先认识三个地址

很多新手不是卡在 Claude Code,而是卡在“我现在到底在哪”。终端提示符所在的目录、Claude Code 可执行文件所在的位置、Git 仓库的根目录,是三个不同地址。

  • 当前工作目录决定相对路径会指向哪里,可用 pwd 查看。
  • 程序路径决定你实际启动的是哪个版本,可用 command -v claude 查看。
  • 仓库根目录决定 Git 把哪些文件视为同一个项目,可用 git rev-parse --show-toplevel 查看。

先弄清这三者,能避免把实验文件写进家目录、在错误仓库执行命令,或升级后仍调用旧版本。

建一个可以整间扔掉的练习室

不要用公司的生产仓库做第一次启动。创建独立目录,并让 Git 记录基线:

mkdir -p ~/aihubhub-labs/claude-install
cd ~/aihubhub-labs/claude-install
git init
printf '# Claude Code 安装实验\n' > README.md
git add README.md
git commit -m "chore: create safe installation lab"

如果 Git 因身份配置拒绝提交,只为这个练习仓库设置本地 user.name 与 user.email,不要不理解地覆盖全局配置。

检查依赖,再按官方渠道安装

Claude Code 的安装方式会演进,因此命令应以当前官方安装页为准,而不是复制一年前博客里的片段。安装前记录操作系统、shell、Node/Git 版本;安装后记录程序路径和版本。关键不是背命令,而是让变化可追溯。

uname -a
echo "$SHELL"
node --version
git --version
command -v claude
claude --version

不要把登录令牌、Cookie 或完整环境变量贴进聊天。可以记录“认证成功”和账号环境名称,但不要记录秘密值。

第一次启动时观察什么

在练习目录启动后,先让 Claude Code回答当前目录与可见文件,不授权写入。然后提出一个只读问题:“解释 README,并告诉我 git status 是否干净。”你要观察四件事:它是否识别当前仓库、权限请求是否与动作匹配、工具输出是否可见、退出后目录是否保持干净。

pwd
git status --short
git diff --stat

三条命令都应与启动前基线一致。若出现陌生文件,先检查内容和来源,不要直接用清理命令抹掉证据。

PATH 问题为什么最常见

“安装成功但找不到 claude”通常表示安装目录没有进入 PATH,或图形终端与登录 shell 读取了不同配置。先比较 command -v、shell 配置文件和新终端结果。不要为了省事把多个可疑目录全部追加到 PATH;这会让同名程序的优先级更难解释。

如果存在多个版本,用 type -a claude 列出候选,再明确保留哪一个。修正后关闭并重新打开终端,重新记录版本与路径。

卸载与恢复也属于安装

一次专业安装必须回答如何撤销:程序由哪个包管理器安装、配置保存在何处、项目文件有没有变化。不要删除账号数据或全局配置来证明“能卸载”;在练习中只验证包管理器的卸载说明和项目目录无残留。

本课交付物

创建 install-report.md,写下环境摘要、官方安装来源、安装前后版本、二进制路径、首次只读交互、Git 基线对比与卸载路径。敏感字段只写“已配置/未配置”。这份报告能让未来的你解释工具从哪里来,也能让团队复现同样环境。