PDS(云盘)

功能

  • 获取 drive/drive_id、查询企业空间、团队空间、个人空间 → 阅读 references/drive.md
  • 上传本地文件,或下载文件到本地 → 见下方"常见操作"(内联;常见情况无需阅读参考)。高级上传选项 → references/upload-file.md;高级下载 → references/download-file.md
  • 搜索或查找文件 → 阅读 references/search-file.md
  • 对云盘进行文档 / 音频 / 视频分析、快速查看、摘要、精读和要点提取 → 阅读 references/multianalysis-file.md这是分析 / 总结内容的唯一正确方式——绝不要为此目的下载文件并自行读取;见下方"分析 vs 下载"
  • 图像搜索、相似图搜索、图文混合检索 → 阅读 references/visual-similar-search.md硬性规则(本地源图 = 硬停止):如果用户给的源图是本地文件(本地路径如 ~/Downloads/cat.jpg,或本地附加的图片),你绝不能 upload-file 它,也绝不能运行 similar-search。不要在确认后提议上传,也不要追问。以这条终止性语句结束:"源图片是本地文件,不能代为上传或执行 similar-search。请您自行上传到 PDS 后,再提供 cloud path 或 file_id。" 仅当用户指向的源已存在于 PDS 时才运行 similar-search。同名 PDS 文件不是替代品;绝不搜索一个或臆造源 file_id
  • 图像编辑、图像处理 → 阅读 references/image-editing.md
> 硬性规则:图像编辑必须使用 aliyun pds image-process(一次 CLI 调用)。你绝不能下载图像并用 PIL、Pillow、OpenCV 或任何其他 Python/库在本地处理。本地处理绕过服务端色彩空间管理、EXIF 处理和修订追踪,即使视觉结果看起来正确也计为失败。
  • 归档下载、批量下载、将多个文件打包为 zip → 阅读 references/archive-download.md
  • 仅名称 / 部分 / 相对路径解析为最佳匹配的文件或文件夹 → 见下方常见操作中的"解析裸名称 / 部分或相对路径"(内联——对此类目标做任何操作前先做这一步)。将完整绝对云盘路径(例如 /Photos/2026/04/file.jpg)解析为 file_id,或从 file_id 反向查找完整路径 → 阅读 references/resolve-path.md
  • 通过绝对云盘路径或文件 ID 获取文件 / 文件夹元数据 → 见下方"获取文件信息"(内联;get-file --path 内部解析路径)
  • 列出目录内容(list-file) → 见下方"列出目录"(内联;常见情况无需阅读参考)
  • 文件管理——重命名、移动、复制、创建文件夹、添加 / 移除标签 / 备注,以及高级 list-file 选项(分页 / 排序) → 阅读 references/file-management.md
  • 创建 / 列出 / 搜索 / 更新 / 取消分享链接,或按状态统计分享 → 阅读 references/share-link.md
  • PDS 挂载盘(挂载盘 / PDS 挂载盘 / 企业云盘挂载盘,mountapp)——安装、升级、启动、启用、挂载、查询状态 / 配置、修改配置、停止或卸载,使云盘可像本地磁盘一样访问(Windows/macOS/Linux) → 阅读 references/mountapp.md硬性规则:mountapp 需要 AK 鉴权——任何 mountapp 操作前,验证 PDS 配置是通过 references/config.md 中的 AK 分支初始化的;如果当前配置使用 API Key 鉴权,停止并告知用户 mountapp 仅支持 AK 鉴权,不要继续。停止 / 卸载是高危操作:运行前需要人工确认

常见操作(内联——无需阅读参考即可操作)

最高频、单一用途的操作记录在此,以便常见情况无需额外阅读参考。仅在需要每个操作末尾提到的进阶选项时才查阅参考文件。

解析裸名称 / 部分或相对路径(对此类目标做任何操作前先做这一步)

