# Tar (informatica)

In de informatica is tar (afgeleid van tape archive) zowel een bestandsformaat (in de vorm van een soort archief bitstream) als de naam van een programma dat gebruikt wordt om dergelijke bestanden te verwerken. Het formaat werd opgericht in de vroege dagen van Unix en gestandaardiseerd door POSIX.1-1988 en later POSIX.1-2001.
In eerste instantie werd het ontwikkeld om gegevens te schrijven naar sequentiële I/O-apparaten voor tape back-up doeleinden. Nu wordt tar vooral gebruikt om een groot aantal bestanden te verzamelen in een groter bestand voor distributie of archivering, terwijl het de bestandssysteeminformatie zoals gebruikers- en groepsrechten, data en directory structuren behoudt.

## Uitleg

Veel historische tapedrives lezen en schrijven datablokken van variabele lengte, waardoor aanzienlijke verspilde ruimte op de band tussen de blokken achtergelaten wordt. Dit heeft als gevolg voor de band dat er vaak fysiek gestart en gestopt moet worden, dus veel bewegingen. Sommige tapedrives (en harde schijven) ondersteunen alleen datablokken van een vaste lengte. Ook bij het schrijven naar een medium zoals een bestandssysteem of het netwerk kost het minder tijd om een groot blok te schrijven dan vele kleine blokken. Daarom schrijft het tar-commando gegevens in blokken van (veelvouden van) 512 byte. De gebruiker kan voor de blokgrootte een factor specifiëren - dat is het aantal records per blok opgeven, de standaard is 20 (waarmee 10 kilobyte-blokken ontstaan - dit was groot toen UNIX werd uitgevonden, maar lijkt nu vrij klein).

## Formaatdetails

Een tar-archief bestaat uit een reeks van bestandsobjecten. Elk bestandsobject bevat de folders en wordt voorafgegaan door een 512-byte header-record. De bestandsdata wordt onveranderd geschreven, behalve dat zijn lengte wordt afgerond op een veelvoud van 512 bytes en de extra ruimte wordt gevuld met null-bytes. Het einde van een archief wordt gekenmerkt door ten minste twee opeenvolgende null-gevulde records. (De oorsprong van tar's recordformaat blijken de 512-byte schijfsectoren, gebruikt in het versie 7 Unix-bestandssysteem, te zijn.) Het laatste blok van een archief wordt gespekt tot de volledige lengte met nul-bytes.

### File header

Het bestand header-record bevat metadata over een bestand. Om portabiliteit te verzekeren over verschillende architecturen met verschillende byte ordeningen, wordt de informatie in de header gecodeerd in ASCII. Dus als alle bestanden in een archief tekstbestanden zijn, en ASCII-namen hebben, dan is het archief is in wezen een ASCII-tekstbestand (met veel NULL-karakters).
Latere uitbreidingen hebben dit originele attribuut verdund (wat nooit bijzonder waardevol was vanwege de aanwezigheid van NULLEN, die veelal worden behandeld door tekst-manipulatieprogramma's).
De velden, die volgens het originele Unix tar-formaat gedefinieerd zijn, staan in de onderstaande tabel. De link indicatie/bestandstype tabel bevat enkele moderne uitbreidingen. Als een veld niet gebruikt wordt is het gevuld met NULL-bytes. De hoofding is opgevuld met NULL-bytes om een 512 byte record te vullen.
Pre-POSIX.1-1988 tar hoofding:
| Veld Begin | Veldgrootte | Veld |
| 0 | 100 | Bestandsnaam |
| 100 | 8 | Bestandsmode |
| 108 | 8 | Numeriek gebruikers-ID van de eigenaar |
| 116 | 8 | Numeriek gebruikers-ID van de groep |
| 124 | 12 | Bestandsgrootte in bytes (octale basis) |
| 136 | 12 | Laatste wijziging tijd in numeriek Unix tijdsformaat (octaal) |
| 148 | 8 | Checksum voor header record |
| 156 | 1 | Link indicator (bestandstype) |
| 157 | 100 | Naam van gelinkt bestand |
Het pre-POSIX.1-1988 Link indicator veld kan de volgende waarden hebben:
Link indicator veld :
| Waarde | Betekenis |
| '0' or (ASCII NULL) | Normaal bestand |
| '1' | Harde link |
| '2' | Symbolische link |