tjære (computing) - tar (computing)

tjære
Originale forfattere AT&T Bell Laboratories
Udvikler (er) Forskellige open-source og kommercielle udviklere
Første udgivelse Januar 1979 ; 42 år siden ( 1979-01 )
Stabil udgivelse
1.34 / 13. februar 2021 ; 8 måneder siden ( 2021-02-13 )
Skrevet i pdtar, stjerne, Plan 9 , GNU : C
Operativ system Unix , Unix-lignende , Plan 9 , Microsoft Windows , IBM i
Platform På tværs af platforme
Type Kommando
Licens pdtar: Public domain
star: CDDL
Plan 9: MIT
GNU: GPLv3+
tjære
Filnavn udvidelse
.tjære
Internetmedietype
ansøgning/x-tar
Uniform Type Identifier (UTI) public.tar-arkiv
Magisk nummer u s t a r \0 0 0  ved byte -offset 257 (til POSIX -versioner)

u s t a r \040 \040 \0  (for gammelt GNU -tjæreformat)

fraværende i pre-POSIX-versioner
Seneste udgivelse
forskellige
(forskellige)
Type format Filarkiver
Standard POSIX siden POSIX.1, i øjeblikket i definitionen af pax [1]
Åbent format ? Ja

I computing er tar et computersoftwareværktøj til at indsamle mange filer i en arkivfil , ofte omtalt som en tarball , til distribution eller backup. Navnet stammer fra " t ape ar chive", da det oprindeligt blev udviklet til at skrive data til sekventielle I/O -enheder uden noget eget filsystem. Arkivdatasættene oprettet af tar indeholder forskellige filsystemparametre , f.eks. Navn, tidsstempler, ejerskab, filadgangstilladelser og bibliotekorganisation .

Historie

Kommandolinjeværktøjet blev først introduceret i Version 7 Unix i januar 1979 og erstattede tp-programmet. Den filstruktur til lagring af disse oplysninger blev standardiseret i POSIX ,1-1988 og senere POSIX.1-2001, og blev en format, der understøttes af de fleste moderne fil arkiveringssystemer.

I dag indeholder Unix-lignende operativsystemer normalt værktøjer til understøttelse af tjærefiler samt hjælpeprogrammer, der normalt bruges til at komprimere dem, såsom gzip og bzip2 .

BSD-tar er blevet inkluderet i Microsoft Windows siden Windows 10 April 2018 Update , og der er ellers flere tredjepartsværktøjer til rådighed til at læse og skrive disse formater på Windows.

Den tjære kommando er også blevet porteret til IBM i operativsystemet.

Begrundelse

Mange historiske bånddrev læser og skriver datablokke med variabel længde , hvilket efterlader betydelig spildplads på båndet mellem blokke (for at båndet fysisk kan starte og stoppe med at bevæge sig). Nogle bånddrev (og rådiske) understøtter kun datablokke med fast længde. Når du skriver til et hvilket som helst medium, f.eks. Et filsystem eller et netværk, tager det også mindre tid at skrive en stor blok end mange små blokke. Derfor skriver tar -kommandoen data i optegnelser over mange 512  B -blokke. Brugeren kan angive en blokeringsfaktor, som er antallet af blokke pr. Post. Standarden er 20, hvilket producerer 10  KiB -poster.

Filformat

Et tjærearkiv består af en række filobjekter, deraf det populære udtryk tarball , der refererer til, hvordan en tarball samler objekter af alle slags, der klæber til overfladen. Hvert filobjekt indeholder alle fildata og forud for en 512-byte header- post. Fildataene skrives uændret, bortset fra at længden er afrundet til et multiplum på 512 bytes. Den oprindelige tjæreimplementering var ligeglad med indholdet af polstringsbytes og efterlod bufferdataene uændrede, men de fleste moderne tjæreimplementeringer fylder det ekstra rum med nuller. Slutningen af ​​et arkiv er markeret med mindst to på hinanden følgende nulfyldte poster. (Oprindelsen til tjærens rekordstørrelse ser ud til at være de 512-bytes disksektorer, der bruges i Version 7 Unix-filsystemet.) Den sidste blok i et arkiv er fyldt ud i fuld længde med nuller.