当用户仅用名称saved-images)或部分 / 相对路径photo-edit/saved-images,无确认的前导 /)指定目标时,用 resolve-path --name 一次调用解析它。CLI 递归搜索、对命中排序并返回最佳匹配——因此直接在根下的文件夹也能解析,你永远不需要用 list-file 扫遍文件夹:

aliyun pds resolve-path --drive-id <id> --name "saved-images" [--type folder|file]

部分 / 相对路径也可以(前导斜杠可选):

aliyun pds resolve-path --drive-id <id> --name "photo-edit/saved-images"


- **唯一命中** → `{drive_id, file_id, path, file}`(与 `--path` 形状相同)。使用它。结果已带完整云盘 `path`(前导 `/`);当用户想要该路径时,直接写出返回的 `path`——不要只持久化 `file_id`,也不要用另一次调用重新推导路径。
- **无命中** → 命令报错 `no ... matching "<name>" found`——这是有效的"未找到";不要回退到 `list-file` 枚举。
- **有歧义**(两个或更多同等好的匹配) → 结果为 `{"ambiguous": true, "candidates": [{file_id, path, type, size, updated_at}, ...]}`,无顶层 `file_id`。对于读取,用第一个候选;对于任何**副作用**(移动 / 重命名 / 复制 / 覆盖 / 删除 / 分享,或下载某个特定命中),展示候选并请用户选择——绝不对猜测采取行动。
- 当用户明确要求目录 / 文件夹时,加 `--type folder`(或 `file`)——它会剔除跨类型匹配。
- 已知**绝对**路径 → 改用 `--path`(见 `references/resolve-path.md`)。跨**用户所有空间**(多个 drive)的名称查找 → `search-file --drive-id-list`(`references/search-file.md`),因为 `resolve-path` 只接受单个 `--drive-id`。

### 列出目录

列出文件夹或云盘根的直接子项——"这个文件夹里有什么"、"这里有哪些子文件夹 / 图片",或收集 `file_id`:

根的子文件夹,仅名称(省 token)

aliyun pds list-file --drive-id <drive_id> --parent-file-id root --type folder --cli-query "items[].name"

已知绝对文件夹路径中的图片,名称 + id

aliyun pds list-file --drive-id <drive_id> --parent-path "/Photos/2026" --category image --cli-query "items[].{name:name,file_id:file_id}"


- `--parent-file-id`(`root` 或文件夹 ID)和 `--parent-path`(已知绝对文件夹路径)只能提供其中一个;`list-file` 内部解析路径,且**只列一层**。
- 用 `--type file|folder` 和/或 `--category image|video|audio|doc|zip|app|others` 过滤。
- 始终加 `--cli-query` 只投影你需要的字段(每个项都带冗长的 `action_list`——见下方投影规则)。
- **`list-file` vs `search-file`:** 当你已知文件夹时用 `list-file`(最省,一层)。要**递归 / 跨 drive** 查找或按内容 / 属性查找时用 `search-file`(`references/search-file.md`)。
- 分页(`--marker`/`next_marker`)、排序(`--order-by`/`--order-direction`)和完整标志表见 `references/file-management.md`。

### 下载文件

`download-to-local` 一次调用解析文件、获取签名 URL、下载并校验大小。`--path` / `--file-id` 只提供**其中一个**:

按云盘路径

aliyun pds download-to-local --drive-id <drive_id> --path "/Photos/2026/04/vacation.jpg" --save-to ./vacation.jpg

按 file_id

aliyun pds download-to-local --drive-id <drive_id> --file-id <file_id> --save-to ./vacation.jpg


- 只有**名称**?先找到 `file_id`(见"列出目录"或 search-file),然后按 `--file-id` 下载。
- 只需要 URL(不是字节)?用 `aliyun pds get-download-url --drive-id <id> --path "/absolute/file" --expire-sec 3600`(或已知时用 `--file-id <id>`)。
- 整个**文件夹 / 多个文件** → `references/archive-download.md`(zip)。指向文件夹的 `--path` 会被拒绝。

