你在终端里敲 /login,浏览器弹出来,输入账号密码,页面显示"Success"。一切看起来没问题。切回终端,随便执行一条命令:
Not logged in. Run /login
再登一次。浏览器又成功了。回到终端,还是 Not logged in。
然后进入了**无限循环。**你开始怀疑 OAuth 回调出了问题,检查代理设置,升级 CLI 版本,甚至重新 logout 再 login。全部无效。
这篇文章记录这次排查的完整过程。先说结论:问题不在认证,而是磁盘满了。
一、问题现象
环境是 Linux 开发机,Claude Code CLI,使用 Claude 订阅账号登录(非 API Key)。
复现步骤很简单:
bash
claude /login
# 浏览器打开 → 登录成功 → 页面提示 Success
claude whoami
# Not logged in
每次 /login 浏览器都显示成功,每次回到终端都说未登录。登录状态像是写进了黑洞。进去了,但读不出来。
二、排查过程
最开始怀疑的方向都是认证相关的:
bash
# 重新登录
claude logout && claude login
# 升级 CLI
npm update -g @anthropic-ai/claude-code
全部试了,全部无效。
但在跑 npm update 的时候,终端闪过一行不起眼的报错:
ENOSPC: no space left on device
磁盘满了。 这行报错淹没在一堆输出里,很容易忽略。但它是整个问题的关键线索。
三、根本原因:session 写入失败
Claude Code 的登录不只是"浏览器上点一下"那么简单。完整链路有五步:

前三步(启动 CLI → 浏览器 OAuth → 拿到 Token)一切正常,浏览器里看到的"登录成功"确实没骗你。问题出在第四步:CLI 拿到 Token 后需要把 session 写入本地文件(通常在 ~/.config/claude/ 或 ./.claude/ 下),如果磁盘满了,这一步会静默失败,但是没有弹窗、没有报错,就是写不进去。
于是第五步,CLI 下次执行命令时去读 session 文件,发现是空的或不存在,直接判定"未登录"。你只能再次 /login,然后重复这个死循环。
这就是为什么这个问题特别迷惑,断裂发生在你看不见的地方。浏览器那一侧的反馈全是绿灯,但 CLI 这一侧的持久化悄悄失败了,而且没有任何错误提示告诉你"写不进去"。
四、解决方案
4.1 查看磁盘使用情况
先确认是不是磁盘的问题:
bash
df -h
-
df= disk free查看 文件系统的磁盘使用情况,显示每个挂载点的总容量、已用、可用、使用率等。
-
-h= human readable(人类可读)用 K、M、G、T 单位显示大小,而不是字节,方便理解。
bash
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 2.0T 1.7T 287G 86% /
tmpfs 126G 1.1M 126G 1% /dev/shm
/dev/vda1 2.0G 185M 1.9G 10% /boot
解释:
列 含义 Filesystem文件系统所在设备或挂载点 Size文件系统总容量 Used已使用容量 Avail可用容量 Use%使用率百分比 Mounted on文件系统挂载点(对应哪个目录)
如果看到 Use% 列显示 100%,那就是了。
4.2 释放空间
接下来释放空间。几个高收益的清理目标:
bash
# npm 缓存,通常几百 MB 到几 GB
npm cache clean --force
# Conda 缓存(如果你用 Conda)
conda clean --all
# pip 缓存
rm -rf ~/.cache/pip
# 项目里的 node_modules(不在用的项目可以删)
rm -rf /path/to/old-project/node_modules
释放完空间,重新登录:
bash
claude login
这次 session 能正常写入了,问题立刻消失。
五、举一反三:CLI 工具异常排查思路
这个问题的本质是系统级资源不足导致状态持久化失败。它不只发生在 Claude Code 上,任何需要往磁盘写状态文件的 CLI 工具都可能中招:Git 的 credential helper、Docker 的 auth config、kubectl 的 token cache......症状各不相同,但根因一样。
以后遇到 CLI 工具的"玄学问题",可以按这个优先级排查:

大多数人在前三层就停了,查网络、升版本、看权限,全部无果后开始怀疑人生。真正的原因藏在最底层。
养成习惯:遇到 CLI 工具行为异常,先跑一个 df -h。 登录状态丢失、配置无法保存、工具莫名崩溃。这些看似不相干的症状,都可能指向同一个原因:磁盘写不进去了。
在 Linux 上,磁盘满是最安静的故障之一。它不会弹窗警告你,不会让系统崩溃,只是让所有需要写入的操作静默失败。而你看到的,永远是下游的症状,不是上游的原因。