Header

Filoverskriftsposten indeholder metadata om en fil. For at sikre portabilitet på tværs af forskellige arkitekturer med forskellige byteordrer , er oplysningerne i overskriftsposten kodet i ASCII . Så hvis alle filerne i et arkiv er ASCII -tekstfiler og har ASCII -navne, så er arkivet i det væsentlige en ASCII -tekstfil (indeholdende mange NUL -tegn ).

Felterne defineret af det originale Unix -tjæreformat er angivet i nedenstående tabel. Linkindikatoren/filtypetabellen indeholder nogle moderne udvidelser. Når et felt er ubrugt, er det fyldt med NUL -bytes. Overskriften bruger 257 bytes og er derefter polstret med NUL -bytes for at få den til at fylde en 512 byte -post. Der er ikke noget "magisk nummer" i overskriften til filidentifikation.

Pre-POSIX.1-1988 (dvs. v7) tjæreoverskrift:

Feltforskydning Feltstørrelse Mark
0 100 Filnavn
100 8 Filtilstand (oktal)
108 8 Ejerens numeriske bruger -id (oktal)
116 8 Gruppens numeriske bruger -id (oktal)
124 12 Filstørrelse i bytes (oktal)
136 12 Sidste ændringstid i numerisk Unix -tidsformat (oktal)
148 8 Checksum for header record
156 1 Linkindikator (filtype)
157 100 Navnet på den linkede fil

Indikatorfeltet før POSIX.1-1988 Link kan indeholde følgende værdier:

Link indikator felt
Værdi Betyder
'0' eller ( ASCII NUL ) Normal fil
'1' Hårdt link
'2' Symbolsk led

Nogle tjæreimplementeringer før POSIX.1-1988 angav et bibliotek ved at have et skråstreg (/) i navnet.

Numeriske værdier er kodet i oktale tal ved hjælp af ASCII -cifre med ledende nuller. Af historiske årsager bør der også bruges et sidste NUL- eller mellemrumstegn . Selvom der er 12 bytes forbeholdt lagring af filstørrelsen, kan der kun gemmes 11 oktalcifre. Dette giver en maksimal filstørrelse på 8 gigabyte på arkiverede filer. For at overvinde denne begrænsning introducerede stjernen i 2001 en base-256-kodning, der er angivet ved at indstille højordensbiten i den længste byte i et numerisk felt. GNU-tjære og BSD-tjære fulgte denne idé. Derudover dæmper versioner af tjære fra før den første POSIX -standard fra 1988 værdierne med mellemrum i stedet for nuller.

Den checksum beregnes ved at tage summen af de usignerede byte værdier af header record med de otte checksum byte er truffet for at være ASCII rum (decimal værdi 32). Det gemmes som et sekscifret oktalt tal med førende nuller efterfulgt af et NUL og derefter et mellemrum. Forskellige implementeringer overholder ikke dette format. Derudover behandlede nogle historiske tjæreimplementeringer bytes som underskrevet. Implementeringer beregner typisk kontrolsummen begge veje og behandler det som godt, hvis enten den underskrevne eller usignerede sum matcher den medfølgende checksum.

Unix -filsystemer understøtter flere links (navne) til den samme fil. Hvis flere sådanne filer vises i et tar -arkiv, arkiveres kun den første som en normal fil; resten arkiveres som hårde links, hvor feltet "navn på linket fil" er indstillet til den første persons navn. Ved ekstraktion skal sådanne hårde links genskabes i filsystemet.

UStar -format

