tjära (beräkning) - tar (computing)

tjära
Ursprungliga författare AT&T Bell Laboratories
Utvecklare Olika utvecklare med öppen källkod och kommersiella
Initial release Januari 1979 ; 42 år sedan ( 1979-01 )
Stabil frisättning
1.34 / 13 februari 2021 ; 8 månader sedan ( 2021-02-13 )
Skrivet i pdtar, stjärna, Plan 9 , GNU : C
Operativ system Unix , Unix-liknande , Plan 9 , Microsoft Windows , IBM i
Plattform Plattformsoberoende
Typ Kommando
Licens pdtar: Public domain
star: CDDL
Plan 9: MIT
GNU: GPLv3+
tjära
Filnamnstillägg
.tjära
Internetmedietyp
applikation/x-tar
Uniform Type Identifier (UTI) public.tar-arkiv
Magiskt nummer u s t a r \0 0 0  vid byte -offset 257 (för POSIX -versioner)

u s t a r \040 \040 \0  (för gammalt GNU -tjärformat)

saknas i versioner före POSIX
Senaste släppningen
olika
(olika)
Typ av format Arkivarkiv
Standard POSIX sedan POSIX.1, för närvarande i definitionen av pax [1]
Öppet format ? Ja

Inom datorer är tar ett verktyg för datorprogramvara för att samla in många filer i en arkivfil , ofta kallad tarball , för distribution eller backup. Namnet härrör från " t ape ar chive", eftersom det ursprungligen utvecklades för att skriva data till sekventiella I/O -enheter utan eget filsystem. De arkivdatamängder som skapas av tjära innehåller olika filsystem parametrar såsom namn, tidsstämplar, ägande, fil-behörigheter och katalogorganisationen.

Historia

Kommandoradsverktyget introducerades först i Version 7 Unix i januari 1979 och ersatte tp-programmet. Den filstrukturen att lagra denna information standardiserade i POSIX ,1-1988 och senare POSIX.1-2001 och blev format som stöds av de flesta moderna fil arkiveringssystem.

Idag innehåller Unix-liknande operativsystem vanligtvis verktyg för att stödja tjärfiler, liksom verktyg som vanligtvis används för att komprimera dem, till exempel gzip och bzip2 .

BSD-tar har inkluderats i Microsoft Windows sedan Windows 10 April 2018 Update , och det finns annars flera tredjepartsverktyg tillgängliga för att läsa och skriva dessa format på Windows.

Den tar kommandot har också portas till IBM i operativsystemet.

Logisk grund

Många historiska banddrivrutiner läser och skriver datablock med variabel längd och lämnar betydligt slösat utrymme på bandet mellan blocken (för att bandet fysiskt kan börja och sluta röra sig). Vissa banddrivrutiner (och raw-diskar) stöder endast datablock med fast längd. När du skriver till något medium, till exempel ett filsystem eller nätverk, tar det mindre tid att skriva ett stort block än många små block. Därför skriver tar -kommandot data i poster för många 512  B -block. Användaren kan ange en blockeringsfaktor, vilket är antalet block per post. Standardvärdet är 20, vilket ger 10  KiB -poster.

Filformat

Ett tjärarkiv består av en serie filobjekt, därav den populära termen tarball , som refererar till hur en tarball samlar objekt av alla slag som fastnar på dess yta. Varje filobjekt innehåller alla fildata, och föregås av en 512-bytes rubrikpost . Fildata skrivs oförändrade förutom att dess längd avrundas upp till en multipel av 512 byte. Den ursprungliga tjärimplementeringen brydde sig inte om innehållet i vadderingsbyte och lämnade buffertdata oförändrade, men de flesta moderna tjäraimplementeringar fyller det extra utrymmet med nollor. Slutet på ett arkiv markeras med minst två på varandra följande nollfyllda poster. (Ursprunget till tarns rekordstorlek verkar vara 512-bytes disksektorer som används i version 7 Unix-filsystemet.) Det sista blocket i ett arkiv är utfyllt i full längd med nollor.

