Archiveren en comprimeren

Linux biedt diverse technologieën waarmee bestanden in archieven kunnen worden verpakt en gecomprimeerd. Daarbij dient te worden opgemerkt dat niet iedere archivering een compressie is. Zo wordt tar, een programma voor het archiveren van bestanden, in de regel gecombineerd met compressieprogramma's zoals gzip, bzip2 of xz.

Bestanden schrijven en extraheren in tar-archieven

Het commando tar staat voor tape archiver, een programma dat oorspronkelijk werd ontwikkeld om bestanden op tapedrives op te slaan. tar is in Linux nog steeds een van de populairste programma’s voor het archiveren van bestanden.

Met het programma kunnen verschillende bestanden en mappen sequentieel naar een tar-bestand worden geschreven en van daaruit indien gewenst ook weer worden hersteld. Anders dan bij het in Windows gebruikelijke zip-formaat blijven daarbij alle gebruikersrechten van de gearchiveerde bestanden ook na het uitpakken behouden.

Het opdrachtregelprogramma tar wordt geopend met de volgende syntax:

tar [OPTIES] BESTANDEN

Als je een nieuw archief wilt aanmaken, gebruik je tar met de opties –c (nieuw archief aanmaken) en –f (archief naar aangegeven bestand schrijven of daaruit uitlezen).
In het volgende voorbeeld worden de bestanden bestand1.txt en bestand2.txt naar het nieuw aangemaakte archief voorbeeld.tar geschreven.
tar -cf voorbeeld.tar bestand1.txt bestand2.txt
Als je de inhoud van een archief wilt bekijken, gebruik je tar met de opties –t (inhoud van een archief weergeven), –v (gedetailleerde weergave) en –f (zie boven).
tar -tvf voorbeeld.tar
Als gearchiveerde bestanden moeten worden uitgepakt in de huidige map, wordt tar gebruikt met de opties –x (bestanden extraheren uit archief) en –f (zie boven).
tar -xf voorbeeld.tar
Met –j (bzip2), –J (xz), –z (gzip) en –Z (compress) biedt tar daarnaast opties waarmee archieven met het openen van een ander programma tijdens de in- en uitpakprocessen te comprimeren of decomprimeren.
In het volgende voorbeeld worden de bestanden bestand1.txt en bestand2.txt gearchiveerd in voorbeeld.tar.gz en gecomprimeerd met gzip.
tar -czf voorbeeld.tar.gz bestand_1.txt bestand_2.txt
Het volgende commando extraheert en decomprimeert alle in voorbeeld.tar.gz gearchiveerde bestanden.
tar -xzf voorbeeld.tar.gz


Bestanden comprimeren of decomprimeren met gzip
gzip (kort voor GNU zip) is een programma waarmee bestanden eenvoudig kunnen worden gecomprimeerd en gedecomprimeerd via de opdrachtregel.
De algemene syntax van het commando luidt:
gzip [OPTIES] BESTAND(EN)

Gebruik gzip bijvoorbeeld volgens het volgende schema om het bestand voorbeeld.txt over te dragen naar het gecomprimeerde formaat voorbeeld.txt.gz:
gzip voorbeeld.txt
Houd er rekening mee dat gzip het originele bestand standaard verwijdert tijdens het inpakken. Dit kan worden voorkomen met de optie –k.
gzip -k voorbeeld.txt
Het programma kan indien gewenst op meerdere bestanden tegelijk worden toegepast. Daarbij wordt ieder bronbestand overgedragen naar een zelfstandig gz-bestand.
Het commando
gzip voorbeeld_1.txt voorbeeld_2.txt voorbeeld_3.txt
genereert de bestanden voorbeeld_1.txt.gzvoorbeeld_2.txt.gz en voorbeeld_3.txt.gz.
Als je meerdere bestanden naar een gezamenlijk gecomprimeerd archief wilt schrijven, gebruik je gzip in combinatie met het archiveringsprogramma tar.
Als je een gz-bestand wilt decomprimeren, gebruik je het commando gzip met de optie –d. Het commando gunzip kan als alternatief worden gebruikt.
gzip -d voorbeeld.txt.gz
gunzip voorbeeld.txt.gz
Ook uitgepakte gz-bestanden worden standaard verwijderd. Als je naast het geëxtraheerde bestand ook het gz-bestand wilt behouden, gebruik je ook hier de optie –k.
De gzip-compressie is gebaseerd op het deflate-algoritme (een combinatie van LZ77 en Huffman-codering). In vergelijking met andere compressiemethoden onderscheidt gzip zich door zijn snelheid. De compressiegraad is echter net zo laag.

