Claude Code 启动报 "Is a directory" 怎么解决

更新于 2026-08-21

一句话:软链指到了版本目录而不是目录里的二进制文件。两种目录布局并存,按老习惯配软链就会踩这个。

现象

执行 claude 时直接报错,进不去交互界面:

/home/你的用户名/.local/bin/claude: Is a directory

claude --version 同样报这个错。

原因

native 安装的 Claude Code 用「软链 + 版本目录」的结构管理多个版本,而版本目录有两种布局

  • 早期版本:~/.local/share/claude/versions/<版本> 本身就是那个可执行文件
  • 较新版本(实测 2.1.219 之后):~/.local/share/claude/versions/<版本>/ 是一个目录,可执行文件在它里面,叫 claude

如果按早期布局的习惯,把 ~/.local/bin/claude 指向版本目录,shell 尝试执行一个目录,就得到 Is a directory

诊断

第一步永远是看软链到底指向哪里:

ls -la ~/.local/bin/claude

正确的样子(新布局,注意结尾的 /claude):

lrwxrwxrwx ... /home/user/.local/bin/claude -> /home/user/.local/share/claude/versions/2.1.238/claude

错误的样子(指向了目录,结尾没有 /claude):

lrwxrwxrwx ... /home/user/.local/bin/claude -> /home/user/.local/share/claude/versions/2.1.238

再确认那个版本是哪种布局:

ls -la ~/.local/share/claude/versions/2.1.238
# 输出是单个文件 → 早期布局
# 输出是目录且里面有 claude → 新布局

解决

新布局,软链指到目录里的可执行文件:

V=2.1.238
ln -sfn ~/.local/share/claude/versions/$V/claude ~/.local/bin/claude
claude --version

早期布局,软链指到版本文件本身:

V=2.1.180
ln -sfn ~/.local/share/claude/versions/$V ~/.local/bin/claude

怎么确认修好了

ls -la ~/.local/bin/claude     # 指向的路径末尾应是可执行文件
file -L ~/.local/bin/claude    # 应显示 ELF executable,而不是 directory
claude --version               # 输出版本号

相关

回滚到旧版本时同样要注意布局差异——不同版本的目标路径不一样,不能照抄上一次的命令。可用版本列表:

ls ~/.local/share/claude/versions/

另外,改软链不影响已经在运行的会话,需要重启 Claude Code 才生效。

还没把 Claude Code 跑起来?

Code2AI(code2ai.codes)提供官方 Claude Code 命令行的订阅制接入, 配置两个环境变量即可开始使用,支持全系列 Claude 模型,额度在控制台实时可查。

其他排查记录

← 回到故障排查知识库