### 获取文件信息

`get-file` 接受 `--path` 和 `--file-id` 中恰好一个。当用户提供绝对云盘路径时优先用 `--path`;CLI 内部解析,因此不要先运行 `resolve-path`:

aliyun pds get-file --drive-id <drive_id> --path "/Photos/2026/04/vacation.jpg"

aliyun pds get-file --drive-id <drive_id> --file-id <file_id>


- `--path` 需要 `--drive-id`,且不能与 `--share-id` 组合。
- 已有的 `get-file` 选项如 `--fields`、`--url-expire-sec`、`--thumbnail-processes` 和 `--share-id` 仍可与 `--file-id` 一起使用。
- 用 `--cli-query` 只返回用户请求的元数据字段。
- **从 `file_id` 获取完整云盘路径(反向查找)→ 用 `resolve-path --file-id`,不是 `get-file`。** `get-file` 不返回可用的完整 `path`(其 `path` 为 null/相对),因此要将 `file_id` 转为其完整的 `/a/b/c.ext` 云盘路径,运行 `aliyun pds resolve-path --drive-id <id> --file-id <file_id>`——它一次调用返回完整 `path`。**不要**用重复的 `get-file` 调用(或 `list-file`)走父链并手工拼接文件夹名;那是在手搓 `resolve-path` 一次调用在服务端做的事。见 `references/resolve-path.md`。

### 上传本地文件

`upload-file` 一次调用完成 create → upload → complete(内部处理秒传和分片):

按 id 上传到文件夹

aliyun pds upload-file --drive-id <drive_id> --local-path ./report.pdf --parent-file-id <parent_file_id> --name report.pdf

上传到云盘路径(自动解析 / 创建文件夹)

aliyun pds upload-file --drive-id <drive_id> --local-path ./report.pdf --parent-path "/Docs/2026" --create-missing true


- 上传到**目录路径**(无论是否存在):在这一条命令中用 `--parent-path "/…" --create-missing true`——CLI 内部解析 / 创建文件夹。**不要先运行 `resolve-path`,不要解析其 JSON,也不要用 `python` 提取 `file_id`。** `--parent-path` 方式是主要且首选的方法——仅当 `--parent-path` 报告路径有歧义(例如重复的顶层目录名)时,才用 `--parent-file-id` 作为兜底。
- 默认父目录为 `root`。`--check-name-mode auto_rename|ignore|refuse` 控制名称冲突(仅新文件上传)。
- **覆盖**现有文件:传 `--file-id <id>`(或 `--path <cloud_path>`)而非父目录——它就地替换内容(新修订)。
- 完整参数表和边界情况 → `references/upload-file.md`。

可观测性

每条 aliyun pds 命令都必须携带一个内联 --user-agent 参数,标识本 Skill 和当前会话,以便调用可端到端追踪。内联参数是唯一支持的机制——不要使用已废弃的 aliyun configure ai-mode 命令(enable / set-user-agent / disable)。

UA 模板:

--user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id}
  • {SKILL_NAME} —— 本 Skill 的名称,固定字面量:alibabacloud-pds-intelligent-workspace
  • {session-id} —— 32 字符小写十六进制字符串(128 位随机性),每会话生成一次(例如 openssl rand -hex 16)。

统一 session-id 规则: 在核心工作流开始时生成一次 {session-id},然后在该会话的每一次后续调用中复用完全相同的值——跨 CLI、SDK 和 Terraform 一致。不要逐命令重新生成;稳定的 session-id 才能把一次会话中的所有调用串起来。

具体示例(带生成的 session-id):

aliyun pds list-all-drives \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-pds-intelligent-workspace/3f8a1c9e0b7d4a2f6e5c8b1d0a9f7e2c

