# 2026-06-02 文件管理器目录列表全空 Bug 修复(unix_ls long-iso 解析) ## 日期 2026-06-02 ## 变更摘要 修复 `server/utils/unix_ls.py` 中 `parse_ls_la_line` 函数对 GNU `ls -la --time-style=long-iso` 输出格式的解析错误,导致所有普通文件和目录(非软链接)被静默丢弃。 ## 根本原因 `ls -la --time-style=long-iso` 输出每行 **8 个字段**(日期和时间各占 1 个字段): ``` drwxr-xr-x 2 root root 4096 2024-05-22 10:30 dirname ``` 而原始代码要求 `len(parts) >= 9`,导致所有普通文件/目录行被 `return None` 丢弃。 软链接能幸存,是因为它们的文件名包含 ` -> target`,在 **标准格式**(3 个日期字段)下 使字段数达到 9,但在 long-iso 格式下仍只有 8 个字段,实际上也应该被修复。 **表现**: - root 用户(最高权限)浏览任意目录,返回条目数为 0,且 `error` 为空 - 只有软链接偶尔出现(取决于目标系统的 ls 实现) - 浏览 `/` 只显示 `bin, lib, lib64, sbin` 这 4 个软链接,而非全部目录 ## 修复方案 在 `parse_ls_la_line` 中检测字段 `parts[5]` 是否匹配 `YYYY-MM-DD`: - **long-iso** → 文件名在 `parts[7]`,修改时间为 `parts[5] + parts[6]` - **standard** → 文件名在 `parts[8]`(同原逻辑) 两种格式均正确提取文件名、软链接目标、修改时间。 ## 涉及文件 | 文件 | 变更 | |------|------| | `server/utils/unix_ls.py` | 修复 `parse_ls_la_line`,兼容 long-iso 格式(8 字段) | ## 重要说明 - 此 Bug 与 SSH 用户权限(root / 非 root)**无关** - 使用 GNU `ls`(支持 `--time-style`)的服务器均受影响 - 使用 BusyBox `ls`(不支持 `--time-style`,会 fallback 到标准格式)的服务器不受影响 - **修复后无需重新配置 sudoers**,纯后端解析逻辑修复 ## 需要迁移/重启 - 后端重启生效(`supervisorctl restart nexus`) ## 验证方式 1. 运行 `python scripts/_test_unix_ls.py` — 全部 OK 2. 部署后访问 `/files?server_id=8`,应能看到 `/` 下的完整目录列表 3. 对比修复前后:`/etc`, `/usr`, `/var`, `/tmp` 等目录应正常显示