Rubrik

Filhuvudposten innehåller metadata om en fil. För att säkerställa portabilitet över olika arkitekturer med olika bytebeställningar , kodas informationen i rubrikposten i ASCII . Om alla filer i ett arkiv är ASCII -textfiler och har ASCII -namn är arkivet alltså i huvudsak en ASCII -textfil (som innehåller många NUL -tecken ).

Fälten som definieras av det ursprungliga Unix -tjärformatet listas i tabellen nedan. Länkindikatorn/filtypstabellen innehåller några moderna tillägg. När ett fält är oanvänt fylls det med NUL -byte. Rubriken använder 257 byte och fylls sedan med NUL -byte för att få den att fylla en 512 byte -post. Det finns inget "magiskt nummer" i rubriken, för filidentifiering.

Pre-POSIX.1-1988 (dvs. v7) tjärhuvud:

Fältförskjutning Fältstorlek Fält
0 100 Filnamn
100 8 Filläge (oktal)
108 8 Ägarens numeriska användar -ID (oktal)
116 8 Gruppens numeriska användar -ID (oktal)
124 12 Filstorlek i byte (oktal)
136 12 Senaste ändringstid i numeriskt Unix -tidsformat (oktal)
148 8 Checksumma för rubrikrekord
156 1 Länkindikator (filtyp)
157 100 Namn på länkad fil

Fältet före POSIX.1-1988 Link-indikator kan ha följande värden:

Länkindikatorfält
Värde Menande
'0' eller ( ASCII NUL ) Normal fil
'1' Hård länk
'2' Symbolisk länk

Vissa tjärimplementeringar före POSIX.1-1988 indikerade en katalog med ett bakre snedstreck (/) i namnet.

Numeriska värden kodas i oktala tal med ASCII -siffror, med ledande nollor. Av historiska skäl en slutlig NUL eller utrymme bör karaktär också använts. Även om det finns 12 byte reserverat för lagring av filstorleken kan endast 11 oktalsiffror lagras. Detta ger en maximal filstorlek på 8 gigabyte på arkiverade filer. För att övervinna denna begränsning introducerade stjärnan 2001 en bas-256-kodning som indikeras genom att ställa in den högsta ordningsbiten för den längsta byten i ett numeriskt fält. GNU-tjära och BSD-tjära följde denna idé. Dessutom dämpar versioner av tjära från före den första POSIX -standarden från 1988 värdena med mellanslag istället för nollor.

Den kontrollsumma beräknas genom att ta summan av de osignerade bytevärden av rubrikposten med de åtta kontrollsumma bytes som vidtagits för att vara ASCII utrymmen (decimalvärde 32). Det lagras som ett sexsiffrigt oktalt tal med ledande nollor följt av ett NUL och sedan ett mellanslag. Olika implementeringar följer inte detta format. Dessutom behandlade vissa historiska tjärimplementeringar byte som signerade. Implementeringar beräknar vanligtvis kontrollsumman på båda sätten och behandlar den som bra om antingen den undertecknade eller osignerade summan matchar den inkluderade kontrollsummen.

Unix -filsystem stöder flera länkar (namn) för samma fil. Om flera sådana filer visas i ett tjärarkiv arkiveras bara den första som en normal fil; resten arkiveras som hårda länkar, där fältet "namn på länkad fil" är inställt på det första namnet. Vid extraktion bör sådana hårda länkar återskapas i filsystemet.

UStar -format

De flesta moderna tarprogram läser och skriver arkiv i UStar ( Unix Standard TAR ) -format, introducerade av standarden POSIX IEEE P1003.1 från 1988. Det introducerade ytterligare rubrikfält. Äldre tarprogram ignorerar den extra informationen (eventuellt extraherar delvis namngivna filer), medan nyare program testar om det finns "ustar" -sträng för att avgöra om det nya formatet används. UStar -formatet möjliggör längre filnamn och lagrar ytterligare information om varje fil. Den maximala filnamnstorleken är 256, men den är uppdelad mellan en föregående sökväg "filnamnsprefix" och själva filnamnet, så det kan vara mycket mindre.