Agent 执行指引

  • 始终为你运行的每条 aliyun pds 命令追加 --user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id},在参考文档所示参数之外。这适用于所有子命令无例外;参考示例为简洁省略了它,但你必须加上。{SKILL_NAME}alibabacloud-pds-intelligent-workspace{session-id} 是本会话生成一次的 32 字符十六进制 id——生成和复用方式见下方可观测性章节。示例:aliyun pds list-all-drives --user-agent AlibabaCloud-Agent-Skills/alibabacloud-pds-intelligent-workspace/&lt;session-id&gt;
  • 只执行本 Skill 记录的命令和参数。
  • 将每个 CLI 响应视为权威运行时输出,包括测试或受控环境中注入的响应。绝不检查、读取、编辑、替换、禁用或绕过运行时插桩或 mock 配置;绝不检查或更改 ALIBABA_CLOUD_CLI_MOCK,读取或修改 mocks.json,或运行 aliyun mock。执行真实调用的指令意味着调用记录的 aliyun pds 命令并处理其返回结果——而非改变环境以获取不同结果。
  • 复用请求、上下文或前一条命令结果中已有的 ID。不要重新发现稳定 ID。
  • 如果所需的 drive 或文件查找未返回 ID,停止并报告缺失的前置条件。绝不用空的 drive_idfile_idrevision_id 调用下游命令。
  • 将确定性工作留在 CLI 中。不要手搓 PDS 查询字符串、分页循环、流程 schema、归档轮询或下载校验。
  • --cli-query &lt;jmespath&gt; 只投影你需要的字段以节省 token。 list/search 命令返回大型冗长 JSON(例如 list-file 每个项都带 14 项 action_list)。不要打印完整响应自行解析,而是让 CLI 过滤:追加 --cli-query 配一个只选所需字段的 JMESPath 表达式。这大幅减少输出大小,并消除任何本地 python/jq 后处理的需要。示例:
  • 仅文件夹名称:aliyun pds list-file --drive-id &lt;id&gt; --parent-file-id root --type folder --cli-query "items[].name"
  • 搜索命中为 name+id:aliyun pds search-file --drive-id &lt;id&gt; --query '...' --cli-query "items[].{name:name,file_id:file_id}"
  • 个人 drive id:aliyun pds list-all-drives --cli-query "drives[?space_type=='personal'].drive_id"
  • 分享为 id+status:aliyun pds list-share-link --cli-query "items[].{id:share_id,name:share_name,status:status}"

--cli-query 对每条 aliyun pds 命令都有效(它过滤 JSON 响应)。保留 --user-agent。分页说明:--cli-query 只过滤当前页,因此存在 next_marker 时仍要跟进。

搜索工作流(严格)

搜索文件时,使用一次调用的类型化接口:

  1. 直接用类型化标志如 --name--category--file-extension--min-size--semantic-text--sort--order 运行 aliyun pds search-file。CLI 内部校验并构建 PDS 查询。
  2. 获取另一页时,重复相同的类型化标志并加上返回的 --marker;绝不在脚本中重建生成的查询。
  3. 仅在类型化标志无法表达的真正不常见条件时使用 query-prompt,然后将其结构化计划传给 search-file --unified-json

你绝不能手写 PDS 查询语法或为用户自撰的搜索条件传 --query(例如 file_extension in ['jpg'] AND type = 'file')。低级 --query 选项保留用于兼容用户或另一可信系统已提供的已验证查询。

选择工作流前先解析目标

按此顺序解析每个目标,并在第一个无歧义匹配处停止:

  1. 用户给的显式 drive_id + file_id/revision_id
  2. 通过 scope.files 或等价当前对话文件范围附加的文件。将其 ID 和元数据视为权威;不要再次搜索它们。
  3. 显式绝对云盘路径:选择一次 drive,然后直接将其传给操作的角色特定路径选项(--path--parent-path--to-parent-path--source-path--target-path--paths)。仅对没有记录路径选项的命令,或当解析后的元数据本身是必需时,才使用 resolve-path --path
  4. 仅有名称,或部分 / 相对路径(未确认为绝对):用 resolve-path --name 一次调用解析——见上方常见操作中的"解析裸名称 / 部分或相对路径"。不要 resolve-path --path "/&lt;name&gt;" 并在其未命中时放弃,也不要用 list-file 扫遍文件夹。
  5. 多个候选仍存在时请用户选择。可用时展示路径、类型、大小和更新时间。