Bestanden comprimeren en decomprimeren met bzip

Een populair alternatief voor gzip is het opdrachtregelprogramma bzip2. Dit gebruikt dezelfde syntax als gzip maar is gebaseerd op een drietraps compressieproces, waarmee een beduidend hogere compressiegraad mogelijk is.

Eerst worden de verzonden bestanden per blok onderworpen aan de omkeerbare Burrows-Wheelertransformatie en vervolgens aan de Move-to-front-transformatie. De eigenlijke datacompressie vindt vervolgens plaats met behulp van een Huffman-codering.

Bestanden die zijn gecomprimeerd met bzip2 hebben de bestandsextensie .bz2. Gebruik bzip met het volgende schema om bestanden te comprimeren.

bzip2 [OPTIES] BESTAND(EN)

Ook bzip2 kan worden gebruikt voor tar-archieven.

De decompressie vindt analoog plaats met gzip met de optie –d. Als alternatief kan het commando bunzip2 worden gebruikt.

De hoge compressiegraad gaat voor gebruikers gepaard met een relatief lange looptijd.

xz is een nieuw algemeen hulpprogramma voor gegevenscompressie via de opdrachtregel, vergelijkbaar met gzip en bzip2. Het kan worden gebruikt om een bestand te comprimeren of decomprimeren volgens de geselecteerde bedieningsmodus. Het ondersteunt verschillende formaten om bestanden te comprimeren of decomprimeren.

Het selecteren van een te gebruiken compressiehulpprogramma hangt voornamelijk af van twee factoren: de compressiesnelheid en -snelheid van een bepaald hulpmiddel. In tegenstelling tot zijn tegenhangers wordt xz niet vaak gebruikt, maar biedt het de beste compressie.

 

XZ Utils bestaat uit twee hoofdcomponenten:

  • xz, de opdrachtregelcompressor en -decompressor (analoog aan gzip)
  • Er zijn verschillende snelkoppelingen voor opdrachten, zoals lzma (voor xz –format=lzma), unxz (voor xz –decompress; analoog aan gunzip) en xzcat (voor unxz –stdout; analoog aan zcat)
    xz
     Utils kan zowel de xz- als de lzma-bestandsindeling comprimeren en decomprimeren, maar aangezien de LZMA-indeling nu verouderd is, comprimeert XZ Utils standaard naar xz.

Bestanden comprimeren en decomprimeren met xz

Het opdrachtregelprogramma xz verzendt bestanden naar het gelijknamige datacompressieformaat xz. Het programma wordt geopend volgens hetzelfde schema als bij gzip en bzip2.

xz [OPTIES] BESTAND(EN)

Parameter

Uitleg

-z

–compress

comprimeren van een bestand met xz

-d

of het hulpprogramma unxz om een bestand te decomprimeren, zoals weergegeven.

-k

voorkomen dat de invoerbestanden worden verwijderd

-f

als er een gecomprimeerd bestand met dezelfde naam bestaat toch overschrijven

–fast
–best

 

xz ondersteunt ook verschillende vooraf ingestelde compressieniveaus (0 tot 9, met standaard 6).

-v

Verbose, toon info op scherm

Bestanden die zijn gecomprimeerd met xz hebben de bestandsextensie .xz. Decompressie vindt net als bij gzip en bzip plaats met de optie –d. Als alternatief kan het commando unxz worden gebruikt.