Fältförskjutning Fältstorlek Fält
0 156 (Flera fält, samma som i det gamla formatet)
156 1 Skriv flagga
157 100 (Samma fält som i det gamla formatet)
257 6 UStar -indikatorn "ustar" sedan NUL
263 2 UStar version "00"
265 32 Ägarens användarnamn
297 32 Ägargruppens namn
329 8 Enhetens huvudnummer
337 8 Enhetens mindre nummer
345 155 Filnamn prefix

Den typ flagga fält kan ha följande värden:

Skriv flaggfält
Värde Menande
'0' eller ( ASCII NUL ) Normal fil
'1' Hård länk
'2' Symbolisk länk
'3' Karaktär speciell
'4' Block special
'5' Katalog
'6' FIFO
'7' Sammanhängande fil
'g' Globalt utökat huvud med metadata (POSIX.1-2001)
'x' Utökat huvud med metadata för nästa fil i arkivet (POSIX.1-2001)
'A' - 'Z' Leverantörsspecifika tillägg (POSIX.1-1988)
Alla andra värden Reserverad för framtida standardisering

POSIX.1-1988 leverantörsspecifika tillägg med länkflaggvärden 'A' .. 'Z' har delvis en annan betydelse för olika leverantörer och ses därmed som föråldrade och ersättas av POSIX.1-2001-tillägg som också innehåller en leverantörstagg .

Typ '7' (sammanhängande fil) är formellt markerad som reserverad i POSIX -standarden, men var avsedd att indikera filer som borde sammanhängande tilldelas på hårddisken. Få operativsystem stöder att skapa sådana filer uttryckligen, och därför stöder de flesta TAR -program dem inte och behandlar typ 7 -filer som om de vore typ 0 (vanliga). Ett undantag är äldre versioner av GNU -tar, när de körs på operativsystemet MASSCOMP RTU (Real Time Unix), som stödde en O_CTG -flagga till funktionen open () för att begära en sammanhängande fil; det stödet togs dock bort från GNU tar version 1.24 och framåt.

POSIX.1-2001/pax

1997 föreslog Sun en metod för att lägga till tillägg till tjärformatet. Denna metod godkändes senare för standarden POSIX.1-2001. Detta format kallas förlängt tjäraformat eller pax -format. Det nya tjärformatet tillåter användare att lägga till alla typer av leverantörsmärkta leverantörsspecifika förbättringar. Följande taggar definieras av POSIX -standarden:

  • atime , mtime : alla tidsstämplar för en fil i godtycklig upplösning (de flesta implementationer använder nanosekund -granularitet)
  • sökväg : vägnamn med obegränsad längd och teckenuppsättningskodning
  • länkväg : symlink målnamn med obegränsad längd och teckenuppsättningskodning
  • uname , gname : användarnamn och gruppnamn med obegränsad längd och teckenuppsättningskodning
  • storlek : filer med obegränsad storlek (det historiska tjäraformatet är 8 GB)
  • uid , gid : userid och groupid utan storleksbegränsning (detta historiska tjärformat var begränsat till ett max -id 2097151)
  • en teckenuppsättning definition för sökvägsnamn och användare/gruppnamn ( UTF-8 )

2001 blev Star -programmet den första tjäran som stödde det nya formatet. 2004 stödde GNU tar det nya formatet, även om det inte skriver dem som standardutmatning från tjärprogrammet ännu.

Den är utformad så att alla implementationer som kan läsa UStar-formatet kommer att kunna läsa POSIX.1-2001 också. De enda undantagen är filer som använder utökade funktioner, till exempel längre filnamn. För kompatibilitet kodas dessa i tjärfilerna som special- xeller gtypfiler. vanligtvis under en PaxHeaders.XXXXkatalog. En Pax-stödjande implementering skulle använda informationen, medan icke-stödjande sådana som 7-Zip skulle bearbeta dem som extra filer.