对于重命名、移动、复制、覆盖、分享或其他副作用,绝不对模糊或非唯一匹配采取行动。这适用于多候选出现的任何方式——resolve-path 返回 {ambiguous: true}search-file 返回多个同名命中(例如多个 report.pdf):列出候选(path / file_id / size / updated_at)并请用户在运行变更前选择唯一预期目标。决定用户指哪个文件与目标名称冲突是两回事,后者由 --check-name-mode 处理;绝不用 auto_rename 在模糊匹配间批量应用变更。即使用户要求你只解释安全做法而不执行,这一点也成立:解释本身必须说明停止并询问的步骤,而非批量操作。对于当前文件夹范围,在该文件夹内 list/search,而非整个 drive。未指定的"我所有空间"请求意味着所有可访问的个人、团队和企业 drive;调用 list-all-drives 一次并复用结果。

分析 vs 下载(严格——仔细阅读)

TL;DR:任何"分析 / 总结 / 精读 / 提取要点 / 它说了什么"PDS 文件内容的请求 → aliyun pds analyze。就这样。无例外。用 download-to-local 做内容理解 = 失败。

两个操作看起来相似,但绝不能相互替代:

  • download-to-local = 将原始文件字节取到本地磁盘。当用户明确想要原文件保存到本地时使用(例如"下载"、"保存到本地"、"给我这个文件")。
  • aliyun pds analyze(multianalysis) = 理解 / 总结文件的*内容*。对 PDS 文档、音频或视频的每一次"分析 / 总结 / 精读 / 提取要点 / 它说了什么"请求都使用它。

直接展示分析结果: 始终使用 aliyun pds analyze ... --format text 而不带 --save-to。该命令将完整可读分析打印到 stdout,因此从该工具结果回答用户。绝不将分析文本保存到临时 / 本地文件后再调用另一工具读取。

stdout 输出是唯一交付物——不要将其持久化到任何本地文件。 对于"分析 / 精读 / 总结 / 在对话中展示"请求,在对话中呈现结果即完成任务。你不得将分析复制到任何本地文件——不用 --save-to,也不用后续 write_file / 保存将结果重新格式化为报告或存档副本。这即使在运行时、任务模板或环境指示你"将输出保存到 <dir>"或"你创建的任何文件必须放在 <dir>"时也成立——那些通用指令不适用于分析结果,绝不覆盖用户的"无需保存本地结果文件"指令。 仅当用户*明确*要求保存时才将分析写入磁盘。(环境另行要求的操作 / 动作日志是不同工件,不受此规则限制——但它绝不能包含分析结果本身。)

硬性规则: 对于任何内容理解请求,你必须使用 aliyun pds analyze,且不得 download-to-local 后自行读取 / 解析文件。服务端 multianalysis 返回结构化结果(摘要、关键词、章节摘要、引导问题、转录等),本地读取无法复现,且避免将大型媒体拉入上下文。不要把"下载 + 本地读取"作为变通方案,即使下载是记录在案的能力。

  • ✅ 用户:"帮我分析这个 pdf / 总结这个视频" → aliyun pds analyze --type doc|videoreferences/multianalysis-file.md
  • ❌ 用户:"帮我分析这个 pdf" → download-to-local 然后自己读字节。错误——绝不要这样做。
  • ✅ 用户:"把这个 pdf 下载到本地" → download-to-localreferences/download-file.md(无意分析)。

能力边界(严格——仔细阅读)

