TAR

Aus Lowlevel
Wechseln zu:Navigation,
Diese Seite oder Abschnitt ist zwar komplett, es wird aber folgende Verbesserungen gewünscht:

Tutorial fertigschreiben

Hilf Lowlevel, den Artikel zu verbessern.


Allgemeines

Zuerst einmal ein paar allgemeine Informationen zu TAR und diesem Artikel.

Worum geht es in diesem Artikel?

Da ich selbst als InitRD-Image das TAR-Format erwählt habe, möchte ich dieses nun hier beschreiben. Zwischendrinne werden dann noch ein paar Code-Abschnitte eingebaut, um zu zeigen, wie man alle Dateien in einem solchen Archiv durchläuft oder nur bestimmte Dateien innerhalb eines Ordners im Archiv.

Was ist TAR und welche Vorteile habe ich damit?

ToDo: Allgemeine Beschreibung von TAR
Der Vorteil von TAR ist, dass hierfür unter bestehenden System wie Windows oder *nix bereits Tools vorhanden sind, die Archive in diesem Format erstellen können. Das heißt, dass dadurch zum einen der Aufwand minimiert wird, da das Programm an sich bereits vorhanden ist und zum anderen dadurch die Fehlerquellen minimiert werden, da die bereits vorhandenen Programme wie "tar" oder "7-zip" Fehlerfrei laufen sollten.


Aufbau eines TAR-Archivs

ToDo: Text schreiben

Allgemeines

TAR legt alle Dateien hintereinander mit einem Header voran ab. Möchte man das ganze Komprimieren, so kann man gzip oder bzip2 nehmen. Allerdings wird dies dann auch im Kernel gebraucht, falls es ausführbare Programme oder Module für den Kernel beinhaltet. Hinweis: Alle Daten im TAR-Header werden als ASCII-Zeichen abgelegt. Wenn man also z.B. die größe einer Datei ermitteln möchte, so muss man in diesem Fall das Feld "size" erst einmal in eine Zahl umwandeln und dann, da dieses Oktal vorliegt, ins dezimale oder hexadezimale umrechnen.

Unterschied TAR-USTAR

ToDo: Text schreiben

TAR

Header

Dieser Header ist vor jeder Datei/jedem Verzeichnis/jedem Link und gibt uns Informationen wie z.B. wie Groß ist die Datei oder handelt es sich um einen symbolischen Link.

Byte Länge Name
0 100 name
100 8 mode
108 8 uid
116 8 gid
124 12 size
136 12 mtime
148 8 chksum
156 1 link
157 100 linkname

name

Hier liegt der Name der archivierten Datei. Dieser String kann 0-Terminiert sein, muss es aber nicht. Sollten tatsächlich alle 100 Zeichen des Feldes für den Name gebraucht werden, muss daran gedacht werden, die 0-Terminierung anzuhängen, wenn man diesen Ausgeben möchte.

mode

uid

gid

size

Dieses Feld enthält die Größe der eigentlichen Datei. Allerdings werden alle Zahlen in einem TAR-Archiv zum einen als String abgelegt und zum anderen Oktal. Möchte man also die Größe der Datei z.B. leserlich ausgeben, so muss man die Oktalzahl zuerst in eine Dezimalzahl umwandeln.

mtime

chksum

link

Wert
0 normale Datei
1 verlinkte Datei
2 symbolischer Link

linkname

Handelt es sich bei der Datei um einen Link, so ist der Name der verlinkten Datei in diesem Feld. Wie auch beim Attribut "name" kann es sein, dass die 0-Terminierung vorhanden ist, es muss aber nicht.

USTAR-Header

Header

Byte Länge Name
0 100 name
100 8 mode
108 8 uid
116 8 gid
124 12 size
136 12 mtime
148 8 chksum
156 1 link
157 100 linkname
257 6 magic
263 2 version
266 32 uname
298 32 gname
330 8 devmajor
338 8 devminor
346 155 prefix

name

mode

uid

gid

size

mtime

chksum

link

linkaname

magic

version

uname

gname

devmajor

devminor

prefix