TAR

Wat is een TAR-bestand?

Bundelt bestanden zonder ze te comprimeren. De inpakstap op Unix, vrijwel altijd samen met GZ.

Wat TAR is

TAR is een container: een omhulsel voor stromen die door iets anders zijn gecodeerd. Het wordt gebruikt voor archivering en gegevens tussen programma’s verplaatsen.

De extensie is .tar en de volledige naam Tape Archive. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar TAR vandaan komt

Het gaat terug tot 1979. De specificatie is POSIX.1-2001 ustar.

Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Er wordt niets weggegooid

TAR bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.

Het kan een hele map bevatten

TAR bewaart een mappenstructuur: namen, mappen en de opbouw daartussen. Daarom kan het in een mailbijlage voor een map invallen.

Wat het doet om zichzelf te beschermen

TAR brengt een controlegetal, zodat een beschadigd bestand opvalt in plaats van stilzwijgend verkeerd gelezen te worden mee.

Repareren doet een controlegetal niets. Het vertelt je dat het bestand stuk is — dat is het verschil tussen het nu ontdekken en het horen van degene aan wie je het gestuurd hebt.

Wat TAR opent

tar, 7-Zip en Keka lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een werkformaat

TAR is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.

Wat er misgaat

De terugkerende klachten: de bestanden zijn groot voor wat erin staat.

Niets daarvan is een reden om het formaat te mijden. Het zijn de dingen die je beter kent voordat een ervan je verrast, en dat is een andere en een nuttigere bewering.

Het comprimeert niets, en dat is het sleutelfeit

TAR bundelt bestanden in één bestand. Het maakt ze niet kleiner. De naam is kort voor tape archive, en het werd in 1979 ontworpen om een mapstructuur in één continue stroom naar een magneetband te schrijven — een klus waar compressie andermans probleem was.

Bijna alles verwarrends aan TAR volgt hieruit. Een .tar van een map is net iets groter dan de map was, want er komt een header vóór elk bestand en alles wordt opgevuld tot een vaste blokgrootte. Verwachtte je een kleiner bestand, dan is er niets fout gegaan.

Waarom de extensie twee delen heeft

Omdat er twee aparte programma’s draaiden. archive.tar.gz werd gebundeld door tar en toen comprimeerde gzip het ene resulterende bestand. .tar.bz2 gebruikte bzip2, .tar.xz gebruikte xz, .tar.zst gebruikte zstd. De keten lees je van rechts naar links: pak eerst de compressie uit, dan de bundel.

De korte vormen .tgz en .txz betekenen hetzelfde en bestaan omdat sommige bestandssystemen ooit bezwaar maakten tegen meer dan één punt. Deze compositie van kleine tools die elk één ding doen, is bewust in plaats van toevallig.

De bundel comprimeren wint van de bestanden comprimeren

Deze volgorde is de reden waarom .tar.gz vaak ZIP verslaat op dezelfde inhoud. ZIP comprimeert elk bestand apart, dus duizend gelijkende tekstbestanden worden elk afzonderlijk geperst. Eerst tar dan gzip presenteert de compressor met één ononderbroken stroom, waarin herhaling over bestandsgrenzen heen te vinden is.

Bij broncode, logbestanden of alles met veel gelijkende kleine bestanden is het verschil aanzienlijk. Bij een map foto’s is het bijna nihil, want JPEG’s zijn al gecomprimeerd en er is geen herhaling tussen bestanden te vinden.

De prijs: je kunt niet snel naar binnen

Diezelfde continue stroom is waarom één bestand uit een grote .tar.gz halen traag is. Er is geen index, en de compressie betekent dat byte-posities niet vooraf berekend kunnen worden, dus de enige manier om een bestand dichtbij het eind te bereiken, is alles ervoor decomprimeren.

ZIP maakte de tegenovergestelde keuze. Zijn index staat aan het eind van het archief en elk bestand is apart gecomprimeerd, dus is elk los item direct te extraheren. Dat is de hele vergelijking: TAR voor archieven die vanaf het begin gelezen worden, ZIP voor archieven waar je in duikt.

Wat het bewaart dat ZIP niet doet

Unix-bestandsrechten, eigenaarschap, symbolische en harde links, plus tijdstempels met meer precisie dan ZIP vastlegt. Dit is waarom software als .tar.gz wordt verspreid in plaats van als ZIP: uitpakken moet een boom opleveren waarin het uitvoerbare bestand nog uitvoerbaar is en de links nog naar hetzelfde wijzen.

Op Windows heeft het meeste daarvan nergens naartoe en wordt het stilzwijgend genegeerd. Er gaat niets kapot, maar een .tar.gz uitgepakt op Windows en opnieuw ingepakt is de rechten kwijt waarvoor het bestond.

Welke compressor, en waar elk voor is

gzip is snel, universeel en de veilige standaard; het is wat vrijwel alles produceert en alles leest. xz comprimeert merkbaar harder en duurt aanzienlijk langer, wat past bij iets eenmalig geschreven en vaak gedownload. bzip2 zit ertussenin en is inmiddels grotendeels een legacykeuze. zstd is de moderne nieuwkomer en comprimeert bijna zo goed als xz op snelheden dicht bij gzip.

Voor een bestand dat naar iemand anders gaat, blijft .tar.gz het juiste antwoord, want het plafond is wat de ontvanger kan openen in plaats van wat het beste comprimeert.

Een formaat met meerdere incompatibele versies

Het oorspronkelijke ontwerp legde bestandsnamen vast op 100 tekens en had geen ruimte voor grote bestanden of lange paden. Twee uitbreidingen losten dat onafhankelijk op — die van GNU tar en het POSIX pax-formaat — en ze losten het verschillend op, dus een archief geschreven door de ene kan een strikte lezer die de andere verwacht in verwarring brengen.

In de praktijk lezen moderne tools ze allemaal en komt dit zelden naar boven. Gebeurt het toch, dan is het symptoom herkenbaar: afgekapte bestandsnamen, of een foutmelding over een pad dat te lang is, op een archief dat verder prima is.

Waar je er daadwerkelijk eentje tegenkomt

Broncodereleases, Linux- en macOS-softwaredistributie, Docker-imagelagen, serverback-ups, en de exportbestanden die hostingcontrolepanelen en databases produceren. Heb je iets gedownload om op een server te draaien, dan kwam het waarschijnlijk zo binnen.

Het duikt ook vaker op Windows op dan vroeger. Windows pakt .tar.gz al sinds 2023 native uit en het ingebouwde tar-commando staat er sinds 2018, dus het tijdperk waarin je een externe tool nodig had om er eentje te openen, is grotendeels voorbij.

Wanneer omzetten naar ZIP zin heeft, en wanneer niet

Zet om wanneer het archief naar een mens gaat in plaats van een machine — een collega op Windows, een webuploadformulier, een e-mailbijlage. ZIP is het formaat dat elk besturingssysteem zonder nadenken opent, en iets anders sturen vraagt de ontvanger stilzwijgend een probleem op te lossen.

Zet niet om als het archief teruggaat naar een Unix-systeem. Herverpakken als ZIP gooit de rechten, het eigenaarschap en de symbolische links weg waarvoor het formaat bestond, en het uitgepakte resultaat werkt mogelijk helemaal niet.

De gegevens, op één plek

Kenmerken en herkomst van het formaat TAR.
Extensie.tar
Mediatypeapplication/x-tar
Voor het eerst gepubliceerd1979
SpecificatiePOSIX.1-2001 ustar