Begränsningar

Det ursprungliga tjärformatet skapades i Unix tidiga dagar, och trots nuvarande utbredd användning anses många av dess designfunktioner vara daterade.

Många äldre tjärimplementeringar registrerar eller återställer inte utökade attribut (xattrs) eller åtkomstkontrollistor (ACL). År 2001 introducerade Star stöd för ACL och utökade attribut, genom egna taggar för POSIX.1-2001 pax. Bsdtar använder stjärntillägget för att stödja ACL: er. Nyare versioner av GNU -tar stöder Linux -utökade attribut, omimplementering av stjärntillägg. Ett antal tillägg granskas i filtypmanualen för BSD -tjära, tjära (5).

Andra format har skapats för att åtgärda bristerna i tjära.

Tarbomb

En tarbomb , i hacker -slang , är en tjärfil som innehåller många filer som extraheras i arbetskatalogen. En sådan tjärfil kan skapa problem genom att skriva över filer med samma namn i arbetskatalogen eller blanda ett projekts filer i ett annat. Det är i bästa fall ett besvär för användaren, som är skyldig att identifiera och radera ett antal filer varvat med katalogens övriga innehåll. Sådant beteende anses vara dålig etikett från arkivets skapare.

Ett relaterat problem är användningen av absoluta sökvägar eller överordnade katalogreferenser när du skapar tar -filer. Filer som extraheras från sådana arkiv skapas ofta på ovanliga platser utanför arbetskatalogen och har, precis som en tarbomb, potential att skriva över befintliga filer. Moderna versioner av FreeBSD och GNU tar skapar eller extraherar dock inte absoluta sökvägar och överordnade katalogreferenser som standard, såvida det inte uttryckligen är tillåtet med flaggan -Peller alternativet --absolute-names. Bsdtar-programmet, som också är tillgängligt på många operativsystem och är standardtjärningsverktyget på Mac OS X v10.6, följer inte heller referenser till överordnade kataloger eller symboliska länkar.

Om en användare bara har en mycket gammal tjära tillgänglig, som inte innehåller dessa säkerhetsåtgärder, kan dessa problem lindras genom att först undersöka en tjärfil med kommandot tar tf archive.tar, som innehåller innehållet och gör det möjligt att utesluta problematiska filer efteråt. Dessa kommandon extraherar inga filer utan visar namnen på alla filer i arkivet. Om några är problematiska kan användaren skapa en ny tom katalog och extrahera arkivet i den - eller undvika tarfilen helt. De flesta grafiska verktyg kan visa innehållet i arkivet innan de extraheras. Vim kan öppna tjärarkiv och visa deras innehåll. GNU Emacs kan också öppna ett tjärarkiv och visa dess innehåll i en dired buffert.

Slumpmässig tillgång

Tjärformatet har utformats utan ett centraliserat index eller innehållsförteckning för filer och deras egenskaper för streaming till band -backupenheter. Arkivet måste läsas sekventiellt för att lista eller extrahera filer. För stora tjärarkiv orsakar detta en prestationsstraff, vilket gör tjärarkiv olämpliga för situationer som ofta kräver slumpmässig åtkomst till enskilda filer.

Dubbletter

Ett annat problem med tar -format är att det tillåter flera (möjligen olika) filer i arkivet att ha identisk sökväg och filnamn. När du extraherar ett sådant arkiv, brukar den senare versionen av en fil skriva över den tidigare.

Detta kan skapa en icke-explicit (otydlig) tarbomb, som tekniskt sett inte innehåller filer med absoluta sökvägar eller hänvisande överordnade kataloger, men ändå orsakar överskrivning av filer utanför den aktuella katalogen (till exempel kan arkiv innehålla två filer med samma sökväg och filnamn, varav den första är en symlänk till någon plats utanför den aktuella katalogen, och den andra är en vanlig fil, sedan extrahering av ett sådant arkiv på vissa tjärimplementeringar kan orsaka skrivning till den plats som symlänken pekar på).

