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 模型,额度在控制台实时可查。