Hjemmeside » hvordan » Hvad er fordelen ved at bruge Tar-filformatet i dag?

    Hvad er fordelen ved at bruge Tar-filformatet i dag?


    Tar arkiveringsformat er i edb-år et veritabelt Metuselah, men det er stadig i stor udstrækning i dag. Hvad gør tjæreformatet så nyttigt langt efter dets start?

    Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

    Spørgsmålet

    SuperUser-læser MarcusJ er nysgerrig efter tjæreformatet, og hvorfor bruger vi det stadig efter alle disse år:

    Jeg ved, at tjære blev lavet til båndarkiver tilbage på dagen, men i dag har vi arkivfilformater, der både aggregerer filer og udfører kompression inden for samme logiske filformat.

    spørgsmål:

    • Er der en ydeevne straf under aggregering / kompression / dekompression trin for at bruge tjære indkapslet i gzip eller bzip2, sammenlignet med at bruge et filformat, der gør aggregering og komprimering i samme datastruktur? Antag, at kompressorens løbetid er sammenlignet, er identisk (for eksempel gzip og deflat er ens).
    • Er der funktioner i tjærefilformatet, som andre filformater, f.eks. .7z og .zip ikke har?
    • Da tjære er et gammelt filformat, og der findes nyere filformater i dag, hvorfor er tjære (uanset om den er indkapslet i gzip, bzip2 eller endda den nye xz), der stadig er meget udbredt i dag på GNU / Linux, Android, BSD og andre sådanne UNIX operativsystemer, til filoverførsler, programkilder og binære downloads, og nogle gange endda som et pakkehåndteringsformat?

    Det er et helt fornuftigt spørgsmål; så meget har ændret sig i computeren verden i de sidste tredive år, men vi bruger stadig tjæreformatet. Hvad er historien?

    Svaret

    SuperUser bidragyder Allquixotic giver nogle indsigt i tjæreformatets levetid og funktionalitet:

    Del 1: Performance

    Her er en sammenligning af to separate arbejdsgange og hvad de gør.

    Du har en fil på disken blah.tar.gz som er 1 GB gzip-komprimerede data, der, når den er ukomprimeret, optager 2 GB (så et kompressionsforhold på 50%).

    Den måde, du ville skabe dette på, hvis du skulle arkivere og komprimere separat, ville være:

    tjære cf blah.tar filer ... 

    Dette ville resultere i blah.tar hvilket er en simpel aggregering af filer ...  i ukomprimeret form.

    Så ville du gøre

    gzip blah.tar 

    Dette ville læse indholdet af blah.tar fra disken, komprimere dem gennem gzip-komprimeringsalgoritmen, skriv indholdet til blah.tar.gz, derefter fjern forbindelsen (slet) filen blah.tar.

    Lad os nu dekomprimeres!

    Måde 1

    Du har blah.tar.gz, på den ene eller anden måde.

    Du vælger at køre:

    gunzip blah.tar.gz 

    Dette vil

    • LÆS 1GB komprimerede data indhold af blah.tar.gz.
    • PROCESS de komprimerede data gennem gzip dekompressor i hukommelsen.
    • Som hukommelsesbufferen fylder op med "en blok" værd for data, SKRIV de ukomprimerede data ind i filenblah.tar på disk og gentag indtil alle de komprimerede data er læst.
    • Fjern forbindelsen (slet) filen blah.tar.gz.

    Nu har du blah.tar på disken, som er ukomprimeret, men indeholder en eller flere filer i den, med meget lave datastrukturomkostninger. Filstørrelsen er sandsynligvis et par bytes større end summen af ​​alle fildata ville være.

    Du løber:

    tjære xvf blah.tar 

    Dette vil

    • LÆS 2GB ukomprimerede dataindhold af blah.tar og tjære filformatets datastrukturer, herunder oplysninger om filtilladelser, filnavne, mapper osv.
    • SKRIV til at diskere 2 GB data plus metadata. Dette indebærer: oversættelse af datastruktur / metadatainformation til oprettelse af nye filer og mapper på disken efter behov, eller omskrivning af eksisterende filer og mapper med nyt dataindhold.

    De samlede data vi LÆS fra disk i denne proces var 1GB (til gunzip) + 2GB (til tjære) = 3GB.

    De samlede data vi SKREV til disk i denne proces var 2 GB (til gunzip) + 2 GB (til tjære) + et par bytes for metadata = ca. 4 GB.

    Måde 2

    Du har blah.tar.gz, på den ene eller anden måde.

    Du vælger at køre:

    tjære xvzf blah.tar.gz 

    Dette vil

    • LÆS 1GB komprimerede data indhold af blah.tar.gz, en blok ad gangen, til hukommelsen.
    • PROCESS de komprimerede data gennem gzip dekompressor i hukommelsen.
    • Når hukommelsesbufferen fyldes op, vil den rør disse data, i hukommelsen, gennem til tjære filformat parser, som vil læse oplysninger om metadata mv og de ukomprimerede fildata.
    • Når hukommelsesbufferen fyldes op i tjære filparser, vil den SKRIVE de ukomprimerede data til disken ved at oprette filer og mapper og fylde dem med det ukomprimerede indhold.

    De samlede data vi LÆS fra disk i denne proces var 1 GB komprimeret data, periode.

    De samlede data vi SKREV til disk i denne proces var 2 GB ukomprimeret data + et par bytes for metadata = ca. 2 GB.

    Hvis du bemærker, mængden af ​​disk I / O i Måde 2 er identisk til disken I / O udført af f.eks Zip eller7-Zip programmer, justering for eventuelle forskelle i kompressionsforhold.

    Og hvis kompressionsforholdet er din bekymring, skal du bruge xz kompressor til indkapsling tjære, og du har LZMA2'ed TAR arkiv, som er lige så effektiv som den mest avancerede algoritme til rådighed 7-Zip :-)

    Del 2: Funktioner

    tjære gemmer UNIX-tilladelser inden for dens filmetadata og er meget velkendt og testet for at kunne pakke op en mappe med alle mulige forskellige tilladelser, symbolske links osv. Der er mere end et par tilfælde, hvor man måske skal bruge en masse filer til en enkelt fil eller stream, men ikke nødvendigvis komprimere den (selvom komprimering er nyttig og ofte brugt).

    Del 3: Kompatibilitet

    Mange værktøjer distribueres i kilde eller binær form som .tar.gz eller .tar.bz2 fordi det er et "laveste fællesnævner" filformat: Meget ligesom de fleste Windows-brugere har adgang til .zip eller .rar dekompressorer, de fleste Linux-installationer, selv de mest grundlæggende, vil have adgang til i det mindste tjære og gunzip, uanset hvor gammel eller pareret. Selv Android firmware har adgang til disse værktøjer.

    Nye projekter rettet mod målgrupper, der kører moderne distributioner, kan meget vel fordeles i et mere moderne format, f.eks. .Tar.xz (ved hjælp af Xz (LZMA) komprimeringsformatet, som komprimerer bedre end gzip eller bzip2) eller .7z, hvilket svarer til Zip- eller Rar-filformaterne, idet den både komprimerer og angiver et layout til indkapsling af flere filer i en enkelt fil.

    Du kan ikke se .7z brugt oftere af samme grund, at musik ikke sælges fra online-downloadbutikker i helt nye formater som Opus eller video i WebM. Kompatibilitet med folk, der kører gamle eller meget grundlæggende systemer.


    Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.