Net als gz- en bz2-bestanden zijn xz-bestanden geen archiefbestanden. Als je meerdere bestanden in hetzelfde gecomprimeerde xz-bestand wilt schrijven, moet je ook bij dit compressieprogramma gebruikmaken van de archiveringstool tar.

xz ondersteunt diverse compressiealgoritmes. Standaard wordt het Lempel-Ziv-Markow-algoritme gebruikt (LZMA/LZMA2)

Gebruik

Net als gzip en bzip kunnen xz en lzma alleen afzonderlijke bestanden (of gegevensstromen) als invoer comprimeren. Ze kunnen niet meerdere bestanden bundelen in een enkel archief – hiervoor wordt eerst een archiveringsprogramma gebruikt, zoals tar.

Een archief comprimeren: 

  • xz my_archive.tar # resulteert in my_archive.tar.xz
  • lzma my_archive.tar # resulteert in my_archive.tar.lzma

Het archief uitpakken:

  • unxz my_archive.tar.xz # resulteert in my_archive.tar
  • unlzma my_archive.tar.lzma # resultaten in my_archive.tar

Versie 1.22 of hoger van de GNU-implementatie van tar heeft transparante ondersteuning voor tarballs die zijn gecomprimeerd met lzma en xz, met behulp van de schakelaars –xz of -J voor xz-compressie, en –lzma voor LZMA-compressie.

Een archief maken en comprimeren:

  • tar -c –xz -f my_archive.tar.xz /some_directory
    # resultaten in my_archive.tar.xz
  • tar -c –lzma -f my_archive.tar.lzma /some_directory
    # resultaten in my_archive.tar.lzma

Het archief decomprimeren en de inhoud ervan uitpakken:

  • tar -x –xz -f my_archive.tar.xz
    # resultaten in /some_directory
  • tar -x –lzma -f my_archive.tar.lzma
    # resultaten in /some_directory

Eenletterig tar-voorbeeld voor archiveren met comprimeren en decomprimeren met uitpakken met kort achtervoegsel:

  • tar cJf keep.txz bewaar
    # archive en comprimeer vervolgens de map ./keep/ in het bestand ./keep.txz
  • tar xJf keep.txz
    # decomprimeer en pak het bestand ./keep.txz uit en maak de map ./keep/

Bestanden schrijven en extraheren in archiefbestand

cpio (kort voor copy incopy out) is een archiveringsprogramma waarmee gegevens naar een archiefbestand (.cpio) kunnen worden geschreven en van daaruit kunnen worden geëxtraheerd.

Syntaxis van het cpio-commando:

[bestandsopdracht |] cpio {-o| –create} -A [-opties] [<fic-lijst] {F|>apparaat}

Opties Beschrijving

Paremeter

Omschrijving

-o

Maakt een back-up (uitvoer).

-v

Geeft de naam weer van de verwerkte bestanden.

-F

Geeft de back-up aan die moet worden gewijzigd (medium).

-A

Voegt een of meer bestanden toe aan een back-up op schijf.

-t

Leest een back-up.

-v

Geeft bestandskenmerken weer.

-i

Herstel een volledige back-up.

-E

bestand Herstelt alleen de bestanden waarvan de naam in het bestand is opgenomen.

–make-directories
-d

Herbouwt de ontbrekende boomstructuur.

-u

Vervangt alle bestanden, zelfs als ze bestaan.

–no-absolute-filenames

Maakt het mogelijk om een back-up gemaakt in absolute modus op een relatieve manier te herstellen.

Archief creatie

Bij het maken van archieven tijdens het kopiëren, geïnitieerd met de opdrachtregelvlag -o, leest cpio bestands- en mappadnamen van zijn standaard invoerkanaal en schrijft de resulterende archiefbytestroom naar zijn standaarduitvoer. Cpio wordt daarom meestal gebruikt met andere hulpprogramma’s die de lijst met te archiveren bestanden genereren, zoals het programma Find.

