القوائم البريدية S3tools / S3cmd:
يتطلب S3cmd إصدار Python 2.6 أو أحدث. يتم دعم Python 3+ أيضًا بدءًا من الإصدار 2 من S3cmd.
انظر تعليمات التثبيت.
S3cmd ( s3cmd
) هي أداة مجانية لسطر الأوامر وعميل لتحميل البيانات واستردادها وإدارتها في Amazon S3 وموفري خدمات التخزين السحابي الآخرين الذين يستخدمون بروتوكول S3، مثل Google Cloud Storage أو DreamHost DreamObjects. إنه مناسب تمامًا للمستخدمين المتميزين الذين هم على دراية ببرامج سطر الأوامر. كما أنه مثالي للبرامج النصية المجمعة والنسخ الاحتياطي الآلي إلى S3، الذي يتم تشغيله من cron، وما إلى ذلك.
S3cmd مكتوب بلغة بايثون. إنه مشروع مفتوح المصدر متاح بموجب ترخيص GNU العام الإصدار 2 (GPLv2) وهو مجاني للاستخدام التجاري والخاص. سيكون عليك فقط أن تدفع لشركة Amazon مقابل استخدام مساحة التخزين الخاصة بها.
تمت إضافة الكثير من الميزات والخيارات إلى S3cmd، منذ إصداره الأول في عام 2008.... لقد أحصينا مؤخرًا أكثر من 60 خيارًا لسطر الأوامر، بما في ذلك التحميلات متعددة الأجزاء، والتشفير، والنسخ الاحتياطي المتزايد، ومزامنة s3، وإدارة ACL والبيانات الوصفية، وS3 حجم الجرافة وسياسات الجرافة والمزيد!
يوفر Amazon S3 خدمة تخزين مُدارة يمكن الوصول إليها عبر الإنترنت حيث يمكن لأي شخص تخزين أي كمية من البيانات واسترجاعها لاحقًا مرة أخرى.
S3 هي خدمة مدفوعة تديرها أمازون. قبل تخزين أي شيء في S3، يجب عليك التسجيل للحصول على حساب "AWS" (حيث AWS = Amazon Web Services) للحصول على زوج من المعرفات: Access Key وSecret Key. سوف تحتاج إلى إعطاء هذه المفاتيح إلى S3cmd. فكر فيها كما لو كانت اسم مستخدم وكلمة مرور لحساب S3 الخاص بك.
في وقت كتابة هذه السطور، كانت تكاليف استخدام S3 (بالدولار الأمريكي):
0.023 USD لكل جيجابايت شهريًا من مساحة التخزين المستخدمة
زائد
0.00 USD لكل جيجابايت - تم تحميل جميع البيانات
زائد
0.000 USD لكل جيجابايت - تنزيل بيانات أول 1 جيجابايت / شهر 0.090 USD لكل جيجابايت - تنزيل ما يصل إلى 10 تيرابايت / شهر من البيانات 0.085 USD لكل جيجابايت - تنزيل بيانات 40 تيرابايت التالية / شهر 0.070 USD لكل جيجابايت - تنزيل بيانات 100 تيرابايت التالية / شهر 0.050 USD لكل جيجابايت - تنزيل البيانات / شهر أكثر من 150 تيرابايت
زائد
0.005 USD لكل 1000 طلب PUT أو COPY أو LIST 0.004 USD لكل 10000 طلب GET وجميع الطلبات الأخرى
على سبيل المثال، إذا قمت في الأول من كانون الثاني (يناير) بتحميل 2 غيغابايت من الصور بتنسيق JPEG من عطلتك في نيوزيلندا، ففي نهاية كانون الثاني (يناير)، سيتم محاسبتك بمبلغ 0.05 دولار أمريكي مقابل استخدام مساحة تخزين تبلغ 2 غيغابايت لمدة شهر، و0.0 دولار أمريكي لتحميل 2 غيغابايت من البيانات، ورسوم قدرها 0.0 دولار أمريكي مقابل تحميل 2 غيغابايت من البيانات. سنتات قليلة للطلبات. يصل ذلك إلى ما يزيد قليلاً عن 0.06 دولارًا أمريكيًا للحصول على نسخة احتياطية كاملة لصور عطلتك الثمينة.
في فبراير لا تلمسه. لا تزال بياناتك موجودة على خوادم S3، لذا تدفع 0.06 دولارًا أمريكيًا مقابل هاتين الجيجابايت، ولكن لن يتم تحصيل سنت واحد مقابل أي عملية نقل. يصل ذلك إلى 0.05 دولار كتكلفة مستمرة للنسخ الاحتياطي. ليست سيئة للغاية.
في شهر مارس، سمحت بوصول مجهول للقراءة إلى بعض صورك وقام أصدقاؤك بتنزيل 1500 ميجابايت منها، على سبيل المثال. وبما أن الملفات مملوكة لك، فأنت مسؤول عن التكاليف المتكبدة. وهذا يعني أنه في نهاية شهر مارس، سيتم محاسبتك بمبلغ 0.05 دولارًا أمريكيًا للتخزين بالإضافة إلى 0.045 دولارًا أمريكيًا مقابل حركة التنزيل التي يولدها أصدقاؤك.
لا يوجد حد أدنى للعقد الشهري أو رسوم الإعداد. ما تستخدمه هو ما تدفع ثمنه. في البداية كانت فاتورتي تبلغ 0.03 دولارًا أمريكيًا أو حتى لا شيء.
هذا هو نموذج التسعير الخاص بـ Amazon S3 باختصار. راجع الصفحة الرئيسية لـ Amazon S3 لمزيد من التفاصيل.
وغني عن القول أن كل هذه الأموال يتم تحصيلها من قبل أمازون نفسها، فمن الواضح أنه لا يوجد أي دفع مقابل استخدام S3cmd :-)
تسمى الملفات المخزنة في S3 "كائنات" وتسمى أسماؤها رسميًا "مفاتيح". وبما أن هذا قد يكون مربكًا للمستخدمين في بعض الأحيان، فغالبًا ما نشير إلى الكائنات باسم "ملفات" أو "ملفات بعيدة". ينتمي كل كائن إلى "دلو" واحد بالضبط.
لوصف الكائنات الموجودة في وحدة تخزين S3، قمنا باختراع مخطط يشبه URI بالشكل التالي:
s3://BUCKET
أو
s3://BUCKET/OBJECT
تشبه الجرافات الدلائل أو المجلدات مع بعض القيود:
إنها لفكرة جيدة استخدام أسماء المستودعات المتوافقة مع DNS. وهذا يعني على سبيل المثال أنه لا ينبغي عليك استخدام الأحرف الكبيرة. على الرغم من أن الامتثال لنظام DNS ليس مطلوبًا بشكل صارم، إلا أن بعض الميزات الموضحة أدناه غير متوفرة للمجموعات المسماة غير المتوافقة مع DNS. هناك خطوة أخرى تتمثل في استخدام اسم المجال المؤهل بالكامل (FQDN) لمجموعة البيانات - والتي تتمتع بفوائد أكثر.
ابحث عن "المضيفون الظاهريون" لاحقًا في هذا النص للحصول على مزيد من التفاصيل بخصوص مجموعات FQDN المسماة.
على عكس الدلاء، لا توجد أي قيود تقريبًا على أسماء الكائنات. يمكن أن تكون هذه أي سلاسل UTF-8 يصل طولها إلى 1024 بايت. ومن المثير للاهتمام أن اسم الكائن يمكن أن يحتوي على حرف مائل (/) وبالتالي فإن my/funny/picture.jpg
هو اسم كائن صالح. لاحظ أنه لا توجد أدلة أو مجموعات تسمى my
and 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، وانقر على زر "الاشتراك في خدمة الويب" في العمود الأيمن وتابع عملية التسجيل. سيتعين عليك تقديم تفاصيل بطاقتك الائتمانية حتى تتمكن أمازون من تحصيل رسوم منك مقابل استخدام خدمة S3. في النهاية يجب أن يكون لديك مفاتيح الوصول والمفاتيح السرية.
إذا قمت بإعداد مستخدم IAM منفصل، فيجب أن يتمتع مفتاح الوصول الخاص بهذا المستخدم بالأذونات التالية على الأقل للقيام بأي شيء:
يمكن العثور على أمثلة أخرى للسياسات على https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html
s3cmd --configure
سيُطلب منك المفتاحين - انسخهما وألصقهما من رسالة التأكيد الإلكترونية أو من صفحة حساب أمازون الخاصة بك. كن حذرا عند نسخها! فهي حساسة لحالة الأحرف ويجب إدخالها بدقة وإلا فسوف تستمر في تلقي أخطاء حول التوقيعات غير الصالحة أو ما شابه ذلك.
تذكر إضافة أذونات 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
. في الواقع، إنها مجرد بادئة اسم ملف، وليست دليلاً حقيقيًا ولا يلزم إنشاؤها بأي شكل من الأشكال مسبقًا.
بدلًا من استخدام 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
يكون جزء المسار الأخير هو "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/) والمساهمين
هذا البرنامج هو برنامج مجاني. يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة؛ إما الإصدار 2 من الترخيص، أو (حسب اختيارك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ دون حتى الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العامة لمزيد من التفاصيل.