De fleste moderne tjæreprogrammer læser og skriver arkiver i UStar ( Unix Standard TAR ) -formatet, introduceret af POSIX IEEE P1003.1 -standarden fra 1988. Det introducerede yderligere headerfelter. Ældre tjæreprogrammer ignorerer de ekstra oplysninger (muligvis udtrækning af delvist navngivne filer), mens nyere programmer tester tilstedeværelsen af ​​"ustar" -strengen for at afgøre, om det nye format er i brug. UStar -formatet giver mulighed for længere filnavne og gemmer yderligere oplysninger om hver fil. Den maksimale filnavnstørrelse er 256, men den er delt mellem en foregående sti "filnavn -præfiks" og selve filnavnet, så det kan være meget mindre.

Feltforskydning Feltstørrelse Mark
0 156 (Flere felter, samme som i det gamle format)
156 1 Skriv flag
157 100 (Samme felt som i det gamle format)
257 6 UStar -indikatoren "ustar" derefter NUL
263 2 UStar version "00"
265 32 Ejerens brugernavn
297 32 Ejergruppens navn
329 8 Enhedens hovednummer
337 8 Enhedens mindre nummer
345 155 Filnavn præfiks

Den type, flag felt kan have følgende værdier:

Skriv flagfelt
Værdi Betyder
'0' eller ( ASCII NUL ) Normal fil
'1' Hårdt link
'2' Symbolsk led
'3' Karakter speciel
'4' Blok special
'5' Vejviser
'6' FIFO
'7' Sammenhængende fil
'g' Globalt udvidet header med metadata (POSIX.1-2001)
'x' Udvidet header med metadata til den næste fil i arkivet (POSIX.1-2001)
'A' - 'Z' Leverandørspecifikke udvidelser (POSIX.1-1988)
Alle andre værdier Reserveret til fremtidig standardisering

POSIX. .

Type '7' (sammenhængende fil) er formelt markeret som reserveret i POSIX -standarden, men var beregnet til at angive filer, der skulle tildeles kontinuerligt på disken. Få operativsystemer understøtter oprettelse af sådanne filer eksplicit, og derfor understøtter de fleste TAR -programmer dem ikke og behandler type 7 -filer som om de var type 0 (almindelige). En undtagelse er ældre versioner af GNU tar, når de kører på MASSCOMP RTU (Real Time Unix) operativsystem, som understøttede et O_CTG flag til funktionen open () for at anmode om en sammenhængende fil; denne understøttelse blev imidlertid fjernet fra GNU tar version 1.24 og fremefter.

POSIX.1-2001/pax

I 1997 foreslog Sun en metode til tilføjelse af udvidelser til tjæreformatet. Denne metode blev senere accepteret for POSIX.1-2001-standarden. Dette format er kendt som udvidet tjæreformat eller pax -format. Det nye tjæreformat giver brugerne mulighed for at tilføje enhver form for leverandørmærkede leverandørspecifikke forbedringer. Følgende tags er defineret af POSIX -standarden:

  • atime , mtime : alle tidsstempler for en fil i vilkårlig opløsning (de fleste implementeringer bruger nanosekund -granularitet)
  • sti : stienavne med ubegrænset længde og tegnsætkodning
  • linkpath : symlink målnavne med ubegrænset længde og tegnsætkodning
  • uname , gname : bruger- og gruppenavne med ubegrænset længde og tegnsætkodning
  • størrelse : filer med ubegrænset størrelse (det historiske tjæreformat er 8 GB)
  • uid , gid : userid og groupid uden størrelsesbegrænsning (dette historiske tjæreformat var begrænset til en maks. id på 2097151)
  • en tegnsætdefinition for stinavne og bruger-/gruppenavne ( UTF-8 )

I 2001 blev Star -programmet den første tjære til at understøtte det nye format. I 2004 understøttede GNU tar det nye format, selvom det ikke skriver dem som standardoutput fra tjæreprogrammet endnu.

Det er designet, så alle implementeringer, der kan læse UStar-formatet, også vil kunne læse POSIX.1-2001. De eneste undtagelser er filer, der gør brug af udvidede funktioner, f.eks. Længere filnavne. For kompatibilitet er disse kodet i tjærefilerne som specielle xeller gtypefiler. typisk under et PaxHeaders.XXXXbibliotek. En Pax-understøttende implementering ville gøre brug af oplysningerne, mens ikke-understøttende dem som 7-Zip ville behandle dem som ekstra filer.