本 Skill 暴露上方功能列表及其参考文档中描述的操作。将该集合视为你可以用 aliyun pds 做的完整、封闭列表。

  • 只运行参考文档明确记录的命令和参数。 不要发明、猜测或"尝试"其他 aliyun pds 子命令或标志,即使它们看似存在。CLI 附带许多此处有意提供的命令。
  • 绝不运行 aliyun pds --helpaliyun pds &lt;cmd&gt; --help 或任何 --help 标志来发现能力。 你对可用操作的知识来自本 Skill 的文档。运行 --help 找未记录命令然后执行它们是对此边界的直接违反——即使命令"能用"。
  • 如果用户要求功能列表未覆盖的东西,不要临时拼凑变通方案。 属于范围外且必须拒绝的请求示例(不要尝试替代命令):以任何方式删除文件——永久 / 物理删除移入回收站均不支持;向其他用户或团队授予 / 授权文件或 drive 权限;将图像转换为 Word/PDF 或将文档转换为 PPT;编辑文档内容;从第三方站点下载媒体。清楚告知用户此操作不受 PDS Skill 支持,并停止——不要扫描 CLI 找替代方案。拒绝授权 / 权限授予请求(向其他用户或团队授予文件或 drive 权限)时,不要声称管理控制台——或任何其他渠道——可以执行它:你未验证过。只说明本 Skill 不支持,并停止。(这与用户*自己*操作遇到 403 不同,后者建议联系管理员是可以的。)

拒绝模板——按操作选择,输出确切措辞,然后停止:

  • 授权 / 权限授予。 精确输出这条终止性语句,不多不少:"此操作不在 PDS Skill 的支持范围内。此 skill 不支持向其他用户或团队授予文件或空间权限。" 不要追加任何"前往 PDS 管理控制台 / 使用其他权限管理工具"的尾缀或指向任何其他渠道。与下方删除模板不同,权限授予没有已验证的渠道,因此建议一个(即使管理控制台)也是违规。
  • 删除 / 回收站。 精确输出这条终止性语句:"此操作不在 PDS Skill 的支持范围内。此 skill 不支持删除文件或将文件移入回收站。如需删除,请到 PDS 控制台手动操作。"(此处的控制台提及专属于删除,不得复制到上方授权拒绝中。)
  • 其他不支持的操作。 输出这条终止性语句,将占位符替换为该特定不支持操作的一句话中文描述:"此操作不在 PDS Skill 的支持范围内。<不支持的操作类型>。"

然后立即停止。不要搜索替代命令,不要运行 --help,不要尝试未记录的子命令。

为什么这很重要:静默伸手去用未记录命令会产生未验证、可能破坏性的行为(例如不可逆的删除,或意外的权限授予)。留在记录在案的表面内可让每个操作可预测且安全。

核心概念

  • Domain:具有唯一 domain_id 的 PDS 实例,数据在 domain 之间完全隔离
  • User:domain 下的最终用户,有 user_id
  • Group:domain 下的团队组织,分为企业群组和团队群组
  • Drive:存储空间,可属于用户(个人空间)或团队(团队 / 企业空间)
  • File:空间下的文件或文件夹,有 file_id
  • Revision:文件的版本快照,有 revision_id。每个文件至少有一个修订。用 aliyun pds get-file --drive-id &lt;drive_id&gt; --path &lt;absolute_path&gt;--file-id &lt;file_id&gt; 从响应获取最新 revision_id(及图像尺寸)。视觉相似搜索和文档 / 视频分析需要;图像编辑可选(省略时使用最新)。

安装要求

步骤 1:验证 Aliyun CLI 版本
```bash
aliyun version # 要求 >= 3.3.16
```
若未安装或版本低于 3.3.16,参考 references/cli-installation-guide.md 安装或升级。
步骤 2:启用插件自动安装(CLI 版本满足后)
```bash
aliyun configure set --auto-plugin-install true
```
步骤 3:验证 PDS 插件版本
```bash
aliyun pds version # 要求 >= 0.7.7
```
若版本低于 0.7.7,运行:
```bash
aliyun plugin update
```

