# 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` 等目录应正常显示
