TAR
Diese Seite oder Abschnitt ist zwar komplett, es wird aber folgende Verbesserungen gewünscht: Tutorial fertigschreiben Hilf Lowlevel, den Artikel zu verbessern. |
Inhaltsverzeichnis
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. Währenddessen werden 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 Archiv komprimieren, so kann man z. B. 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 diese dann, da sie oktal vorliegt, ins gewünschte Zahlensystem umrechnen.
Unterschied TAR-USTAR
ToDo: Text schreiben
TAR
Header
Dieser Header ist vor jeder Datei/jedem Verzeichnis/jedem Link und gibt uns Informationen z. B. über die Größe der Datei oder darüber, ob es sich um einen symbolischen Link handelt.
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 nullterminiert sein, muss es aber nicht. Sollten tatsächlich alle 100 Zeichen des Feldes für den Name gebraucht werden, muss daran gedacht werden, die Nullterminierung 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. dezimal 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 befindet sich der Name der verlinkten Datei in diesem Feld. Wie auch beim Attribut „name“ kann es sein, dass die Nullterminierung 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 |