Einige technische Vergleiche unter v7
, ustar
und pax
Formate:
v7
Das Format vor POSIX.1-1988.
- Die maximale Länge eines Dateinamens beträgt 99 Zeichen. (100 Bytes minus ein abschließendes Nullbyte.)
- Die maximale Länge eines Linkziels beträgt 99 Zeichen.
- Zulässige Dateitypen: reguläre Datei (Typeflag
'\0'
), Verzeichnis, Hardlink (Typeflag 1
), symbolischer Link (Typeflag 2
). Verzeichnis wird durch den Schrägstrich in dem identifizierten Namen Feld. Referenz 1
- Die maximale Dateigröße beträgt 8589934591 Byte (8 GiB - 1).
- Speichert numerische Benutzer-IDs und Gruppen-IDs. Speichert keine Benutzer- und Gruppennamen. Die maximale UID und GID beträgt 2097151 (oktal 7777777).
- Speichert die Änderungszeit. Der maximal zulässige Zeitstempel im Format beträgt 2242-03-16 12:56:31 UTC (8589934591 Sekunden seit der Epoche). Teerleser können sie jedoch aufgrund des Problems des Jahres 2038 in 32-Bit-Systemen möglicherweise nicht erkennen .
ustar
ustar erweitert den Headerblock aus dem v7-Format, und wenn es nicht komprimiert ist, ist die Größe eines ustar-Tarballs identisch mit der von v7-Tarball. Es gibt keinen großen Grund, das v7-Format zu bevorzugen, es sei denn, Sie entfernen absichtlich Informationen, die ustar archivieren würde.
- Die maximale Länge eines Dateinamens beträgt 256 ASCII-Zeichen, wenn der Pfad perfekt in ein 155-Byte- Präfix , einen Schrägstrich und einen 100-Byte- Namensteil aufgeteilt werden kann . ustar bietet zusätzlichen Präfix Feld zusätzliche Komponenten des Wegs zum Speichern, aber die Felder haben Split auf den Verzeichnis - Separatoren sein, so dass Sie nicht erlaubt sind länger einen Dateinamen zu haben , als 100 Bytes, noch einen Verzeichnisnamen länger als 155 Bytes.
- Die maximale Länge eines Linkziels beträgt 100 Zeichen. (Dh es ist nicht mehr erforderlich, das Null-Byte zu beenden.)
- Zulässige Dateitypen: reguläre Datei (Typflag
'\0'
oder 0
), Verzeichnis (mit Typflag markiert 5
), fester Link, symbolischer Link, Zeichengerät ( 3
), Blockgerät ( 4
), FIFO ( 6
). (Vendor Erweiterungen auf Dateitypen werden in erlaubt A
durch Z
.)
- Maximale Dur und Moll- Zahlen für Gerätedateien sind beide 2097151 (Oktal 7777777).
- Speichert Benutzer- und Gruppennamen sowie UID und GID. Benutzer- und Gruppennamen sind in ASCII und enthalten jeweils maximal 32 Zeichen.
- Das Dateigrößenlimit, das UID / GID-Limit und das Zeitstempellimit bleiben dieselben wie im v7-Format.
ustar weist geringfügige, abwärtskompatible Unterschiede zum vorstandardisierten v7-Format auf - den Typflags 0
und 5
für reguläre Dateien bzw. Verzeichnisse. In Version 7 gibt das Typflag- Feld nur Links und keine anderen Dateitypen an.
pax
pax erweitert das ustar-Format um (optionale) Extended-Header-Blöcke. Diese Extended-Header sehen beim Extrahieren durch alte Tar-Programme wie normale Textdateien aus. Die erweiterten Header werden intern mit Typflags x
(erweiterter Datei-Header) und g
(globaler erweiterter Header) identifiziert . Ihre unbegrenzte Erweiterbarkeit bedeutet auch, dass Pax Tarball normalerweise größer als Ustar ist. Es ist gut für die Archivierung, aber ein bisschen aufgebläht für ein Format für die Softwareverteilung.
pax ist eine Obermenge des Ustar-Formats - ein Pax-Tarball unterscheidet sich nicht von Ustar, wenn alle erweiterten Header entfernt werden.
Sie können lesen , diese für das, was in pax - Format erweitert werden. Aber im Vergleich zu Ustar zusammenfassend:
- Dateinamen und Pfadnamen können unbegrenzt lang sein (über das
path=
Schlüsselwort im erweiterten Header).
- Linkziele können unbegrenzt lang sein (
linkpath=
Schlüsselwort)
size
(Dateigröße), uid
(Benutzer-ID), uname
(Benutzername), gid
(Gruppen-ID), gname
(Gruppenname) sind alle auf unbegrenzte Länge erweiterbar.
- UTF-8 - Kodierung für die
path
, linkpath
, uname
und gname
.
- Zeitstempel ermöglichen eine Genauigkeit von weniger als einer Sekunde und möglicherweise eine unbegrenzte Länge, können jedoch (noch) keine Schaltsekunden speichern , da das Format "Anzahl der Sekunden seit der Epoche" lautet . Sekundenbruchteile sind dezimal.
- Die Dateizugriffszeit (
atime
) kann zusammen mit der Änderungszeit ( mtime
) gespeichert werden .
Hinweis: POSIX schreibt kein Dateinamenmuster zum Speichern erweiterter Header vor, sodass Implementierungen frei sind, beliebige Namensmuster zu erstellen. In GNU tar wird beispielsweise das Namensmuster über die --pax-option=exthdr.name=
Option gesteuert . Wenn Sie vorhaben, einen deterministischen Tarball (unter tar
/ pax
Implementierungen) zu erstellen , achten Sie darauf.
Gnu- und Oldgnu-Formate
Laut GNU-Teerhandbuch basierte GNU-Teer auf dem frühen Entwurf des POSIX.1- ustar
Standards. Aber GNU-Erweiterungen tar
machen es mit dem ustar
Format inkompatibel . Wenn Sie ein tragbares Archiv machen wollen, sollten Sie GNU tar - Format vermeiden und die Gunst pax
oder ustar
statt.
Das GNU-Teerformat kann mit dem magischen Feld (8 Bytes) von identifiziert werden ustar<space><space><nul>
, verglichen mit den magischen Feldern und Versionsfeldern von ustar ustar<nul>00
.
Das GNU-Tar-Format ist dennoch abwärtskompatibel mit dem v7-Format.
- GNU tar hat eine unbegrenzte Länge für Dateinamen und Linkziele. Im Gegensatz
ustar
dass Verwendungen Präfix den Pfad erstreckt, GNU tar speichert die langen Dateinamen in einem (nicht Pax) erweiterte Header - Feld, das typeflag hat L
. In ähnlicher Weise werden Verknüpfungsziele durch einen erweiterten Header mit Typeflag erweitert K
.
- Das GNU-Tar-Format speichert atime (Zugriffszeit) und ctime (Statusänderungszeit) in zusätzlichen Header-Feldern zusammen mit mtime, das bereits im v7-Format verfügbar ist.
- Das GNU-Tar-Format unterstützt zusätzliche Dateitypen im Vergleich zu ustar ( Referenz 2 ):
- Verzeichnis in inkrementeller Sicherung ( "dumpdir" , typeflag
D
). Siehe GNU-Teeroption --incremental
.
- Fortsetzung der Dateidaten für ein mehrbändiges Archiv (Typeflag
M
). Siehe GNU-Teeroption --multi-volume
.
- Sparse-Datei (Typflag
S
).
- Volume-Header (Typeflag
V
) oder eine Bezeichnung für das Archiv-Volume. Siehe GNU-Teeroption --label
.
- Der Unterschied zwischen den Formaten
oldgnu
(GNU tar <= 1.12) und gnu
(GNU tar> = 1.13.12) ist für Endbenutzer gering, jedoch gemäß Handbuch und create.c und NEWS aus dem Quellcode gibt es mindestens zwei Unterschiede:
oldgnu
Das Format beendet die Dateinamen, Benutzernamen und Gruppennamen der Zeichenfolgen immer mit Null-Bytes. (Dies bedeutet, dass Dateinamen maximal 99 Zeichen enthalten, bevor ein erweiterter Header verwendet wird.)
- GNU 1.13.12 und höher kann versuchen, die Felder uid , gid , mtime , devmajor und devminor zu "quetschen" , indem sie in vorzeichenbehafteten Big-Endian-Binärzahlen ausgegeben werden, wenn sie zu groß sind, um in ASCII-Oktalen innerhalb der Felder dargestellt zu werden. Dadurch wird die maximale UID- und GID-Grenze auf [-2 ^ 56, 2 ^ 56-1] und die Haupt- und Nebenzahlen des Geräts auf [-2 ^ 56, 2 ^ 56-1] erhöht. (Die Darstellungen im Quellcode reservieren einige Bits, um Kollisionen mit der ASCII-Darstellung zu verhindern.)
pax
Format nicht! In der Zwischenzeit unterstützt BSD pax (1) POSIX.1-1988ustar
undcpio
GNU und BSD tar (1) unterstützen das POSIX-2001-pax
Format.