Begrænsninger

Det originale tjæreformat blev oprettet i de tidlige dage af Unix, og på trods af den nuværende udbredte anvendelse betragtes mange af dets designfunktioner som dateret.

Mange ældre tjæreimplementeringer registrerer eller gendanner ikke udvidede attributter (xattrs) eller adgangskontrolister (ACL'er). I 2001 introducerede Star support til ACL'er og udvidede attributter gennem sine egne tags til POSIX.1-2001 pax. Bsdtar bruger stjerneudvidelserne til at understøtte ACL'er. Nyere versioner af GNU -tar understøtter Linux -udvidede attributter og genimplementerer stjerneudvidelser. En række udvidelser gennemgås i filtypehåndbogen for BSD tjære, tjære (5).

Andre formater er blevet oprettet for at afhjælpe manglerne ved tjære.

Tarbomb

En tarbomb , i hacker -slang , er en tjærefil, der indeholder mange filer, der udtrækkes i arbejdskataloget. En sådan tar -fil kan skabe problemer ved at overskrive filer med samme navn i arbejdskataloget eller blande et projekts filer i et andet. Det er i bedste fald en ulempe for brugeren, som er forpligtet til at identificere og slette et antal filer, der er spredt med bibliotekets andet indhold. Sådan opførsel betragtes som en dårlig etiket fra arkivets skaber.

Et relateret problem er brugen af absolutte stier eller overordnede biblioteksreferencer, når der oprettes tjærefiler. Filer, der udtrækkes fra sådanne arkiver, vil ofte blive oprettet på usædvanlige steder uden for arbejdskataloget og har ligesom en tarbomb potentiale til at overskrive eksisterende filer. Moderne versioner af FreeBSD og GNU tar opretter eller udtrækker imidlertid ikke absolutte stier og overordnede biblioteksreferencer som standard, medmindre det eksplicit er tilladt med flaget -Peller indstillingen --absolute-names. Bsdtar-programmet, som også er tilgængeligt på mange operativsystemer og er standard tjæreværktøj på Mac OS X v10.6, følger heller ikke overordnede biblioteksreferencer eller symbolske links.

Hvis en bruger kun har en meget gammel tjære tilgængelig, som ikke indeholder disse sikkerhedsforanstaltninger, kan disse problemer afhjælpes ved først at undersøge en tar -fil ved hjælp af kommandoen tar tf archive.tar, som viser indholdet og gør det muligt at udelukke problematiske filer bagefter. Disse kommandoer udtrækker ingen filer, men viser navnene på alle filer i arkivet. Hvis nogen er problematiske, kan brugeren oprette et nyt tomt bibliotek og pakke arkivet ud i det - eller undgå tar -filen helt. De fleste grafiske værktøjer kan vise indholdet i arkivet, før de udtrækkes. Vim kan åbne tjærearkiver og vise deres indhold. GNU Emacs er også i stand til at åbne et tjærearkiv og vise dets indhold i en diret buffer.

Tilfældig adgang

Tjæreformatet blev designet uden et centraliseret indeks eller indholdsfortegnelse for filer og deres egenskaber til streaming til tape -backupenheder. Arkivet skal læses i rækkefølge for at liste eller udtrække filer. For store tjærearkiver forårsager dette en præstationsstraf, hvilket gør tjærearkiver uegnede til situationer, der ofte kræver tilfældig adgang til individuelle filer.

Dubletter

Et andet problem med tjæreformat er, at det tillader flere (muligvis forskellige) filer i arkivet at have identisk sti og filnavn. Ved udtrækning af et sådant arkiv overskriver normalt den sidstnævnte version af en fil den første.

Dette kan oprette en ikke-eksplicit (uklar) tarbomb, som teknisk set ikke indeholder filer med absolutte stier eller henvisende overordnede mapper, men stadig forårsager overskrivning af filer uden for det nuværende bibliotek (f.eks. Kan arkivet indeholde to filer med samme sti og filnavn, hvoraf den første er et symlink til et sted uden for det aktuelle bibliotek, og hvoraf det andet er en almindelig fil; derefter kan udtræk af et sådant arkiv på nogle tjæreimplementeringer forårsage skrivning til det sted, som symlinket peger på).

Nøgleimplementeringer

Historisk set har mange systemer implementeret tjære, og mange generelle filarkiver har i det mindste delvis understøttelse af tjære (ofte ved hjælp af en af ​​implementeringerne herunder). Tjærens historie er en historie om uforeneligheder, kendt som "tjærkrigene". De fleste tjæreimplementeringer kan også læse og oprette cpio og pax (sidstnævnte er faktisk en tjæreformat med POSIX -2001 -udvidelser).

Nøgleimplementeringer i oprindelsesrækkefølge:

  • Solaris tjære , baseret på den originale Unix V7 tjære og kommer som standard på Solaris operativsystem
  • GNU tar er standard på de fleste Linux -distributioner. Det er baseret på public domain implementering pdtar, der startede i 1987. Seneste versioner kan bruge forskellige formater, herunder ustar, pax, GNU og v7 formater.
  • FreeBSD tjære (også BSD tjære ) er blevet den standard tjære på de fleste Berkeley Software Distribution -baseret operativsystemer, herunder Mac OS X . Kernefunktionen er tilgængelig som libarkiv til inkludering i andre applikationer. Denne implementering registrerer automatisk filformatet og kan udtrække fra tar, pax, cpio, zip, jar, ar, xar, rpm og ISO 9660 cdrom -billeder. Det leveres også med en funktionelt ækvivalent cpio kommandolinjegrænseflade.
  • Schily tjære , bedre kendt som stjerne , er historisk vigtig, da nogle af dens udvidelser var ret populære. Det er den ældste gratis tjære fra 1982.

Derudover kan de fleste pax- og cpio -implementeringer læse og oprette mange typer tjærefiler.

Suffikser til komprimerede filer

tar -arkivfiler har normalt filsuffikset .tar (f.eks. somefile.tar ).

En tar -arkivfil indeholder ukomprimerede byte -streams af de filer, den indeholder. For at opnå arkivkomprimering er der en række forskellige komprimeringsprogrammer tilgængelige, såsom gzip , bzip2 , xz , lzip , lzma , zstd eller compress , som komprimerer hele tjærearkivet . Typisk modtager arkivets komprimerede form et filnavn ved at tilføje det formatspecifikke kompressorsuffiks til arkivfilnavnet. For eksempel hedder et tar -arkiv archive.tar , archive.tar.gz , når det komprimeres af gzip.

Populære tjæreprogrammer som BSD- og GNU -versionerne af tar understøtter kommandolinjemulighederne Z (komprimere), z (gzip) og j (bzip2) til at komprimere eller dekomprimere arkivfilen ved oprettelse eller udpakning. GNU tar fra version 1.20 og fremefter understøtter også muligheden -lzma ( LZMA ). 1.21 tilføjet support til lzop med --lzop . 1.22 tilføjet understøttelse af xz med --xz eller -J . 1.23 tilføjet understøttelse af lzip med --lzip . 1.31 tilføjet support til zstd med --zstd . Dekompressionen af ​​disse formater håndteres automatisk, hvis understøttede filnavnudvidelser bruges, og komprimering håndteres automatisk ved hjælp af de samme filnavnudvidelser, hvis valgmuligheden -automatisk komprimering (kort form -a ) sendes til en gældende version af GNU tar.

MS-DOS ' 8,3 filnavnbegrænsninger resulterede i yderligere konventioner for navngivning af komprimerede tjærearkiver. Denne praksis er imidlertid faldet med FAT, der nu tilbyder lange filnavne .

Tjærearkivering bruges ofte sammen med en komprimeringsmetode, f.eks. Gzip , til at oprette et komprimeret arkiv. Som vist komprimeres kombinationen af ​​filerne i arkivet som en enhed.
Ækvivalenter for fil
Lang 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 også

Referencer

eksterne links