Linux 下 Claude Code 安装与更新指南
Claude Code 简介
Claude Code 是 Anthropic 推出的命令行 AI 编程助手,基于 Claude 大模型,能在终端中直接进行代码编写、调试、重构等操作。支持多文件编辑、Git 集成、Shell 命令执行,是开发者的效率利器。
官方推荐通过 npm 安装,但国内网络环境下 npm 下载 GitHub 资源经常超时。本文介绍一种更可靠的方式:通过淘宝 npm 镜像下载预编译包,绕过网络限制,实现快速安装与更新。
方法一:npm 安装(官方方式)
最简单的方式是通过 npm 全局安装:
npm install -g @anthropic-ai/claude-code
安装完成后直接使用:
claude
注意:npm 安装过程会从 GitHub 下载预编译二进制文件,国内网络可能超时。如果遇到网络问题,推荐使用下面的方法二。
方法二:预编译包手动安装(推荐国内用户)
Claude Code 的 npm 包 @anthropic-ai/claude-code 实际上是 JS wrapper,真正的二进制文件在平台特定的包里。Linux x64 对应的包名为 @anthropic-ai/claude-code-linux-x64。
下载与安装
通过淘宝 npm 镜像下载预编译包:
# 获取最新版本号
VERSION=$(curl -sf https://registry.npmmirror.com/@anthropic-ai/claude-code-linux-x64 \
| python3 -c "import sys,json;print(json.load(sys.stdin)['dist-tags']['latest'])")
echo "Latest version: $VERSION"
# 下载 tarball
curl -fSL -o claude.tgz \
"https://registry.npmmirror.com/@anthropic-ai/claude-code-linux-x64/-/claude-code-linux-x64-${VERSION}.tgz"
# 解压到安装目录
INSTALL_DIR="$HOME/.local/share/claude/versions/$VERSION"
mkdir -p "$INSTALL_DIR"
tar xzf claude.tgz -C "$INSTALL_DIR"
rm claude.tgz
# 创建符号链接
mkdir -p "$HOME/.local/bin"
ln -sfn "$INSTALL_DIR/package/claude" "$HOME/.local/bin/claude"
# 验证
claude --version
这种方式的优点:
- 速度快:淘宝镜像 CDN 在国内下载速度可达 10MB/s+
- 离线可用:下载的 tarball 可以离线安装
- 多版本共存:每个版本独立目录,方便回滚
更新
更新只需重复上述步骤,下载新版本后更新符号链接即可。旧版本目录可保留作为回滚:
# 查看当前版本
claude --version
# 按上面的步骤下载新版本,符号链接会自动指向新版本
# 如需回滚到旧版本
ln -sfn "$HOME/.local/share/claude/versions/2.1.165/package/claude" "$HOME/.local/bin/claude"
自动化升级脚本
如果经常需要更新,可以写一个升级脚本自动完成上述流程。以下是完整的脚本:
#!/usr/bin/env python3
"""Claude Code upgrade via Taobao npm mirror.
Downloads prebuilt @anthropic-ai/claude-code-linux-x64 tarball from
registry.npmmirror.com and installs to ~/.local/share/claude/versions/.
Output:
NOOP v{version} — already up-to-date
UPGRADED v{old} → v{new} — upgrade successful
"""
import os
import re
import subprocess
import sys
import tarfile
import tempfile
from pathlib import Path
from urllib.parse import quote
NPM_REGISTRY = "https://registry.npmmirror.com"
PACKAGE_NAME = "@anthropic-ai/claude-code-linux-x64"
VERSIONS_DIR = Path.home() / ".local" / "share" / "claude" / "versions"
BIN_LINK = Path.home() / ".local" / "bin" / "claude"
def run(cmd: str, timeout: int = 30) -> subprocess.CompletedProcess:
return subprocess.run(
cmd, shell=True, capture_output=True, text=True, timeout=timeout
)
def get_current_version() -> str:
r = run(f"{BIN_LINK} --version 2>&1", timeout=10)
m = re.search(r"([\d.]+)", r.stdout.strip())
return m.group(1) if m else "unknown"
def get_latest_version() -> str | None:
encoded = quote(PACKAGE_NAME, safe="")
r = run(
f'curl -sf "{NPM_REGISTRY}/{encoded}" 2>&1 | '
f"python3 -c \"import sys,json;print(json.load(sys.stdin)['dist-tags']['latest'])\"",
timeout=15,
)
ver = r.stdout.strip()
return ver if re.match(r"^\d+\.\d+\.\d+$", ver) else None
def download_and_install(version: str) -> bool:
tarball_name = "claude-code-linux-x64" + f"-{version}.tgz"
url = f"{NPM_REGISTRY}/{PACKAGE_NAME}/-/{tarball_name}"
dest = VERSIONS_DIR / version
dest.mkdir(parents=True, exist_ok=True)
with tempfile.NamedTemporaryFile(suffix=".tgz", delete=False) as tmp:
tmp_path = tmp.name
try:
r = run(f'curl -fSL -o "{tmp_path}" "{url}"', timeout=120)
if r.returncode != 0:
print(f"DOWNLOAD_FAILED {r.stderr.strip() or r.stdout.strip()}")
return False
size_mb = os.path.getsize(tmp_path) / 1024 / 1024
print(f" Downloaded {size_mb:.1f} MB")
with tarfile.open(tmp_path, "r:gz") as tf:
tf.extractall(dest, filter="data")
binary = dest / "package" / "claude"
if not binary.exists():
print("BINARY_NOT_FOUND")
return False
binary.chmod(0o755)
BIN_LINK.unlink(missing_ok=True)
BIN_LINK.symlink_to(binary)
return True
finally:
os.unlink(tmp_path)
def cleanup_old_versions(current: str) -> None:
"""Remove old version directories."""
for d in VERSIONS_DIR.iterdir():
if d.is_dir() and d.name != current:
import shutil
shutil.rmtree(d, ignore_errors=True)
def main() -> None:
print("⬆ Claude Code Upgrade")
print()
old_ver = get_current_version()
latest = get_latest_version()
if not latest:
print("FAILED cannot determine latest version")
sys.exit(1)
print(f" Current: v{old_ver}")
print(f" Latest: v{latest}")
print()
if old_ver == latest:
print(f"NOOP v{latest}")
return
print(" Downloading from npm mirror...")
if download_and_install(latest):
cleanup_old_versions(latest)
print(f"UPGRADED v{old_ver} → v{latest}")
else:
print("FAILED download/install error")
sys.exit(1)
if __name__ == "__main__":
main()
将脚本保存为 claude_upgrade.py,每次更新只需运行:
python3 claude_upgrade.py
脚本的主要特性:
- URL 编码处理:使用
urllib.parse.quote正确编码包名中的@和/,避免镜像 API 请求失败 - 错误处理:下载失败或二进制文件缺失时会输出明确的错误信息
- 旧版本清理:升级成功后自动删除旧版本目录,节省磁盘空间
- 幂等执行:已是最新版本时输出
NOOP,不会重复下载
对于国内 Linux 用户,推荐使用淘宝 npm 镜像下载预编译包的方式,兼顾速度和可靠性。配合自动化脚本,更新体验与 npm 方式一样便捷。