CLI 初始化(核心工作流前必须运行)

在核心工作流开始时、任何 CLI 调用之前,生成每会话 id 一次并在会话剩余时间复用它(统一 session-id 规则见可观测性章节):

每会话生成一次;对每次 CLI/SDK/Terraform 调用复用这个确切值

SESSION_ID=$(openssl rand -hex 16)


**[必须] 在每条命令上内联传递 User-Agent。** 为每次 `aliyun pds` 调用追加 `--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-pds-intelligent-workspace/${SESSION_ID}"`:

aliyun pds list-all-drives \

--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-pds-intelligent-workspace/${SESSION_ID}"


**没有**启用 / 禁用步骤,也没有单独的配置命令。内联 `--user-agent` 参数是唯一机制——**不要**运行 `aliyun configure ai-mode enable`、`aliyun configure ai-mode set-user-agent` 或 `aliyun configure ai-mode disable`;那些 `ai-mode` 命令已废弃。

---

鉴权配置

前置条件:必须配置阿里云凭证
安全规则:
- 禁止读取、输出或打印 AK/SK 值(例如 echo $ALIBABA_CLOUD_ACCESS_KEY_ID 是禁止的)
- 禁止要求用户在对话或命令行中直接输入 AK/SK
- 禁止使用 aliyun configure set 设置明文凭证
- 只允许使用 aliyun configure list 检查凭证状态
检查凭证配置:
```bash
aliyun configure list
```
确认输出显示有效 profile(AK、STS 或 OAuth 身份)。
如果不存在有效配置,先停止。
1. 从阿里云控制台获取凭证
2. 在本会话之外配置凭证(在终端运行 aliyun configure 或设置环境变量)
3. 配置完成后运行 aliyun configure list 验证

快速设置(仅当前置条件未满足时):

安装 Aliyun CLI(若未安装)

curl -fsSL --max-time 10 https://aliyuncli.alicdn.com/install.sh | bash

aliyun version # 确认 >= 3.3.16

启用插件自动安装

aliyun configure set --auto-plugin-install true

安装 Python 依赖(用于分片上传脚本)

pip3 install requests

PDS 特定配置

执行任何 PDS 操作前,必须先配置 domain_id、user_id 和鉴权类型 → 阅读 references/config.md

参考资料

参考文档路径
CLI 安装指南references/cli-installation-guide.md
RAM 权限策略references/ram-policies.md

错误处理

  1. 如果文件搜索规划失败,阅读 references/search-file.md;不要手工构建查询或扩大为暴力枚举。
  2. 403(无权限):告知用户缺少所需权限,并建议联系管理员授予相应权限。例外——记录在案的兜底优先于终止: 如果 403 命中一个有按类型 / 替代记录路径的操作,先尝试它,仅当兜底也失败时才报告权限问题。特别是 list-all-drives 上的 403 必须先回退到 list-my-drives + list-my-group-drive(见 references/drive.md),再下结论说用户无法访问其空间。
  3. OperationNotSupport(400):请求的功能未在此 domain 上启用。告知用户并建议联系 PDS 技术支持启用。
  4. InvalidParameter(400):参数格式错误。对照文档审查命令,修正参数格式并重试。不要臆造参数。
  5. 限流 / 超时:仅让 CLI 重试可安全重放的 read/list/poll 动作。对于 create/update/move/copy/share/process/archive 操作,模糊超时可能意味着服务端已提交变更;在任何重试前验证最终状态。
  6. 模糊结果:报告成功与否未知,尽量按确切 ID/path 核对,绝不声称成功或盲目重放变更。
  7. CLI 非零退出码且无 JSON body:报告 stderr。仅对只读命令重试一次;变更按上述核对。