解决 90% 新手报错 | 100% 适配 Linux 服务器 | 全部命令可直接复制执行
Claude Code CLI 是一个 Node.js 包,通过 npm 全局安装。因此:
apt install nodejs 只给 12.x,版本太低# === 步骤1:更新系统包列表 ===
sudo apt update
# === 步骤2:安装必要工具(curl, gnupg) ===
sudo apt install -y curl gnupg
# === 步骤3:添加 NodeSource 官方仓库(Node.js 20.x LTS) ===
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# === 步骤4:安装 Node.js(同时自动安装 npm) ===
sudo apt install -y nodejs
命令释义
curl -fsSL:静默下载 Nodesource 安装脚本,-f 遇错即停,-s 不显示进度,-S 遇错显示,-L 跟随重定向| sudo -E bash -:以 root 权限执行脚本,-E 保留当前环境变量apt install -y nodejs:-y 跳过确认,适合脚本化安装# 检查 Node.js 版本(必须 ≥ 18.0.0)
node --version
# 期望输出:v20.x.x 或 v18.x.x
# 检查 npm 版本(必须 ≥ 9.0.0)
npm --version
# 期望输出:10.x.x 或 9.x.x
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 重载 shell 配置
source ~/.bashrc
# 安装 Node.js 20 LTS
nvm install 20
# 设为默认版本
nvm alias default 20
# 使用该版本
nvm use 20
# 验证
node --version && npm --version
Claude Code CLI 通过 npm 全局安装,安装后会在系统的 node_modules 全局目录下放置包文件,并在 PATH 目录中创建 claude 可执行文件链接。理解这个机制有助于排查"命令不存在"问题。
# === 全局安装 Claude Code CLI ===
npm install -g @anthropic-ai/claude-code
# === 安装过程预期输出 ===
# npm 会下载包并安装到全局 node_modules
# 最后一行显示:+ @anthropic-ai/claude-code@x.x.x
参数释义
npm install:npm 安装命令-g:全局安装(global),包安装到系统级目录而非当前项目@anthropic-ai/claude-code:包名,@anthropic-ai 是 npm 组织作用域(scope)# 检查 claude 命令是否可用
claude --version
# 期望输出:版本号,如 1.0.x
# 查看 npm 全局包列表,确认已安装
npm list -g @anthropic-ai/claude-code
# 期望输出:/usr/lib/node_modules
# └── @anthropic-ai/claude-code@x.x.x
# 查看 claude 可执行文件位置
which claude
# 期望输出:/usr/bin/claude 或 /usr/local/bin/claude
# === 升级到最新版本 ===
npm update -g @anthropic-ai/claude-code
# === 或:卸载后重装(更干净) ===
npm uninstall -g @anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code
# === 查看当前版本与最新版本对比 ===
npm outdated -g @anthropic-ai/claude-code
npm update -g @anthropic-ai/claude-code,或在遇到异常行为时首先尝试升级。
claude: command not foundnpm 全局安装后,claude 可执行文件被放置在了 npm 的全局 bin 目录中(例如 /usr/local/lib/node_modules/.bin/ 或 ~/.npm-global/bin/),但该目录不在系统的 PATH 环境变量中,导致 shell 找不到该命令。
三种常见的 npm 全局路径模式:
/usr/lib/node_modules/,bin 链接在 /usr/bin//usr/local/lib/node_modules/,bin 链接在 /usr/local/bin/~/.npm-global/lib/node_modules/,bin 链接在 ~/.npm-global/bin/# 步骤1:查看 npm 全局安装路径
npm config get prefix
# 输出示例:/usr/local 或 /home/username/.npm-global
# 步骤2:查看 npm 全局 bin 目录
npm bin -g
# 输出示例:/usr/local/bin 或 /home/username/.npm-global/bin
# 步骤3:检查该目录下是否有 claude
ls -la "$(npm bin -g)/claude"
# 如果文件存在,说明安装成功,只是 PATH 没配好
# 步骤4:检查当前 PATH 是否包含该目录
echo $PATH | tr ':' '\n' | grep "$(npm bin -g)"
# 无输出 = PATH 未包含 npm 全局 bin 目录 → 需要修复
# === 适用于使用 sudo npm install -g 安装的情况 ===
# 1. 确认 npm 全局 bin 路径
NPM_BIN=$(npm bin -g)
echo "npm 全局 bin 路径: $NPM_BIN"
# 2. 添加到 PATH(临时生效)
export PATH="$NPM_BIN:$PATH"
# 3. 测试 claude 命令
claude --version
# 4. 写入 ~/.bashrc 持久化
echo "export PATH=\"$NPM_BIN:\$PATH\"" >> ~/.bashrc
# 5. 重载配置
source ~/.bashrc
# 6. 再次验证
claude --version
# === nvm 用户的 PATH 修复 ===
# 1. 确认 nvm 已加载
command -v nvm
# 2. 确认当前使用的 Node 版本
nvm current
# 3. 查看该版本下的 bin 目录
echo "$NVM_DIR/versions/node/$(nvm current)/bin"
# 4. 检查 claude 是否存在
ls -la "$NVM_DIR/versions/node/$(nvm current)/bin/claude"
# 5. 确保 ~/.bashrc 中有 nvm 初始化代码
# 如果缺失,添加以下内容:
cat >> ~/.bashrc << 'EOF'
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
EOF
source ~/.bashrc
claude --version
# === 适用于手动设置了 npm prefix 的情况 ===
# 1. 查看自定义 prefix
npm config get prefix
# 2. 如果你的 prefix 是 ~/.npm-global
# 确保以下内容在 ~/.bashrc 中:
cat >> ~/.bashrc << 'EOF'
# npm global settings
export NPM_CONFIG_PREFIX="$HOME/.npm-global"
export PATH="$HOME/.npm-global/bin:$PATH"
EOF
source ~/.bashrc
claude --version
source ~/.bashrc 或重新登录~/.zshrc 而不是 ~/.bashrc/usr/local/bin 在普通用户的 PATH 中claude 能找到但执行时报模块找不到# === 阶段1:卸载现有版本 ===
npm uninstall -g @anthropic-ai/claude-code
# === 阶段2:清理 npm 缓存 ===
npm cache clean --force
# === 阶段3:确认卸载干净 ===
which claude 2>/dev/null && echo "WARN: still exists" || echo "OK: removed"
npm list -g @anthropic-ai/claude-code 2>/dev/null && echo "WARN: still in npm" || echo "OK: removed"
# === 阶段4:手动清理残留文件(如果存在) ===
# 删除可能的残留可执行文件
sudo rm -f /usr/bin/claude /usr/local/bin/claude 2>/dev/null
# 删除可能的残留 node_modules
NPM_ROOT=$(npm root -g)
sudo rm -rf "$NPM_ROOT/@anthropic-ai/claude-code" 2>/dev/null
# === 阶段5:清理 npm 全局目录下的废弃包 ===
npm prune -g
# === 阶段6:重新安装 ===
npm install -g @anthropic-ai/claude-code
# === 阶段7:验证 ===
claude --version
# 期望输出:最新版本号
# 设置淘宝 npm 镜像(临时)
npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com
# 或永久设置
npm config set registry https://registry.npmmirror.com
Claude Code CLI 支持两种认证模式:
| 模式 | 适用人群 | 认证方式 |
|---|---|---|
| OAuth 登录 | Claude Pro/Max 订阅用户 | 浏览器登录 Anthropic 账号 |
| API 密钥 | API 付费用户 | 设置 ANTHROPIC_API_KEY 环境变量 |
两种模式可同时配置,CLI 会优先使用 API 密钥。
# 在终端执行登录命令
claude login
# 预期流程:
# 1. 终端输出一个验证链接
# 2. 浏览器打开链接(或手动复制到浏览器)
# 3. 在浏览器中登录 Anthropic 账号
# 4. 终端自动检测到登录成功
# 5. 显示 "Successfully logged in as <your-email>"
# 方案1:使用 --print 参数获取验证链接,在本地浏览器打开
claude login --print
# 方案2:如果服务器有 lynx/links 文本浏览器
claude login
# 方案3:SSH 端口转发,用本地浏览器
# 在本地终端执行:
ssh -L 8080:localhost:8080 user@your-server
# 然后服务器上的 claude login 会在 localhost:8080 启动回调
# === 设置 API 密钥(临时,仅当前会话) ===
export ANTHROPIC_API_KEY="sk-ant-api03-your-key-here"
# === 设置 API 密钥(持久化到 ~/.bashrc) ===
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-your-key-here"' >> ~/.bashrc
source ~/.bashrc
# === 验证密钥是否生效 ===
claude --version
# 如果能正常输出版本号,说明密钥格式正确
# 或使用 print 模式测试
echo "hello" | claude --print -p "say hello" 2>&1 | head -5
~/.bashrc 或 ~/.claude/.env 存储密钥sk-ant-api03- 开头,如果格式不对会报认证错误# 检查当前登录状态
claude whoami
# 输出示例:Logged in as user@example.com (Pro)
# 切换账号:先登出再登录
claude logout
claude login
# 查看当前使用的认证方式
cat ~/.claude/config.json 2>/dev/null | grep -i auth || echo "使用环境变量认证"
# Claude Code CLI 配置目录
ls -la ~/.claude/
# credentials.json - OAuth 登录凭证
# config.json - 用户配置
# history.jsonl - 会话历史
# 查看配置
cat ~/.claude/config.json 2>/dev/null || echo "尚未生成配置文件"
🎯 完成以下所有检查项,方可确认环境安装成功。任一条不通过,请回溯对应章节修复。
# ========== 验收清单(逐条执行)==========
# ✅ 检查1:Node.js 版本 ≥ 18
node --version
# 期望:v18.x.x 或 v20.x.x 或更高
# ✅ 检查2:npm 版本 ≥ 9
npm --version
# 期望:9.x.x 或 10.x.x
# ✅ 检查3:claude 命令存在
which claude
# 期望:/usr/bin/claude 或 /usr/local/bin/claude 或 ~/.npm-global/bin/claude
# ✅ 检查4:claude 版本正常输出
claude --version
# 期望:输出版本号,无报错
# ✅ 检查5:claude --help 正常输出
claude --help | head -5
# 期望:显示帮助信息
# ✅ 检查6:登录状态正常
claude whoami 2>/dev/null || echo "使用 API 密钥模式,跳过此检查"
# ✅ 检查7:能进入交互模式
# 在终端执行 claude,应该出现交互提示符
# 输入 /exit 退出
echo "测试交互模式:执行 claude 后输入 /exit 退出"
# ✅ 检查8:print 模式正常工作
echo "" | claude --print -p "回复 OK" 2>&1 | head -3
# 期望:输出包含 OK
#!/bin/bash
# 保存为 check-claude-env.sh,执行 bash check-claude-env.sh
echo "=== Claude Code CLI 环境检查 ==="
check() { echo -n "检查 $1... "; eval "$2" && echo "✅ 通过" || echo "❌ 失败"; }
check "Node.js版本" 'node --version | grep -qE "v(1[89]|2[0-9])"'
check "npm版本" 'npm --version | grep -qE "^[0-9]+"'
check "claude命令" 'which claude > /dev/null 2>&1'
check "claude版本" 'claude --version > /dev/null 2>&1'
check "claude帮助" 'claude --help > /dev/null 2>&1'
echo "=== 检查完成 ==="