本文是 Claude Code 系列教程的入门篇,但走了一条和大多数"安装教程"完全不同的路线:假定你已经把
claude装上了,可一敲回车就报错。我们将用/doctor体检和一张排坑决策表,把"命令找不到、认证失败、网络离线、配置不生效"这四类最高频的首次运行故障一次性讲透,最后用一只真实项目跑通从报错到首跑的完整闭环。
学完本教程,你将能够:
claude /doctor 对本地环境做一次系统性"体检",定位是哪一层出了问题;command not found、Invalid API key、offline / fetch failed、settings.json 不生效这四类首跑报错;适用人群:已经按官方指引装好 Claude Code(无论 npm 全局安装、原生安装脚本,还是桌面应用内置终端),但首次运行卡住、报错、或行为和教程不一致的零基础用户。如果你连装都还没装,请先看本系列其它"安装篇",本文专注安装之后的排坑。
claude 或 npm install -g @anthropic-ai/claude-code,终端里敲过 claude 这个命令(不管它成功还是报错);README.md 或几行代码即可。提示:Windows 用户强烈建议先安装 Git for Windows。官方文档明确指出,没有 Git for Windows 时,Claude Code 的部分 shell 行为会异常,这是很多人"装好却用不顺"的隐性根因。
很多初学者一遇到报错就重装,这是最低效的做法。Claude Code 的"首跑链路"其实是一条清晰的管道,报错一定落在其中某一层:
flowchart LR
A["① 命令层<br/>claude 是否可被找到"] --> B["② 认证层<br/>是否有有效凭证"]
B --> C["③ 网络层<br/>能否连上 API 端点"]
C --> D["④ 配置层<br/>settings.json 是否被正确读取"]
D --> E["✅ 首跑成功<br/>进入对话"]
A -.报错.-> X["command not found<br/>PATH / 权限问题"]
B -.报错.-> X
C -.报错.-> X
D -.报错.-> X
记住这张图,下面每一关都对应其中一层。先判断报错属于哪一层,再动手,能帮你省下 90% 的盲目重装时间。
无论你遇到什么报错,第一步都应该是跑一次自带的诊断命令:
claude doctor
说明:在新版本中也可写作
claude /doctor(交互式入口里输入斜杠命令)。它会输出:当前可执行文件路径、Node 运行时版本、配置文件位置、检测到的认证方式、是否检测到代理等关键信息。
预期输出(健康状态)大致长这样(描述,非截图):
Claude Code v1.x.x —— 版本号能正常打印,说明命令层 OK;Node.js vX.Y.Z —— 运行时版本满足要求(官方要求 Node ≥ 18);Config: /Users/你/.claude/settings.json —— 配置文件被正确发现;Auth: OAuth (claude.ai) 或 Auth: API Key —— 认证方式被识别;No issues found,或列出具体问题项。如果 claude doctor 本身都跑不起来(提示 command not found),那故障就在第一层,往下看。
这是纯新手最高频的报错,根因几乎都在 PATH 没配好,而不是"没装上"。
$ claude
bash: claude: command not found
# 或 Windows PowerShell:
claude : 无法将"claude"项识别为 cmdlet
1)npm 全局目录不在 PATH 里
npm install -g 把 claude 装到了 npm 的全局 prefix 目录,但这个目录没进系统 PATH。先确认它到底装哪了:
npm config get prefix
# macOS/Linux 通常是 /usr/local 或 ~/.npm-global
# Windows 通常是 %APPDATA%\npm
确认该目录确实有 claude(或 claude.cmd),然后把它加进 PATH。
~/.zshrc,加一行
bash
export PATH="$HOME/.npm-global/bin:$PATH"
然后 source ~/.zshrc。%APPDATA%\npm 加入用户 PATH,新开一个终端窗口生效(旧窗口不会自动刷新)。2)用 sudo 装导致的权限错乱
很多人为了绕过 EACCES 权限错误,习惯性 sudo npm install -g。这会把全局包装成 root 所有,后续非 root 用户更新时又报权限错。更干净的做法是改 npm 的全局前缀:
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
# 再把 ~/.npm-global/bin 加入 PATH,然后无需 sudo 重新安装
3)Windows 上推荐用 Git Bash 或 PowerShell,而非 cmd
cmd 对 claude 这种脚本包装的命令兼容性较差,常表现为"装了却找不到"。换成 PowerShell(或 Git Bash)通常立即解决。
常见问题:改完 PATH 还是
command not found? 解法:99% 是没新开终端。环境变量只在进程启动时读取一次,关掉当前窗口、重开一个再试。
命令能跑了,但一进对话就弹认证错误。这一层的报错最容易让新手懵,因为"我都填了 key 了还说我没填"。
Invalid API keyANTHROPIC_AUTH_TOKEN / API Key 填错了、漏了 Bearer 前缀,或 ANTHROPIC_BASE_URL 没配。sk-ant- 开头)。Missing API key · Run /login这是最坑的一种:你明明写了 settings.json,它却还让你 /login。根因通常是 Claude Code 默认走官方 OAuth 登录态,而你提供的第三方凭证没有覆盖掉这个默认行为。
Claude Code 的认证有两条路,别混用:
flowchart TD
Q{"用哪种方式登录?"} -->|官方订阅 Pro/Max| O["路径A:OAuth 浏览器登录<br/>运行 claude 后按提示 /login<br/>浏览器跳转 claude.ai 授权"]
Q -->|第三方兼容 API / 自建网关| K["路径B:环境变量 + settings.json<br/>ANTHROPIC_BASE_URL<br/>ANTHROPIC_AUTH_TOKEN"]
O --> OK1["✅ 凭证存在 ~/.claude/.credentials.json"]
K --> OK2["✅ settings.json 被正确加载"]
路径 A(官方订阅):第一次运行 claude,选 Claude account,浏览器会跳转到 claude.ai 完成授权。完成后凭证写入 ~/.claude/.credentials.json。之后不要再设置 ANTHROPIC_AUTH_TOKEN,否则会覆盖登录态。
路径 B(第三方 API):在 ~/.claude/settings.json 里写:
{
"env": {
"ANTHROPIC_BASE_URL": "https://你的网关地址",
"ANTHROPIC_AUTH_TOKEN": "你的token",
"ANTHROPIC_MODEL": "claude-sonnet-4-6",
"ANTTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5-20251001"
}
}
注意键名是
env(环境变量注入),而不是把ANTHROPIC_BASE_URL直接写在顶层。很多"配置不生效"就是因为写错了层级。
针对症状 B 的专用排错:如果 settings.json 都配好了还提示 Run /login,依次检查——
~/.claude/settings.json(用户级),不是项目里的;.claude/settings.json 覆盖了用户级配置;ANTHROPIC_API_KEY 环境变量与 token 冲突(echo $ANTHROPIC_AUTH_TOKEN 排查)。认证通过了,但一对话就 Connection error、offline、fetch failed、getaddrinfo ENOTFOUND。这是网络层问题,国内开发者尤其高发。
api.anthropic.com 超时;ANTHROPIC_BASE_URL 域名写错或网关本身宕机。1)让代理对 Claude Code 生效。Claude Code 读取标准的 HTTP_PROXY / HTTPS_PROXY 环境变量:
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
也可以写进 settings.json 的 env 块里持久化。注意:代理端口要和你本地代理客户端(Clash、v2ray 等)实际监听的端口一致。
2)快速验证连通性。在配了网关或代理后,先别急着开对话,用 curl 验证链路:
curl -i https://你的网关地址/v1/messages \
-H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01"
能拿到 HTTP 状态码(哪怕是 401)说明网络通;如果 Connection timed out 或 ENOTFOUND,说明还卡在网络层,不要往下走。
3)关闭代理仍想用官方端点:确认 DNS 能解析 api.anthropic.com(nslookup api.anthropic.com),并在 claude doctor 里看它是否显示检测到代理。如果显示 offline,往往是代理变量和实际网络环境打架。
前三层都过了,命令能跑、能登录、网络也通,但某些设置(比如默认模型、自定义 hook、权限规则)就是"看起来配了却不生效"。这是配置层。
配置层级覆盖:Claude Code 的配置按"用户级 → 项目级 → 企业级"合并,高优先级会覆盖低优先级。你在用户级改了模型,但项目里有个 .claude/settings.json 写死了另一个模型,就会让你以为"没生效"。
JSON 静默失败:settings.json 语法错误时,Claude Code 通常直接忽略整个文件而不报错,表现就是"我明明写了它就是不读"。用任意 JSON 校验器(或 cat ~/.claude/settings.json | python3 -m json.tool)验一下。
key 拼错:比如 ANTHROPIC_BASE_URL 拼成 ANTHOPIC_BASE_URL,少一个字母,环境变量名不匹配,自然不生效。
/config 和 /status 复核进入对话后,输入斜杠命令 /config 可以查看当前实际生效的配置,/status 可以看当前会话用的模型、账号、上下文用量。这两个命令显示的才是真正生效的值,以它们为准,而不是你"以为"写入的值。
如果 /config 里看到的值和你 settings.json 写的不一样,就回到上面三个坑去逐个排查。
把四层都讲完后,我们用一只真实的小项目,演示"从报错到首跑成功"的完整过程。这里用一个最常见的场景:国内开发者 + 第三方网关 + macOS。
你已经 npm install -g 装好了 Claude Code,进入一个含 app.py 的项目目录,敲 claude,结果:
Missing API key. Run /login or set ANTHROPIC_AUTH_TOKEN.
判断:命令能跑(第一关过),提示要 API key(第二关),走路径 B。
# 第 1 步:跑体检
claude doctor
# 看到配置文件路径是 ~/.claude/settings.json
# 第 2 步:检查现有配置
cat ~/.claude/settings.json
# 发现是空的,或者 base_url/token 写在顶层(错误层级)
修复:用正确的 env 层级重写:
{
"env": {
"ANTHROPIC_BASE_URL": "https://gateway.example.com",
"ANTHROPIC_AUTH_TOKEN": "sk-my-gateway-token",
"ANTHROPIC_MODEL": "claude-sonnet-4-6",
"ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5-20251001"
}
}
# 第 3 步:JSON 语法自检
python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "JSON OK"
# 第 4 步:验证网络层(第三关)
curl -i https://gateway.example.com/v1/messages \
-H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01"
# 拿到 HTTP 401(缺 body)说明网络通、key 被接收,继续
# 第 5 步:重新进入对话
claude
进入对话后,输入 /status 确认模型是 claude-sonnet-4-6、账号已识别。然后给出第一个真实任务:
> 读一下 app.py,告诉我它的入口函数在哪,并加一段 argparse 命令行参数解析
预期结果:Claude 读取文件、定位入口、生成 diff、请求你确认后写入。整个过程无认证错误、无网络超时。到这一步,首跑链路全通。
flowchart TD
S(["运行 claude 报错"]) --> Q1{"claude 本身能调用吗?"}
Q1 -->|command not found| F1["第一关:PATH / 权限<br/>查 npm prefix,加 PATH,重开终端"]
Q1 -->|能| Q2{"报错提到 key / login 吗?"}
Q2 -->|Invalid / Missing API key| F2["第二关:认证<br/>确认走 OAuth 还是第三方 token<br/>检查 settings.json 的 env 层级"]
Q2 -->|否| Q3{"报错提到 offline / fetch / connection?"}
Q3 -->|是| F3["第三关:网络<br/>设 HTTPS_PROXY,curl 验证网关连通"]
Q3 -->|否| Q4{"命令能跑但行为不对?"}
Q4 -->|是| F4["第四关:配置<br/>/config 看实际生效值<br/>查项目级是否覆盖用户级"]
F1 --> R["重新 claude doctor 体检"]
F2 --> R
F3 --> R
F4 --> R
R --> E(["✅ /status 确认,首跑成功"])
| 你看到的现象 | 对应层 | 一句话解法 |
|---|---|---|
command not found |
命令层 | 把 npm 全局 bin 加进 PATH,重开终端 |
EACCES 安装/更新报错 |
命令层 | 改 npm prefix,别用 sudo |
Invalid API key |
认证层 | 区分官方 key(sk-ant-) 与第三方 token,核对 base_url |
Missing API key · Run /login |
认证层 | settings.json 用 env 层级,清掉冲突的环境变量 |
offline / fetch failed |
网络层 | 设 HTTPS_PROXY,用 curl 验证端点连通 |
getaddrinfo ENOTFOUND |
网络层 | DNS 解析失败,检查代理/网关域名拼写 |
| 配置改了不生效 | 配置层 | JSON 语法自检 + /config 看实际值 + 排查项目级覆盖 |
| Windows cmd 里找不到命令 | 命令层 | 换用 PowerShell 或 Git Bash,确保装了 Git for Windows |
/doctor 命令一键体检与排坑的中文实操[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
