S3tools / S3cmd-Mailinglisten:
S3cmd erfordert Python 2.6 oder neuer. Python 3+ wird ab S3cmd Version 2 ebenfalls unterstützt.
Siehe Installationsanleitung.
S3cmd ( s3cmd
) ist ein kostenloses Befehlszeilentool und Client zum Hochladen, Abrufen und Verwalten von Daten in Amazon S3 und anderen Cloud-Speicherdienstanbietern, die das S3-Protokoll verwenden, wie z. B. Google Cloud Storage oder DreamHost DreamObjects. Es eignet sich am besten für Power-User, die mit Befehlszeilenprogrammen vertraut sind. Es ist auch ideal für Batch-Skripte und automatisierte Backups auf S3, ausgelöst über Cron usw.
S3cmd ist in Python geschrieben. Es handelt sich um ein Open-Source-Projekt, das unter der GNU Public License v2 (GPLv2) verfügbar ist und sowohl für die kommerzielle als auch private Nutzung kostenlos ist. Sie müssen Amazon lediglich für die Nutzung des Speicherplatzes bezahlen.
Seit der allerersten Veröffentlichung im Jahr 2008 wurden S3cmd um viele Funktionen und Optionen erweitert. Kürzlich haben wir mehr als 60 Befehlszeilenoptionen gezählt, darunter mehrteilige Uploads, Verschlüsselung, inkrementelle Sicherung, S3-Synchronisierung, ACL- und Metadatenverwaltung, S3 Bucket-Größe, Bucket-Richtlinien und mehr!
Amazon S3 bietet einen verwalteten, über das Internet zugänglichen Speicherdienst, bei dem jeder beliebige Datenmengen speichern und später wieder abrufen kann.
S3 ist ein kostenpflichtiger Dienst von Amazon. Bevor Sie etwas in S3 speichern, müssen Sie sich für ein „AWS“-Konto anmelden (wobei AWS = Amazon Web Services), um ein Paar von Identifikatoren zu erhalten: Zugriffsschlüssel und geheimer Schlüssel. Sie müssen diese Schlüssel an S3cmd weitergeben. Betrachten Sie sie als einen Benutzernamen und ein Passwort für Ihr S3-Konto.
Zum Zeitpunkt des Verfassens dieses Artikels betragen die Kosten für die Nutzung von S3 (in USD):
0,023 $ pro GB und Monat genutztem Speicherplatz
Plus
0,00 $ pro GB – alle hochgeladenen Daten
Plus
0,000 $ pro GB – die ersten 1 GB/Monat heruntergeladene Daten 0,090 $ pro GB – bis zu 10 TB/Monat heruntergeladene Daten 0,085 $ pro GB – die nächsten 40 TB/Monat heruntergeladene Daten 0,070 $ pro GB – die nächsten 100 TB/Monat heruntergeladene Daten 0,050 $ pro GB – heruntergeladene Daten / Monat über 150 TB
Plus
0,005 $ pro 1.000 PUT-, COPY- oder LIST-Anfragen. 0,004 $ pro 10.000 GET- und alle anderen Anfragen
Wenn Sie beispielsweise am 1. Januar 2 GB Fotos im JPEG-Format von Ihrem Urlaub in Neuseeland hochladen, werden Ihnen Ende Januar 0,05 $ für die Nutzung von 2 GB Speicherplatz für einen Monat, 0,0 $ für das Hochladen von 2 GB Daten und a berechnet ein paar Cent für Anfragen. Das sind etwas mehr als 0,06 $ für eine vollständige Sicherung Ihrer wertvollen Urlaubsbilder.
Im Februar rührt man es nicht an. Ihre Daten liegen weiterhin auf S3-Servern, sodass Sie für diese zwei Gigabyte 0,06 US-Dollar zahlen, für die Übertragung wird jedoch kein einziger Cent berechnet. Die laufenden Kosten für Ihr Backup belaufen sich auf 0,05 $. Nicht so schlimm.
Im März gewähren Sie anonymen Lesezugriff auf einige Ihrer Bilder und Ihre Freunde laden beispielsweise 1500 MB davon herunter. Da die Dateien Ihr Eigentum sind, sind Sie für die anfallenden Kosten verantwortlich. Das bedeutet, dass Ihnen Ende März 0,05 $ für den Speicherplatz plus 0,045 $ für den von Ihren Freunden generierten Download-Verkehr berechnet werden.
Es gibt keinen monatlichen Mindestvertrag oder eine Einrichtungsgebühr. Was Sie nutzen, ist das, wofür Sie bezahlen. Am Anfang betrug meine Rechnung 0,03 US-Dollar oder sogar Null.
Das ist das Preismodell von Amazon S3 in aller Kürze. Weitere Informationen finden Sie auf der Amazon S3-Homepage.
Es versteht sich von selbst, dass all diese Kosten von Amazon selbst erhoben werden, es gibt offensichtlich keine Bezahlung für die Nutzung von S3cmd :-)
In S3 gespeicherte Dateien werden „Objekte“ genannt und ihre Namen werden offiziell „Schlüssel“ genannt. Da dies für die Benutzer manchmal verwirrend ist, bezeichnen wir die Objekte oft als „Dateien“ oder „Remote-Dateien“. Jedes Objekt gehört zu genau einem „Bucket“.
Um Objekte im S3-Speicher zu beschreiben, haben wir ein URI-ähnliches Schema in der folgenden Form erfunden:
s3://BUCKET
oder
s3://BUCKET/OBJECT
Buckets ähneln Verzeichnissen oder Ordnern mit einigen Einschränkungen:
Es empfiehlt sich, DNS-kompatible Bucket-Namen zu verwenden. Das bedeutet zum Beispiel, dass Sie keine Großbuchstaben verwenden sollten. Obwohl DNS-Konformität nicht unbedingt erforderlich ist, sind einige der unten beschriebenen Funktionen für DNS-inkompatible benannte Buckets nicht verfügbar. Ein weiterer Schritt weiter ist die Verwendung eines vollqualifizierten Domänennamens (FQDN) für einen Bucket – das hat noch mehr Vorteile.
Suchen Sie später in diesem Text nach „Virtuelle Hosts“, um weitere Informationen zu FQDN-Buckets mit Namen zu erhalten.
Anders als bei Buckets gibt es nahezu keine Einschränkungen für Objektnamen. Dies können beliebige UTF-8-Strings mit einer Länge von bis zu 1024 Byte sein. Interessanterweise kann der Objektname einen Schrägstrich (/) enthalten, sodass my/funny/picture.jpg
ein gültiger Objektname ist. Beachten Sie, dass es weder Verzeichnisse noch Buckets mit den Namen my
und funny
gibt – es handelt sich tatsächlich um einen einzelnen Objektnamen mit dem Namen my/funny/picture.jpg
und S3 kümmert es überhaupt nicht, dass es wie eine Verzeichnisstruktur aussieht .
Der vollständige URI eines solchen Bildes könnte beispielsweise lauten:
s3://my-bucket/my/funny/picture.jpg
Die in S3 gespeicherten Dateien können entweder privat oder öffentlich sein. Die privaten können nur von dem Benutzer gelesen werden, der sie hochgeladen hat, während die öffentlichen von jedem gelesen werden können. Darüber hinaus kann auf die öffentlichen Dateien über das HTTP-Protokoll zugegriffen werden, nicht nur über s3cmd
oder ein ähnliches Tool.
Die ACL (Zugriffskontrollliste) einer Datei kann zum Zeitpunkt des Hochladens mithilfe der Optionen --acl-public
oder --acl-private
mit den Befehlen s3cmd put
oder s3cmd sync
festgelegt werden (siehe unten).
Alternativ kann die ACL für vorhandene Remote-Dateien mit dem Befehl s3cmd setacl --acl-public
(oder --acl-private
) geändert werden.
Gehen Sie zu https://aws.amazon.com/s3, klicken Sie in der rechten Spalte auf die Schaltfläche „Für Webservice anmelden“ und führen Sie die Registrierung durch. Sie müssen Ihre Kreditkartendaten angeben, damit Amazon Ihnen die S3-Nutzung in Rechnung stellen kann. Am Ende sollten Sie Ihre Zugangs- und Geheimschlüssel haben.
Wenn Sie einen separaten IAM-Benutzer einrichten, muss der Zugriffsschlüssel dieses Benutzers mindestens über die folgenden Berechtigungen verfügen, um irgendetwas tun zu können:
Weitere Beispielrichtlinien finden Sie unter https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html
s3cmd --configure
ausSie werden nach den beiden Schlüsseln gefragt – kopieren Sie sie und fügen Sie sie aus Ihrer Bestätigungs-E-Mail oder von Ihrer Amazon-Kontoseite ein. Seien Sie vorsichtig beim Kopieren! Bei der Eingabe muss die Groß-/Kleinschreibung beachtet werden, andernfalls erhalten Sie ständig Fehlermeldungen über ungültige Signaturen oder Ähnliches.
Denken Sie daran, den Schlüsseln s3:ListAllMyBuckets-Berechtigungen hinzuzufügen, da sonst beim Testen des Zugriffs die Fehlermeldung „AccessDenied“ angezeigt wird.
s3cmd ls
aus, um alle Ihre Buckets aufzulisten.Da Sie gerade erst mit der Verwendung von S3 begonnen haben, besitzen Sie derzeit keine Buckets. Die Ausgabe ist also leer.
s3cmd mb s3://my-new-bucket-name
Wie oben erwähnt, müssen die Bucket-Namen unter allen Benutzern von S3 eindeutig sein. Das bedeutet, dass die einfachen Namen wie „test“ oder „asdf“ bereits vergeben sind und Sie sich etwas Originelleres ausdenken müssen. Um so viele Funktionen wie möglich zu demonstrieren, erstellen wir einen FQDN-Bucket mit dem Namen s3://public.s3tools.org
:
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
aufJetzt sollten Sie Ihren frisch erstellten Bucket sehen:
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
Es ist tatsächlich leer.
$ 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
Laden Sie einen Baum mit zwei Verzeichnissen in das virtuelle „Verzeichnis“ des Buckets hoch:
$ 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]
Wie Sie sehen, mussten wir das Verzeichnis /somewhere
nicht erstellen. Tatsächlich handelt es sich lediglich um ein Dateinamenpräfix, nicht um ein echtes Verzeichnis, und es muss auch nicht vorher in irgendeiner Weise erstellt werden.
Anstatt put
mit der Option --recursive
zu verwenden, können Sie auch den Befehl sync
verwenden:
$ 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
Verwenden Sie --recursive (oder -r), um alle Remote-Dateien aufzulisten:
$ 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
Die Prüfsummen der Originaldatei stimmen mit denen der abgerufenen überein. Sieht so aus, als hätte es funktioniert :-)
Um einen gesamten „Verzeichnisbaum“ aus S3 abzurufen, verwenden Sie rekursives get:
$ 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'
Da das Zielverzeichnis nicht angegeben wurde, speicherte s3cmd
die Verzeichnisstruktur in einem aktuellen Arbeitsverzeichnis ('.').
Es gibt einen wichtigen Unterschied zwischen:
get s3://public.s3tools.org/somewhere
Und
get s3://public.s3tools.org/somewhere/
(Beachten Sie den abschließenden Schrägstrich)
s3cmd
verwendet für die Benennung von Dateien immer den letzten Pfadteil, also das Wort nach dem letzten Schrägstrich.
Im Fall von s3://.../somewhere
ist der letzte Pfadteil „somewhere“ und daher benennt der rekursive Get die lokalen Dateien als „irgendwo/dir1“, „irgendwo/dir2“ usw.
Andererseits ist in s3://.../somewhere/
der letzte Pfadteil leer und s3cmd erstellt nur „dir1“ und „dir2“ ohne das Präfix „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'
Sehen? Es ist ~/dir1
und nicht ~/somewhere/dir1
wie im vorherigen Beispiel.
Entfernen Sie alles unter 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
...
Versuchen Sie nun, den Eimer zu entfernen:
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
Autsch, wir haben s3://public.s3tools.org/somefile.xml
vergessen. Wir können die Entfernung des Eimers trotzdem erzwingen:
$ 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
Die grundlegende Verwendung ist so einfach wie im vorherigen Abschnitt beschrieben.
Sie können den Ausführlichkeitsgrad mit der Option -v
erhöhen. Wenn Sie wirklich wissen möchten, was das Programm unter seiner Haube tut, führen Sie es mit -d
aus, um alle „Debugging“-Ausgaben anzuzeigen.
Nach der Konfiguration mit --configure
werden alle verfügbaren Optionen in Ihre ~/.s3cfg
Datei gespuckt. Es handelt sich um eine Textdatei, die Sie in Ihrem bevorzugten Texteditor bearbeiten können.
Die Übertragungsbefehle (put, get, cp, mv und sync) setzen die Übertragung fort, auch wenn ein Objekt fehlschlägt. Wenn ein Fehler auftritt, wird der Fehler an stderr ausgegeben und der Exit-Status lautet EX_PARTIAL (2). Wenn die Option --stop-on-error
angegeben ist oder die Konfigurationsoption stop_on_error true ist, werden die Übertragungen gestoppt und ein entsprechender Fehlercode zurückgegeben.
Weitere Informationen finden Sie auf der S3cmd / S3tools-Homepage.
Copyright (C) 2007-2023 TGRMN Software (https://www.tgrmn.com), Sodria SAS (https://www.sodria.com/) und Mitwirkende
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weiterverbreiten und/oder ändern; entweder Version 2 der Lizenz oder (nach Ihrer Wahl) eine spätere Version.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich ist, jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU General Public License.