Cloud storage is een prima oplossing voor off-site backups of om websites te hosten. Maar wist je dat je die storage ook via de commandline kunt benaderen? De volgende tips leren je werken met s3cmd, een client voor het S3-protocol.
Filip Vervloesem
Amazon is de meest bekende provider van S3 storage én de ontwikkelaar van het S3-protocol. Andere cloud storage providers bieden vaak ook een S3-interface aan om je data te benaderen. s3cmd kan in principe met elke S3-provider communiceren, al is het soms even zoeken naar de juiste configuratieparameters. In ons voorbeeld gaan we aan de slag met Amazon S3. Installeer om te beginnen het pakket “s3cmd”:
$ sudo apt install s3cmd
Start vervolgens de configuratie wizard:
$ s3cmd --configure
Vul nu achtereenvolgens de access key en secret key in van een Amazon IAM gebruiker die toegang heeft tot jouw S3 storage. Wil je s3cmd nadien in scripts gebruiken, dan maak je daarvoor best een afzonderlijke gebruiker aan met beperkte rechten. Voor de rest mag je de standaardinstellingen aanvaarden. Aan het einde van de wizard test je de verbinding en bewaar je de instellingen als alles correct werkt. Nadien kun je de instellingen nog aanpassen in het bestand ~/.s3cfg.
Jouw data bij Amazon is geordend in één of meerdere buckets. Een overzicht van alle buckets krijg je met:
$ s3cmd ls
Een nieuwe bucket maak je als volgt:
$ s3cmd mb s3://linuxmag.example.com
En een bucket verwijder je zo:
$ s3cmd rb s3://linuxmag.example.com
Dat lukt enkel voor lege buckets, tenzij je de –force-optie toevoegt:
$ s3cmd rb --force s3://linuxmag.example.com
De inhoud van een bucket vraag je op met:
$ s3cmd ls s3://linuxmag.example.com
Met het ls-commando kun je steeds verder afdalen in de mappenstructuur, bijvoorbeeld:
$ s3cmd ls s3://linuxmag.example.com/backup/
Maar let op: de / aan het einde móet je echt toevoegen. Zonder die / toont s3cmd niet de inhoud van de map in kwestie, maar enkel de mapnaam zelf. Je kunt ook een recursieve listing opvragen van een map en alle submappen:
$ s3cmd ls -r s3://linuxmag.example.com/backup/
Bij erg grote buckets moet je soms wel even geduld hebben voor een recursieve listing. Probeer dan eerst zo diep mogelijk in de mappenstructuur te navigeren voordat je een recursieve listing opvraagt.
Bestanden uploaden naar S3 doe je met put (voor individuele bestanden) of put -r (voor mappen en hun inhoud). Ook hier is het van belang of je al dan niet een slash plaatst achter een mapnaam. Zo kopieert volgend commando (zonder slash bij de lokale map) de volledige map Raspberry in de S3-map backup:
$ s3cmd put -r Raspberry s3://linuxmag.example.com/backup/ upload: 'Raspberry/backup_20200603.tar.gz' -> 's3://linuxmag.example.com/Raspberry/backup_20200603.tar.gz' [1 of 5]
En mét / kopieer je de inhoud van de lokale map Raspberry naar de S3-map backup:
$ s3cmd put -r Raspberry/ s3://linuxmag.example.com/backup/ upload: 'Raspberry/backup_20200603.tar.gz' -> 's3://linuxmag.example.com/backup_20200603.tar.gz' [1 of 5] Bestanden en mappen downloaden van S3 doe je met put respectievelijk put -r.
s3cmd bevat verschillende commando’s om de bestanden en mappen in S3-buckets te beheren. Zo kun je kopiëren met cp, verplaatsen/hernoemen met mv en verwijderen met rm. Met info krijg je onder andere de datum van de laatste aanpassing te zien en du toont je de gebruikte schijfruimte:
$ s3cmd du s3://linuxmag.example.com/backup/
Een laatste handige optie is het sync-commando. Daarmee synchroniseer je een lokale directory met een S3-directory of omgekeerd. s3cmd vergelijkt daarbij beide directories en kopieert enkel de aangepaste bestanden. Sync is dus ideaal om bijvoorbeeld snel een off-site backup te maken van een map (zonder verschillende versies te bewaren) of om de laatste versie van jouw website te uploaden. Voeg de optie –delete-removed toe om verwijderde bestanden van de bronmap ook in de doelmap te verwijderen:
$ s3cmd sync --delete-removed ~/Raspberry/ s3://linuxmag.example.com/Raspberry/