介绍
文件存入 S3 后,名称和属性帮助团队找到正确文档。你将把财务和 HR 文档组织在同一存储桶中,检查财务报表,再只删除财务前缀,完整保留 HR 文档。
请先完成 在 S3 中存储和读取文件。这个全新 VM 已提供 CLI 连接和本地文档,不需要之前的资源或个人凭据。使用 Terminal 执行命令,并在上方的 AWS View比较存储的对象键、属性和内容。
认证考点
| 认证 | 考点 | 本实验练习 |
|---|---|---|
| Cloud Practitioner (CLF-C02) | 任务 3.6 | S3 对象键、前缀与对象元数据。 |
| Solutions Architect – Associate (SAA-C03) | 任务 3.1 | S3 对象键、前缀与对象元数据。 |
| Developer – Associate (DVA-C02) | 任务 1.3 | S3 对象键、前缀与对象元数据。 |
实验概览

选择对象键并上传团队文档
在本步骤中,你将在一个存储桶中使用有意义的对象键区分两个部门的文档。
本地目录在你的机器上保存文件;存储桶在 S3 中保存对象。使用 cd(更改目录)进入已准备好的工作目录:
cd /home/labex/project
提供的 documents 目录包含两个小型文本文件。cat 打印它们的内容,让你了解即将存储的数据:
cat documents/revenue.csv
month,revenue
2026-09,42000
CSV 文件用逗号分隔列。这里的两列是月份和收入;后面的每一行是一条记录。
cat documents/welcome.txt
Welcome to the reporting team.
使用 aws s3 mb(创建存储桶)创建桶。s3:// 标识存储位置,而不是本地路径:
aws s3 mb s3://labex-team-documents
命令报告 make_bucket: labex-team-documents。
财务对象键将为 finance/2026-09/revenue.csv。斜杠使名称易于分组,但 S3 不会创建文件系统目录:整个字符串是一个对象键。前缀 finance/ 将财务文档分组;更长的前缀 finance/2026-09/ 将范围缩小到一个月。
Content-Type 是描述文件媒体格式的标准元数据。text/csv 表示逗号分隔的文本。自定义元数据包含你自己的描述性键值对。这里的 department=finance 和 period=2026-09 描述报表,不会授予权限或改变内容。

aws s3 cp 将第一个路径复制到第二个路径。--content-type 显式设置格式。--metadata 接收用逗号分隔的 name=value 键值对。引号使元数据参数保持为一个整体。行尾的反斜杠让同一条命令继续到下一行:
aws s3 cp documents/revenue.csv s3://labex-team-documents/finance/2026-09/revenue.csv \
--content-type text/csv \
--metadata 'department=finance,period=2026-09'
上传消息包含目标对象键。为欢迎文档使用它自己的对象键和属性进行上传。text/plain 表示没有专门文档格式的普通文本:
aws s3 cp documents/welcome.txt s3://labex-team-documents/hr/welcome.txt \
--content-type text/plain \
--metadata 'department=hr'
使用 ls(列出)和 --recursive 显示整个桶中的完整对象键,而不是按类似文件夹的前缀分组:
aws s3 ls s3://labex-team-documents/ --recursive
两行分别以 finance/2026-09/revenue.csv 和 hr/welcome.txt 结尾;时间戳会有所不同。AWS View 显示同一个存储桶中的两个对象键。你通过名称组织了对象,无需为每个部门创建独立存储桶。
查看属性并读取报表
在本步骤中,你将选择一个部门的对象,查看元数据,并证明下载的报表与源文件一致。
aws s3api 提供单个 S3 API 操作。更高层的 aws s3 命令处理常见文件流程;两者操作相同的对象。list-objects-v2 列出对象记录。--bucket 指定容器,--prefix 将 S3 返回的对象键限定为以该字符串开头的键:
aws s3api list-objects-v2 --bucket labex-team-documents --prefix finance/
在 Contents 中找到 finance/2026-09/revenue.csv。响应中没有 HR 对象,因为 hr/welcome.txt 不以 finance/ 开头。前缀过滤名称,不过滤自定义元数据:仅有 department=finance 不会使名称不同的对象键进入这个结果。
head-object 读取对象属性,不下载正文。提供完整对象键,包括前缀:
aws s3api head-object --bucket labex-team-documents --key finance/2026-09/revenue.csv
响应包含设为 text/csv 的 ContentType、ContentLength(存储的字节数),以及包含 department 和 period 的 Metadata 对象。时间戳、ETag 等其他字段描述存储的对象。元数据与存储副本关联,不与原始本地文件关联。
在 AWS View 中,点击 finance/2026-09/revenue.csv。展开的卡片展示 Content-Type、自定义元数据和实际存储的 CSV 内容。将它们与 CLI 响应比较。

下载时,将 S3 URI 作为源,将新的本地文件名作为目标。目标名称不必与对象键相同:
aws s3 cp s3://labex-team-documents/finance/2026-09/revenue.csv retrieved-revenue.csv
查看读取到的内容:
cat retrieved-revenue.csv
它应显示与你之前查看的内容相同的两行 CSV。cmp 逐字节比较两个本地文件;匹配时没有输出。Shell 的 && 只在比较成功后显示消息:
cmp documents/revenue.csv retrieved-revenue.csv && echo 'Report content matches'
Report content matches
这证明读取保留了报表的字节内容。本地文件包含内容;需要查看存储在 S3 中的属性时,使用 head-object。
只删除财务前缀下的对象
在本步骤中,你将清除财务文档,同时保留 HR 文档。
共享存储桶可能包含无关工作。删除整个桶,或以桶根路径作为递归删除目标,会影响两个部门。应选择具体的 finance/ 前缀。末尾斜杠是前缀的一部分,可使 finance-archive.csv 等名称不在操作范围中。
aws s3 rm 删除对象。--recursive 将操作应用到全部匹配的对象键,--dryrun 列出计划操作,但不执行。先预览准确范围:
aws s3 rm s3://labex-team-documents/finance/ --recursive --dryrun
预演输出只包含 finance/2026-09/revenue.csv,不得包含 hr/welcome.txt。此时对象仍然存在。
移除 --dryrun,执行已检查的操作:
aws s3 rm s3://labex-team-documents/finance/ --recursive
输出确认财务对象键已删除。再次查询存储桶:
aws s3 ls s3://labex-team-documents/ --recursive
只剩下 hr/welcome.txt。在 AWS View 中展开剩余对象:欢迎消息和 department=hr 元数据未变。成功的列表查询和读取证明你删除了预定范围,同时保留了另一个部门的文档。
总结
你通过对象键、前缀、内容类型和自定义元数据组织对象,并逐字节验证取回的报表。dry run 帮助你审阅仅删除财务的范围;最终服务查询和 AWS View 确认 HR 文档及其属性完整保留。