Het resulterende cpio-archief is een opeenvolging van bestanden en mappen die zijn samengevoegd tot een enkel archief, gescheiden door kopsecties met bestandsmeta-informatie, zoals bestandsnaam, inode-nummer, eigendom, machtigingen en tijdstempels. Volgens afspraak krijgt de bestandsnaam van een archief meestal de bestandsextensie cpio.

In dit voorbeeld wordt het zoekhulpprogramma gebruikt om een lijst met padnamen te genereren die beginnen in de huidige map om een archief van de mappenboom te maken:

We kunnen de uitvoer van een commando omleiden naar cpio ofwel kunnen we een back-up medium instellen, we bekijken een voorbeeld van elk:

find . -depth -print | cpio -o > /path/archive.cpio

De naam van een back-upmedium gebruiken:

find /etc | cpio -ovF /backups/etc.cpio

Het resultaat van het zoekcommando wordt via een pipe (teken |) als invoer naar het cpio-commando gestuurd.

Hier retourneert de opdracht find /etc een lijst met bestanden die overeenkomen met de inhoud van de map /etc (recursief) naar de opdracht cpio, die de back-up uitvoert.

Vergeet het > teken niet bij het opslaan of de F parameter.

Het doel kan van verschillende soorten zijn:

  • tapedrive: /dev/rmt0;
  • een partitie: /dev/sda5, /dev/hda5, enz.

Type back-up

Back-up met relatief pad

cd /
find etc | cpio -o > /backups/etc.cpio

Back-up met absoluut pad

find /etc | cpio -o > /backups/etc.A.cpio

Waarschuwing
Als het opgegeven pad in de opdracht find absoluut is, wordt de back-up absoluut uitgevoerd.
Als het pad dat wordt aangegeven in de opdracht find relatief is, wordt de back-up relatief uitgevoerd.

Voorbeeld:

find /etc/schaduw | cpio -o -AF Systeembestanden.A.cpio

Het toevoegen van bestanden is alleen mogelijk op direct access media.

Een back-up comprimeren

Opslaan en vervolgens comprimeren

find /etc | cpio  –o > etc.A.cpio
gzip /backups/etc.A.cpio

Opslaan en vervolgens comprimeren

find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz

Er is geen optie, in tegenstelling tot het tar-commando, om tegelijkertijd op te slaan en te comprimeren. Het gebeurt dus in twee stappen: opslaan en comprimeren.

De syntaxis van de eerste methode is gemakkelijker te begrijpen en te onthouden, omdat deze in twee stappen wordt uitgevoerd.

Voor de eerste methode wordt het back-upbestand automatisch hernoemd door het gzip-hulpprogramma dat .gz toevoegt aan het einde van de bestandsnaam. Evenzo voegt het bzip2-hulpprogramma automatisch .bz2 toe.

Extractie

Tijdens de kopieerbewerking, geïnitieerd door de opdrachtregelvlag i, leest cpio een archief uit de standaardinvoer en maakt de gearchiveerde bestanden opnieuw in het bestandssysteem van het besturingssysteem.

cpio -i -vd < archief.cpio

Commandoregelvlag d vertelt cpio om zo nodig mappen te maken. Vlag v (verbose) geeft bestandsnamen weer zoals ze worden uitgepakt.

Alle resterende opdrachtregelargumenten behalve de optievlaggen zijn shell-achtige globbing-patronen; alleen bestanden in het archief met overeenkomende namen worden uit het archief gekopieerd. Het volgende voorbeeld haalt het bestand /etc/fstab uit het archief:

cpio -i -d /etc/fstab < archief.cpio

Lijst

De bestanden in een cpio-archief kunnen worden weergegeven met deze aanroep:

cpio -t < archief.cpio

Lijst kan nuttig zijn omdat een cpio-archief absolute in plaats van relatieve paden kan bevatten (bijv. /bin/ls vs. bin/ls).