Viktiga implementeringar

Historiskt sett har många system implementerat tjära, och många allmänna filarkivare har åtminstone delvis stöd för tjära (använder ofta en av implementeringarna nedan). Tjärens historia är en historia om oförenligheter, känd som "tjärkriget". De flesta tjära implementationer kan också läsa och skapa cpio och pax (den sistnämnda är faktiskt en tjära -format med POSIX -2001-extensions).

Viktiga implementeringar i ursprungsordning:

  • Solaris tjära , baserat på den ursprungliga Unix V7 tjära och kommer som standard på operativsystemet Solaris
  • GNU tar är standard på de flesta Linux -distributioner. Den är baserad på public domain implementeringen pdtar som startade 1987. De senaste versionerna kan använda olika format, inklusive ustar, pax, GNU och v7 -format.
  • FreeBSD tar (även BSD tar ) har blivit standard tar på de flesta Berkeley Software Distribution -baserade operativsystem, inklusive Mac OS X . Kärnfunktionen är tillgänglig som libarkiv för inkludering i andra applikationer. Denna implementering upptäcker automatiskt filens format och kan extrahera från tar, pax, cpio, zip, jar, ar, xar, rpm och ISO 9660 cdrom -bilder. Den levereras också med ett funktionellt likvärdigt cpio-kommandoradsgränssnitt.
  • Schily tjära , mer känd som stjärna , är historiskt betydelsefull eftersom några av dess tillägg var ganska populära. Det är den äldsta fria tjäran från 1982.

Dessutom har de flesta pax och cpio kan implementeringar läsa och skapa många typer av filer tar-.

Tillägg för komprimerade filer

tar -arkivfiler har vanligtvis filändelsen .tar (t.ex. somefile.tar ).

En tararkivfil innehåller okomprimerade byteflöden av filerna som den innehåller. För att uppnå arkivkomprimering finns en mängd olika komprimeringsprogram tillgängliga, till exempel gzip , bzip2 , xz , lzip , lzma , zstd eller compress , som komprimerar hela tjärarkivet. Vanligtvis får arkivets komprimerade form ett filnamn genom att lägga till det formatspecifika kompressorsuffixet till arkivfilnamnet. Ett tar -arkiv archive.tar, till exempel , heter archive.tar.gz , när det komprimeras av gzip.

Populära tarprogram som BSD- och GNU -versioner av tar stöder kommandoradsalternativen Z (komprimera), z (gzip) och j (bzip2) för att komprimera eller dekomprimera arkivfilen vid skapande eller uppackning. GNU tar från version 1.20 och framåt stöder också alternativet -lzma ( LZMA ). 1.21 extra stöd för lzop med --lzop . 1.22 extra stöd för xz med --xz eller -J . 1.23 lagt till stöd för lzip med --lzip . 1.31 lagt till stöd för zstd med --zstd . Dekomprimering av dessa format hanteras automatiskt om filnamnstillägg som stöds används och komprimering hanteras automatiskt med samma filnamnstillägg om alternativet -autokomprimera (kort form -a ) skickas till en tillämplig version av GNU tar.

MS-DOS : s 8.3 filnamnsbegränsningar resulterade i ytterligare konventioner för namngivning av komprimerade tjärarkiv. Denna praxis har dock minskat med FAT som nu erbjuder långa filnamn .

Tjärarkivering används ofta tillsammans med en komprimeringsmetod, till exempel gzip , för att skapa ett komprimerat arkiv. Som visas komprimeras kombinationen av filerna i arkivet som en enhet.
Filändelseekvivalenter
Lång Kort
.tar.bz2 .tb2, .tbz, .tbz2, .tz2
.tar.gz .taz, .tgz
.tar.lz
.tar.lzma .tlz
.tar.lzo
.tar.xz .txz
.tar.Z .tZ, .taZ
.tar.zst .tzst

Se även

Referenser

externa länkar