รายชื่อผู้รับจดหมาย S3tools / S3cmd:
S3cmd ต้องใช้ Python 2.6 หรือใหม่กว่า รองรับ Python 3+ โดยเริ่มจาก S3cmd เวอร์ชัน 2
ดูคำแนะนำในการติดตั้ง
S3cmd ( s3cmd
) คือเครื่องมือบรรทัดคำสั่งและไคลเอนต์ฟรีสำหรับการอัปโหลด เรียกค้น และจัดการข้อมูลใน Amazon S3 และผู้ให้บริการพื้นที่จัดเก็บข้อมูลบนคลาวด์อื่นๆ ที่ใช้โปรโตคอล S3 เช่น Google Cloud Storage หรือ DreamHost DreamObjects เหมาะที่สุดสำหรับผู้ใช้ระดับสูงที่คุ้นเคยกับโปรแกรมบรรทัดคำสั่ง นอกจากนี้ยังเหมาะอย่างยิ่งสำหรับสคริปต์แบบแบตช์และการสำรองข้อมูลอัตโนมัติไปยัง S3, ทริกเกอร์จาก cron ฯลฯ
S3cmd เขียนด้วยภาษา Python เป็นโครงการโอเพ่นซอร์สภายใต้ GNU Public License v2 (GPLv2) และฟรีสำหรับใช้ในเชิงพาณิชย์และส่วนตัว คุณจะต้องจ่ายเงินให้กับ Amazon เพื่อใช้พื้นที่เก็บข้อมูลเท่านั้น
มีการเพิ่มคุณสมบัติและตัวเลือกมากมายให้กับ S3cmd นับตั้งแต่เปิดตัวครั้งแรกในปี 2008.... เมื่อเร็ว ๆ นี้ เรามีตัวเลือกบรรทัดคำสั่งมากกว่า 60 รายการ ซึ่งรวมถึงการอัปโหลดแบบหลายส่วน การเข้ารหัส การสำรองข้อมูลส่วนเพิ่ม การซิงค์ s3, ACL และการจัดการข้อมูลเมตา, S3 ขนาดบัคเก็ต นโยบายบัคเก็ต และอื่นๆ อีกมากมาย!
Amazon S3 มอบบริการพื้นที่จัดเก็บข้อมูลที่สามารถเข้าถึงอินเทอร์เน็ตที่มีการจัดการ ซึ่งทุกคนสามารถจัดเก็บข้อมูลจำนวนเท่าใดก็ได้และเรียกข้อมูลกลับคืนมาอีกครั้งในภายหลัง
S3 เป็นบริการแบบชำระเงินที่ดำเนินการโดย Amazon ก่อนที่จะจัดเก็บสิ่งใดๆ ลงใน S3 คุณต้องสมัครบัญชี "AWS" (โดยที่ AWS = Amazon Web Services) เพื่อรับคู่ตัวระบุ: คีย์การเข้าถึงและคีย์ลับ คุณจะต้องมอบคีย์เหล่านี้ให้กับ S3cmd ลองคิดดูว่ามันเป็นชื่อผู้ใช้และรหัสผ่านสำหรับบัญชี S3 ของคุณ
ในขณะที่เขียนบทความนี้ ค่าใช้จ่ายในการใช้งาน S3 คือ (เป็น USD):
0.023 USD ต่อ GB ต่อเดือนของพื้นที่จัดเก็บข้อมูลที่ใช้
บวก
0.00 USD ต่อ GB - ข้อมูลทั้งหมดที่อัปโหลด
บวก
0.000 USD ต่อ GB - ดาวน์โหลดข้อมูล 1GB ต่อเดือนแรก 0.090 USD ต่อ GB - ดาวน์โหลดข้อมูลสูงสุด 10 TB ต่อเดือน 0.085 USD ต่อ GB - ดาวน์โหลดข้อมูล 40 TB ต่อเดือนถัดไป 0.070 USD ต่อ GB - ดาวน์โหลดข้อมูล 100 TB ต่อเดือนถัดไป 0.050 USD ต่อ GB - ข้อมูลที่ดาวน์โหลด / เดือน เกิน 150 TB
บวก
0.005 ดอลลาร์สหรัฐฯ ต่อคำขอ PUT หรือ COPY หรือ LIST 1,000 รายการ 0.004 ดอลลาร์สหรัฐฯ ต่อ 10,000 GET และคำขออื่นๆ ทั้งหมด
ตัวอย่างเช่น หากในวันที่ 1 มกราคม คุณอัปโหลดรูปภาพ 2GB ในรูปแบบ JPEG จากวันหยุดของคุณในนิวซีแลนด์ เมื่อถึงสิ้นเดือนมกราคม คุณจะถูกเรียกเก็บเงิน 0.05 ดอลลาร์สหรัฐฯ สำหรับการใช้พื้นที่เก็บข้อมูล 2GB เป็นเวลาหนึ่งเดือน 0.0 ดอลลาร์สหรัฐฯ สำหรับการอัปโหลดข้อมูล 2GB และ ไม่กี่เซ็นต์สำหรับการร้องขอ ซึ่งมีมูลค่ามากกว่า 0.06 ดอลลาร์เล็กน้อยสำหรับการสำรองข้อมูลรูปภาพวันหยุดอันมีค่าของคุณ
ในเดือนกุมภาพันธ์คุณไม่แตะต้องมัน ข้อมูลของคุณยังคงอยู่ในเซิร์ฟเวอร์ S3 ดังนั้นคุณจะต้องจ่าย 0.06 USD สำหรับสองกิกะไบต์ดังกล่าว แต่จะไม่มีการเรียกเก็บค่าบริการแม้แต่เซนต์เดียวสำหรับการถ่ายโอนใดๆ ซึ่งเท่ากับ 0.05 ดอลลาร์สหรัฐฯ เป็นค่าใช้จ่ายต่อเนื่องสำหรับการสำรองข้อมูลของคุณ ไม่เลวร้ายเกินไป
ในเดือนมีนาคม คุณอนุญาตให้เข้าถึงการอ่านรูปภาพบางส่วนของคุณโดยไม่เปิดเผยตัวตน และเพื่อนของคุณดาวน์โหลดรูปภาพเหล่านั้นได้ 1,500MB เนื่องจากคุณเป็นเจ้าของไฟล์ คุณจะต้องรับผิดชอบค่าใช้จ่ายที่เกิดขึ้น นั่นหมายความว่า ณ สิ้นเดือนมีนาคม คุณจะถูกเรียกเก็บเงิน 0.05 ดอลลาร์สำหรับพื้นที่เก็บข้อมูล บวก 0.045 ดอลลาร์สำหรับปริมาณการดาวน์โหลดที่สร้างโดยเพื่อนของคุณ
ไม่มีสัญญารายเดือนขั้นต่ำหรือค่าธรรมเนียมการติดตั้ง สิ่งที่คุณใช้คือสิ่งที่คุณจ่ายไป ในตอนแรกบิลของฉันเคยเป็นประมาณ 0.03 เหรียญสหรัฐหรือไม่มีเลย
นั่นคือรูปแบบการกำหนดราคาของ Amazon S3 โดยสรุป ตรวจสอบหน้าแรกของ Amazon S3 เพื่อดูรายละเอียดเพิ่มเติม
ไม่จำเป็นต้องบอกว่าเงินทั้งหมดนี้ถูกเรียกเก็บเงินโดย Amazon เอง เห็นได้ชัดว่าไม่มีการจ่ายเงินสำหรับการใช้ S3cmd :-)
ไฟล์ที่จัดเก็บไว้ใน S3 เรียกว่า "อ็อบเจ็กต์" และชื่ออย่างเป็นทางการว่า "คีย์" เนื่องจากบางครั้งสิ่งนี้อาจทำให้ผู้ใช้สับสน เราจึงมักเรียกออบเจ็กต์ว่า "ไฟล์" หรือ "ไฟล์ระยะไกล" แต่ละอ็อบเจ็กต์เป็นของ "ที่เก็บข้อมูล" เดียวเท่านั้น
เพื่ออธิบายอ็อบเจ็กต์ในพื้นที่จัดเก็บข้อมูล S3 เราได้คิดค้นสคีมาคล้าย URI ในรูปแบบต่อไปนี้:
s3://BUCKET
หรือ
s3://BUCKET/OBJECT
ที่เก็บข้อมูลเป็นเหมือนไดเร็กทอรีหรือโฟลเดอร์ที่มีข้อจำกัดบางประการ:
เป็นความคิดที่ดีที่จะใช้ชื่อบัคเก็ตที่เข้ากันได้กับ DNS นั่นหมายความว่าคุณไม่ควรใช้อักขระตัวพิมพ์ใหญ่ แม้ว่าไม่จำเป็นต้องปฏิบัติตาม DNS อย่างเคร่งครัด คุณลักษณะบางอย่างที่อธิบายไว้ด้านล่างอาจไม่พร้อมใช้งานสำหรับบัคเก็ตที่มีชื่อที่เข้ากันไม่ได้กับ DNS อีกขั้นหนึ่งคือการใช้ชื่อโดเมนแบบเต็ม (FQDN) สำหรับบัคเก็ต ซึ่งมีประโยชน์มากกว่านั้นอีก
ค้นหา "โฮสต์เสมือน" ในภายหลังในข้อความนี้เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับบัคเก็ตที่มีชื่อ FQDN
ต่างจากที่เก็บข้อมูลตรงที่แทบจะไม่มีข้อจำกัดเกี่ยวกับชื่อออบเจ็กต์ สิ่งเหล่านี้อาจเป็นสตริง UTF-8 ใดก็ได้ที่มีความยาวสูงสุด 1,024 ไบต์ สิ่งที่น่าสนใจคือชื่อออบเจ็กต์สามารถมีอักขระเครื่องหมายทับ (/) ได้ ดังนั้น a my/funny/picture.jpg
จึงเป็นชื่อออบเจ็กต์ที่ถูกต้อง โปรดทราบว่าไม่มีไดเร็กทอรีหรือที่เก็บข้อมูลที่เรียกว่า my
และ funny
- จริงๆ แล้วมันเป็นชื่อออบเจ็กต์เดียวที่เรียกว่า my/funny/picture.jpg
และ S3 ไม่สนใจเลยว่าจะ ดูเหมือน โครงสร้างไดเร็กทอรี
URI แบบเต็มของรูปภาพดังกล่าวอาจเป็นได้ เช่น:
s3://my-bucket/my/funny/picture.jpg
ไฟล์ที่จัดเก็บไว้ใน S3 อาจเป็นไฟล์ส่วนตัวหรือสาธารณะก็ได้ เฉพาะผู้ใช้ที่อัปโหลดเท่านั้นที่สามารถอ่านไฟล์ส่วนตัวได้ ในขณะที่ไฟล์สาธารณะสามารถอ่านได้โดยทุกคน นอกจากนี้ ยังสามารถเข้าถึงไฟล์สาธารณะได้โดยใช้โปรโตคอล HTTP ไม่ใช่แค่ใช้ s3cmd
หรือเครื่องมือที่คล้ายกันเท่านั้น
ACL (รายการควบคุมการเข้าถึง) ของไฟล์สามารถตั้งค่าได้ในขณะที่อัพโหลดโดยใช้ตัวเลือก --acl-public
หรือ --acl-private
พร้อมด้วยคำสั่ง s3cmd put
หรือ s3cmd sync
(ดูด้านล่าง)
อีกทางหนึ่งสามารถแก้ไข ACL สำหรับไฟล์ระยะไกลที่มีอยู่ด้วยคำสั่ง s3cmd setacl --acl-public
(หรือ --acl-private
)
ไปที่ https://aws.amazon.com/s3 คลิกปุ่ม "สมัครใช้บริการเว็บ" ในคอลัมน์ด้านขวาและดำเนินการลงทะเบียน คุณจะต้องระบุรายละเอียดบัตรเครดิตของคุณเพื่อให้ Amazon เรียกเก็บเงินจากคุณสำหรับการใช้งาน S3 ในตอนท้ายคุณควรมีรหัสการเข้าถึงและรหัสลับ
หากคุณตั้งค่าผู้ใช้ IAM แยกต่างหาก รหัสการเข้าถึงของผู้ใช้นั้นจะต้องมีสิทธิ์ดังต่อไปนี้เป็นอย่างน้อยจึงจะดำเนินการใดๆ ได้:
นโยบายตัวอย่างอื่นๆ สามารถดูได้ที่ https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html
s3cmd --configure
คุณจะถูกถามถึงสองคีย์ - คัดลอกและวางจากอีเมลยืนยันหรือจากหน้าบัญชี Amazon ของคุณ โปรดใช้ความระมัดระวังในการคัดลอก! ต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และต้องป้อนให้ถูกต้อง ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาดเกี่ยวกับลายเซ็นที่ไม่ถูกต้องหรือคล้ายกันต่อไป
อย่าลืมเพิ่มสิทธิ์ s3:ListAllMyBuckets ให้กับคีย์ ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาด AccessDenied ขณะทดสอบการเข้าถึง
s3cmd ls
เพื่อแสดงรายการที่เก็บข้อมูลทั้งหมดของคุณเมื่อคุณเพิ่งเริ่มใช้ S3 ขณะนี้ยังไม่มีบัคเก็ตที่คุณเป็นเจ้าของ ดังนั้นผลลัพธ์จะว่างเปล่า
s3cmd mb s3://my-new-bucket-name
ตามที่กล่าวไว้ข้างต้น ชื่อบัคเก็ตจะต้องไม่ซ้ำกันสำหรับผู้ใช้ S3 ทั้งหมด นั่นหมายความว่าชื่อง่ายๆ เช่น "test" หรือ "asdf" ถูกใช้ไปแล้ว และคุณต้องสร้างชื่อที่แปลกใหม่กว่านี้ เพื่อสาธิตคุณสมบัติให้ได้มากที่สุด มาสร้างบัคเก็ตชื่อ FQDN s3://public.s3tools.org
:
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
ตอนนี้คุณควรเห็นที่เก็บข้อมูลที่คุณสร้างขึ้นใหม่:
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
มันว่างเปล่าจริงๆ
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml
some-file.xml -> s3://public.s3tools.org/somefile.xml [1 of 1]
123456 of 123456 100% in 2s 51.75 kB/s done
อัปโหลดแผนผังสองไดเรกทอรีลงใน 'ไดเรกทอรี' เสมือนของที่เก็บข้อมูล:
$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/
File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]
อย่างที่คุณเห็นเราไม่จำเป็นต้องสร้าง /somewhere
'directory' อันที่จริงมันเป็นเพียงคำนำหน้าชื่อไฟล์ ไม่ใช่ไดเร็กทอรีจริง และไม่จำเป็นต้องสร้างไว้ล่วงหน้าแต่อย่างใด
แทนที่จะใช้ put
กับตัวเลือก --recursive
คุณสามารถใช้คำสั่ง sync
ได้:
$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
$ s3cmd ls s3://public.s3tools.org
DIR s3://public.s3tools.org/somewhere/
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
ใช้ --recursive (หรือ -r) เพื่อแสดงรายการไฟล์ระยะไกลทั้งหมด:
$ s3cmd ls --recursive s3://public.s3tools.org
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
2009-02-10 05:13 18 s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13 16 s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13 11 s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir2/file2-2.txt
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml
s3://public.s3tools.org/somefile.xml -> some-file-2.xml [1 of 1]
123456 of 123456 100% in 3s 35.75 kB/s done
$ md5sum some-file.xml some-file-2.xml
39bcb6992e461b269b95b3bda303addf some-file.xml
39bcb6992e461b269b95b3bda303addf some-file-2.xml
เช็คซัมของไฟล์ต้นฉบับจะตรงกับไฟล์ที่ดึงมา ดูเหมือนว่าจะได้ผล :-)
หากต้องการดึงข้อมูล 'แผนผังไดเรกทอรี' ทั้งหมดจาก S3 ให้ใช้การรับแบบเรียกซ้ำ:
$ s3cmd get --recursive s3://public.s3tools.org/somewhere
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'
เนื่องจากไม่ได้ระบุไดเร็กทอรีปลายทาง s3cmd
จึงบันทึกโครงสร้างไดเร็กทอรีในไดเร็กทอรีการทำงานปัจจุบัน ('.')
มีความแตกต่างที่สำคัญระหว่าง:
get s3://public.s3tools.org/somewhere
และ
get s3://public.s3tools.org/somewhere/
(สังเกตเครื่องหมายทับต่อท้าย)
s3cmd
จะใช้ส่วนเส้นทางสุดท้ายเสมอ เช่น คำหลังเครื่องหมายทับสุดท้าย ในการตั้งชื่อไฟล์
ในกรณีของ s3://.../somewhere
ส่วนเส้นทางสุดท้ายคือ 'บางแห่ง' ดังนั้นการเรียกซ้ำจะตั้งชื่อไฟล์ในเครื่องเป็นที่ไหนสักแห่ง/dir1, ที่ไหนสักแห่ง/dir2 เป็นต้น
ในทางกลับกันใน s3://.../somewhere/
ส่วนเส้นทางสุดท้ายว่างเปล่าและ s3cmd จะสร้างเฉพาะ 'dir1' และ 'dir2' โดยไม่มีคำนำหน้า 'somewhere/':
$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'
ดู? มันเป็น ~/dir1
และไม่ใช่ ~/somewhere/dir1
เหมือนในตัวอย่างก่อนหน้านี้
ลบทุกอย่างภายใต้ s3://public.s3tools.org/somewhere/
$ s3cmd del --recursive s3://public.s3tools.org/somewhere/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...
ตอนนี้ลองลบที่เก็บข้อมูลออก:
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
อุ๊ย s3://public.s3tools.org/somefile.xml
เราลืมไปแล้ว เราสามารถบังคับให้ลบที่ฝากข้อมูลได้:
$ s3cmd rb --force s3://public.s3tools.org/
WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed
การใช้งานขั้นพื้นฐานนั้นง่ายดายอย่างที่อธิบายไว้ในส่วนก่อนหน้า
คุณสามารถเพิ่มระดับการใช้คำฟุ่มเฟือยได้ด้วยตัวเลือก -v
และหากคุณอยากรู้จริงๆ ว่าโปรแกรมทำอะไรภายใต้ฝากระโปรง ให้รันด้วย -d
เพื่อดูเอาต์พุต 'การดีบัก' ทั้งหมด
หลังจากกำหนดค่าด้วย --configure
ตัวเลือกที่มีอยู่ทั้งหมดจะถูกแยกลงในไฟล์ ~/.s3cfg
ของคุณ เป็นไฟล์ข้อความที่พร้อมให้แก้ไขในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ
คำสั่งถ่ายโอน (put, get, cp, mv และ sync) ถ่ายโอนต่อไปแม้ว่าอ็อบเจ็กต์จะล้มเหลวก็ตาม หากเกิดความล้มเหลว ความล้มเหลวจะถูกส่งออกไปยัง stderr และสถานะการออกจะเป็น EX_PARTIAL (2) หากระบุตัวเลือก --stop-on-error
หรือตัวเลือกการกำหนดค่า stop_on_error เป็นจริง การถ่ายโอนจะหยุดและรหัสข้อผิดพลาดที่เหมาะสมจะถูกส่งกลับ
สำหรับข้อมูลเพิ่มเติม โปรดดูที่หน้าแรกของ S3cmd / S3tools
ลิขสิทธิ์ (C) 2007-2023 ซอฟต์แวร์ TGRMN (https://www.tgrmn.com), Sodria SAS (https://www.sodria.com/) และผู้มีส่วนร่วม
โปรแกรมนี้เป็นซอฟต์แวร์ฟรี คุณสามารถแจกจ่ายซ้ำและ/หรือแก้ไขได้ภายใต้เงื่อนไขของ GNU General Public License ตามที่เผยแพร่โดย Free Software Foundation เวอร์ชัน 2 ของใบอนุญาต หรือ (ตามตัวเลือกของคุณ) เวอร์ชันที่ใหม่กว่า
โปรแกรมนี้เผยแพร่ด้วยความหวังว่าจะมีประโยชน์ แต่ไม่มีการรับประกันใดๆ โดยไม่มีการรับประกันโดยนัยถึงความสามารถในการค้าขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูใบอนุญาตสาธารณะทั่วไปของ GNU สำหรับรายละเอียดเพิ่มเติม