Tar eine Anleitung – packen, entpacken und komprimieren

Dieser Artikel stellt eine Anleitung des Archivierungstool „Tar“ dar. Ich werde die absoluten „Basics“ erläutern und darüber hinaus einige Kniffe und sinnvolle Anwendungsbeispiele vorführen.

Tar ist wie oben bereits erwähnt ein Archivierungstool, das heißt du kannst beliebig viele Dateien zu einer Datei, also zu einem Archiv, zusammenfügen. Tar an sich ist kein Komprimierungstool, aber mit der „Erweiterung“/Option gzip kannst du deine erstellten Archive auch komprimieren, dazu später mehr.

Wir beginnen mit einer kleinen Auflistung der möglichen Aktionen und Optionen:

Aktion Beschreibung
-c (create) erstellt ein Archiv.
-t (table) gibt das Inhaltsverzeichnis des Archivs an.
-r (recreate) fügt eine Datei zu einem Archiv hinzu
-d (diff) vergleicht Dateien und gibt Unterschiede an
-x (extract) extrahiert die Dateien aus dem angesprochenen Archiv, die Dateien bleiben im Archiv enthalten.

Soviel zu den möglichen Aktionen, die durchgeführt werden können. Wir machen mit den Optionen weiter:

Option Beschreibung
-f Gibt im weiteren Sinne den Dateinamen an. Und ist quasi bei jedem Tar-Befehl Pflicht.
-v (verbose) Zeigt alle Schritte die während des Archivierens gemacht werden.
-vv (very verbose) Ist äquivalent zu -v, allerdings gibt -vv noch detailliertere Informationen.
-z Komprimiert das Archiv mit „gzip“
-C Gibt an wo die Daten wiederhergestellt werden sollen
-P Archiviert die Dateien vom Wurzelverzeichnis „/“ ausgehend
--exclude=
<Dateiname>
Schließt eine Datei oder Ordner aus
-X <Liste>.list Verlangt eine Liste mit auszuschließenden Dateien.

Nach diesem bisschen Theorie kommen jetzt einige Beispiele zu den Aktionen und Optionen.

Archive erstellen

Zunächst die rohe Syntax:

tar -cvf <Archivname>.tar <Dateien>

In der Praxis würde der Befehl wie folgt aussehen.

ubuntu@meinubuntu.de:~/Desktop$ tar -cvf test2.tar todo.txt
todo.txt
ubuntu@meinubuntu.de:~/Desktop$

Wie du siehst zeigt Tar uns die Dateien an, die er mit in das Archiv packt. Wir verdanken dieses Verhalten der Option „-v“, die Option ist Optional d.h. der Befehl funktioniert auch ohne das „v“.

Wir kommen zu einem etwas komplizierteren Beispiel. An dieser Stelle wird es Praxisnah, in diesem Beispiel sichere ich mein gesamtes „Home-Verzeichnis“

ubuntu@meinubuntu.de:~/Desktop/test$ tar -cvf /backups/home_backup.tar /home/buero

tar: Entferne führende „/“ von Elementnamen
/home/buero/
/home/buero/tst
/home/buero/sek2/
/home/buero/sek2/.bash_logout
/home/buero/sek2/Examples
/home/buero/sek2/Nettiquette
/home/buero/sek2/.bashrc
/home/buero/sek2/.profile
/home/buero/sek1/
/home/buero/sek1/.bash_logout
/home/buero/sek1/Examples
/home/buero/sek1/Nettiquette
/home/buero/sek1/.bashrc
/home/buero/sek1/.profile
ubuntu@meinubuntu.de:~/Desktop/test$

Diese Ausgabe müssen wir etwas breiter erläutern, um zu verstehen was passiert ist. Zunächst noch einmal der Befehl „tar -cvf /backups/home_backup.tar /home/buero“.

Der Befehl beginnt wie gewohnt zu beginn steht „tar“ und darauf folgen die Optionen die wir verwenden möchten „-cvf“, dann kommt allerdings die erste Besonderheit: „/backups/home_backup.tar“.
Wieso wird hier ein Pfad mit angegeben?
Der Pfad gibt hier eigentlich nur den Ort an, an dem das Video gespeichert werden soll. Ohne diese Angabe würde das Video dort gespeichert werden wo wir uns mit der Shell gerade befinden, also an dem Ort wo du dich mit „cd“ hin navigiert hast bzw. in deinem Home-Verzeichnis, wenn du dich noch nicht auf deinem Filesystem bewegt hast.
Über das Ende des Pfades, also in diesem Fall „home_backup.tar“, wird der Name für das Archiv angegeben.
Zusammenfassend bedeutet das, dass unser Archiv an dem Ort „/backups/“ gespeichert wird und den Namen „home_backup.tar“ trägt.

Die zweite Besonderheit finden wir am Ende des Befehls, sie lautet wie folgt: „/home/buero“.
Dieser Pfad gibt den zu archivierenden Ordner an. Der Ordner den wir archivieren wollen liegt unter „/home/“ und heißt „buero“.
Wenn du dir das Archiv nachdem erstellen anguckst wirst du feststellen, dass Tar die gesamte Struktur des Ordners mit übernommen hat, also wirst du indem Archiv den Ordner „home“ finden, in dem Ordner findest du den Ordner „buero“ und in diesem findest du alle Dateien und Ordner des Ordners „buero“.
Dieses Verhalten rührt von der ursprünglichen Verwendung von Tar.
Tar wurde zum backupen ganzer Verzeichnisstruktur entwickelt und um diese Strukturen bequem wieder herzustellen speichert Tar auch den Pfad mit, indem er die Datei bzw. den Ordner „gefunden“ hat.
Für uns ist dieses Verhalten auch sinnvoll, weil in diesem Beispiel sichern wir eine ganze Verzeichnisstruktur, wenn jetzt also aus versehen der Ordner „buero“ gelöscht werden würde, dann können wir mit unserem gerade erstellten Archiv locker wieder herstellen, aber dazu später mehr.

Jetzt müssen wir uns nur noch mit dem Output beschäftigen, dieser zeigt nämlich auch interessante Verhaltensweisen.
Der Output beginnt mit „tar: Entferne führende „/“ von Elementnamen“.
Dieses Verhalten steht eigentlich im Gegensatz zu meiner Aussage über Tar’s ursprüngliche Verwendungsweise, denn wenn das führende „/“ entfernt wird bedeutet das, dass wir das Archiv nicht ohne weiteres an der passenden Stelle im Dateisystem einordnen können.
Ich behaupte aber trotzdem, dass dieses Verhalten nützlich ist, weil wenn du aus dem Archiv eine Datei wieder herstellen möchtest, die neue Version aber behalten willst müsstest du an ein anderes System gehen, weil die neue Version einfach überschrieben werden würde, wenn das führende „/“ nicht entfernt werden würde (gesetzt den Fall du könntest die neuere Version nicht verschieben).
Durch die Entfernung des führenden „/“ genießen wir nun also den Vorteil, dass wir das Archiv ohne bedenken an jedem beliebigen Ort entpacken können, ohne das irgendwelche Dateien überschrieben werden.

Ein konkretes Beispiel:
Wir befinden uns in der Shell in dem Ordner „/home/mensch“, dort liegt unser Archiv mit der Struktur aus unserem obigen Beispiel, wenn wir das Archiv jetzt dort entpacken würden, würden wir folgende Verzeichnisstruktur anschließend vorfinden: „/home/mensch/home/buero“, auch zu diesem Thema gibt es später noch mehr.

Ein paar Worte noch zu der restlichen Ausgabe:

/home/buero/
/home/buero/tst
/home/buero/sek2/
/home/buero/sek2/.bash_logout
/home/buero/sek2/Examples
[…]
/home/buero/sek1/Nettiquette
/home/buero/sek1/.bashrc
/home/buero/sek1/.profile

Diese Ausgabe bestätigt meine Aussagen zum Verhalten von Tar, du kannst hier deutlich sehen wie Tar sich von „/home/buero“ bis zu den Unterordnern und deren Dateien durch hangelt.

Das entfernen des führenden „/“ kannst mit der Option „-P“ ausschalten, aber Vorsicht wenn du dich entschließt dies zu tun kannst du die Dateien und Ordner nicht mehr an einem beliebigen Ort wieder herstellen. Tar wird sie nämlich immer vom sogenannten Wurzelverzeichnis „/“ ausgehend entpacken.
Ein Beispiel dazu:

tar -cvPf /backups/home_backup.tar /home/buero

Noch ein paar Worte zur Reihenfolge der Aktionen/Optionen. Es macht keinen Unterschied ob du die Aktionen so schreibst -cvPf oder so -cPvf du kannst es auch so schreiben -c -P -v -f, es ist lediglich wichtig das -f seinen Parameter <archivname> bekommt. Zur Verdeutlichung, du kannst es auch so schreiben -c -P -f test.tar -v, aber ich denke das wir uns einig sind, dass diese Schreibweise -cvPf die Schnellste und Beste ist.

Archive komprimieren (verkleinern)

Wie weiter oben bereits erwähnt komprimiert Tar die Dateien nicht, sondern überträgt sie ohne jegliche Veränderung in das Archiv. Das bedeutet, dass wenn du das fertige Archiv hast ist es ca. genauso groß wie alle Dateien die in dem Archiv sind zusammen.

Um das zu ändern müssen wir die Option -z bemühen. Diese Option sorgt dafür das die Dateien komprimiert werden.

Hier die rohe Syntax:

tar -cvzf <archivname>.tar.gz

Und als Praxisbeispiel:

ubuntu@meinubuntu.de:~/Desktop/test$ tar -cvzf /backups/home_backup.tar /home/buero

Die Befehle ähneln sich fast zu 100%, lediglich die Option „-z“ ist hinzugekommen und das Archiv hat die Endung „.tar.gz“ alternativ kannst du auch „.tgz“ benutzen, allerdings ist die erste Schreibweise die übliche. Also wenn du ein Archiv komprimieren willst musst du es einfach auf „.tar.gz“ enden lassen und die Option „-z“ hinzufügen.

Die Rate der Kompression hängt von den Dateien in dem Archiv ab. Textdateien werden auf einen Bruchteil der ursprünglichen Größe reduziert, wohingegen Multimediadateien wie Videos, MP3s, etc. eine wesentlich kleinere Rate haben.

Spezialfall Ordner bzw. Dateien auslassen

Früher oder Später wirst du auch mal einen Ordner beim packen auslassen wollen, die Gründe können sehr verschieden sein. Es ist z.B. möglich das du in einem Ordner Dateien lagerst die so oder so nur temporär auf deinem System sind, von daher kann man an dieser Stelle Platz im Archiv sparen indem man sie nicht mit archiviert.

Die passende Option dafür ist „--exclude=<Datei/Verzeichnis>“

Die rohe Syntax:

tar -cvf <Archivname>.tar <Dateien/Verzeichnisse> --exclude=<Datei/Verzeichnis>

Die Syntax ist eigentlich gleich, bis auf das neu hinzugekommene „--exclude“.

Ich schiebe einfach mal ein Praxisbeispiel rein.

ubuntu@meinubuntu.de:~/Desktop$ tar -cvf /backups/home_backup.tar /home/buero --exclude=.bashrc
tar: Entferne führende „/“ von Elementnamen
/home/buero/
/home/buero/tst
/home/buero/sek2/
/home/buero/sek2/.bash_logout
/home/buero/sek2/Examples
/home/buero/sek2/Nettiquette
/home/buero/sek2/.profile
/home/buero/sek1/
/home/buero/sek1/.bash_logout
/home/buero/sek1/Examples
/home/buero/sek1/Nettiquette
/home/buero/sek1/.profile
ubuntu@meinubuntu.de:~/Desktop$

Wie du siehst wurde die Datei „.bashrc“ nicht mit in das Archiv übernommen.

Für das nächste Beispiel habe ich eine Datei namens sek2 indem Ordner „/home/buero/sek1“ hinzugefügt.

Wir machen mit diesem Beispiel weiter:

root@meinubuntu.de:~# tar -cvf /backups/home_backup.tar /home/buero --exclude=sek2
tar: Entferne führende „/“ von Elementnamen
/home/buero/
/home/buero/tst
/home/buero/sek1/
/home/buero/sek1/.bash_logout
/home/buero/sek1/Examples
/home/buero/sek1/Nettiquette
/home/buero/sek1/.bashrc
/home/buero/sek1/.profile
root@meinubuntu.de:~#

Wie du hier erkennen kannst hat Tar das gesamte Verzeichnis sek2 ausgelassen, aber auch die Datei sek2 in dem Ordner sek1.
Aus diesem Verhalten können wir schließen das Tar keinen unterschied zwischen Datei und Ordner macht.
Vereinfacht können wir es uns so vorstellen:
Tar erstellt sich den oben zu sehenden Output und geht dann jede Zeile einzeln durch, wenn das Wort sek2 in der Zeile vorkommt wird die dazugehörige Datei oder Ordner nicht übernommen, wenn das Wort nicht vorkommt wird die dazugehörige Datei oder Ordner übernommen.

Wenn wir nun aber die Datei „sek2“ auch archivieren wollen müssen wir den Befehl so umändern: „tar -cvf /backups/home_backup.tar /home/buero --exclude=sek2/*“.
Durch diese Änderung wird die Datei „sek2“ mit aufgenommen, dass liegt daran weil sek2 jetzt eindeutig als Verzeichnis gekennzeichnet ist, nämlich durch das „sek2/*“ der Slash kann bei einer einfachen Datei so nicht vorkommen, denn danach kommt ja nichts mehr.
Der „*“ ist nötig um zu symbolisieren das wir alle Dateien und Ordner in dem Verzeichnis „sek2/“ nicht dabei haben wollen.
An dieser Stelle zeige ich dir nicht den Output, wenn du mir nicht glaubst teste es selbst ;).

Wenn du mehre Ordner bzw. Dateien auschließen willst, die du soeinfach nicht in einen Kontext bringen kannst machst du das am Besten so:

„tar -cvf /backups/home_backup.tar /home/buero --exclude=sek2 --exclude=sek1“

Man kann auch ganze Dateitypen aussperren lassen, eigentlich sperrt man nur bestimmte Endungen aus, aber es läuft auf das selbe hinaus:

tar -cvf /backups/home_backup.tar /home/buero --exclude=*.log

Bei diesem Beispiel werden alle Dateien ignoriert die die Endung .log haben.

Es gibt noch weitere Methoden Verzeichnisse zu ignorieren, so kann man beispielsweise eine Liste mit allen zu ignorierenden Dateien erstellen und diese über die Option „-X“ an Tar übergeben.

Der passende Befehl sieht so aus:

tar -cvf /backups/home_backup.tar /home/buero --X exclude.list

Die Datei „exclude.list“ muss in dem Ordner sein, indem du dich zur Zeit der Ausführung des Tar-Befehls befindest.

Eine Exclude-Datei könnte so aussehen:

/home/buero/sek1
.bashrc
*.log

Wie du siehst kannst du Dort Dateien, Ordner und Dateien einer bestimmten Endung ignorieren lassen.

Zum Schluss noch eine kleine Liste spezieller „--exclude“ Optionen:

Option Beschreibung
--exclude-caches Inhalt von Verzeichnissen auslassen, die CACHEDIR.TAG enthalten, außer der
--exclude-caches-under alles unterhalb von Verzeichnissen auslassen, die CACHEDIR.TAG enthalten
--exclude-tag=DATEI Inhalt von Verzeichnissen auslassen, die DATEI enthalten, außer DATEI selbst
--exclude-tag-all=DATEI Verzeichnisse auslassen, die DATEI enthalten
--exclude-tag-under=DATEI alles unterhalb von Verzeichnissen auslassen, die DATEI enthalten
--exclude-vcs Verzeichnisse von Versionskontrollsystemen auslassen
Quelle: tar --help

Ich werde diese Befehle jetzt nicht im einzelnen nochmal erläutern. Mit zunehmender Erfahrung wirst du de Optionen von allein verstehen.

Archive ansehen

Um Archive anzusehen, ohne sie zu entpacken, benötigen wir die Optionen „-t und -f“, wenn es sich um ein komprimiertes Archiv handelt kommt noch die Option „-z“ hinzu.

Die rohe Syntax:

tar -tf <archivname>.tar

oder für komprimierte Archive

tar -tzf <archivname>.tar.gz

Praxisbeispiel:

ubuntu@meinubuntu.de:~# tar -tf /backups/home_backup.tar
home/buero/
home/buero/tst
home/buero/sek2/
home/buero/sek1/
home/buero/sek1/sek2
home/buero/sek1/.bash_logout
home/buero/sek1/Examples
home/buero/sek1/Nettiquette
home/buero/sek1/.bashrc
home/buero/sek1/.profile
ubuntu@meinubuntu.de:~#

Die Ausgabe sollte eigentlich selbsterklärend sein. Tar zeigt uns alle Dateien an und die Verzeichnisse in denen sie liegen bzw. lagen als wir sie packten.

Archive entpacken

Wenn wir nun unsere Archive wieder entpacken wollen brauchen wir die Aktion -x.

Zunächst wieder die rohe Syntax:

tar -xvf <archivname>.tar

Praxisbeispiel:

ubuntu@meinubuntu.de:~$ tar -xvf /backups/home_backup.tar
home/buero/
home/buero/tst
home/buero/sek2/
home/buero/sek1/
home/buero/sek1/sek2
home/buero/sek1/.bash_logout
home/buero/sek1/Examples
home/buero/sek1/Nettiquette
home/buero/sek1/.bashrc
home/buero/sek1/.profile
ubuntu@meinubuntu.de:~$

An dem Prompt (ubuntu@meinubuntu.de:~$) kannst du erkennen, dass ich das Archiv in dem Ordner /home/ubuntu entpackt habe, du erkennst dies an dem „~“.

Was wir nun im Output sehen zeigt uns welche Ordner Tar nun aus unserem Archiv extrahiert bzw. entpackt hat. Wenn du dich an weiter oben erinnerst habe ich das Archiv führende „/“ entfernen lassen.

Tar hat nun die gesamte Struktur wieder hergestellt, aber nicht vom Wurzelverzeichnis aus sondern von dem Ordner in dem wir uns befanden als wir das Archiv entpackt haben, d.h. wir finden nun folgende Ordnerstruktur auf unserem System:

/home/ubuntu/home/buero/

Das liegt wie bereits mehrfach erwähnt daran, dass Tar das führende „/“ entfernt hat.

Am besten solltest du das einfach mal selber ausprobieren, dann sollte alles klarer werden.

Wenn wir das Archiv nun vom Wurzelverzeichnis aus wiederherstellen wollen brauchen wir die Option -C

ubuntu@meinubuntu.de:~$ tar -xvf /backups/home_backup.tar -C /

Nun werden die Dateien an dem Ort an dem wir sie ursprünglich archiviert haben wieder eingefügt.

Achtung! Wenn gleichnamige Dateien dort liegen werden sie einfach ersetzt!

Wenn wir ein komprimiertes Archiv haben, dass wir entpacken wollen benötigen wir zusätzlich die Option -z:

tar -xvzf <archivname>.tar.gz

Die Verhaltensweisen etc. sind zu 100% identisch.

16 Gedanken zu „Tar eine Anleitung – packen, entpacken und komprimieren

  1. mogli

    Super Tutorial. Habs bis jetzt immer grafisch gemacht, aber ich denke, ich werd mir das hier behalten. Danke 😉

  2. Doris

    Klasse Anleitung. Knapp und trotzdem durch die Beispiel rasch nachvollziehbar. Jetzt hat sich für mich das Rätsel mit den führenden / endlich gelöst! Danke 😀

  3. Silvano

    Moin :9
    ich wüsste noch gerne wie und ob es möglich ist, nur die Datei ohne den Pfad ins Archiv zu packen. so das beim Entpacken, nur die Datei im aktuellen Verzeichnis landet.

    Ist das möglich?

  4. Bjoern

    Gute Zusammenfassung!
    Hat sich ein Schreibfehler beim Beispiel der exclude listen eingeschlichen.
    „tar -cvf /backups/home_backup.tar /home/buero –X exclude.list“
    Muss nur ein „-“ vor dem X. Also
    „tar -cvf /backups/home_backup.tar /home/buero -X exclude.list“
    Gruß
    Björn

  5. verda

    Hat mir nicht viel geholfen.

    Wann und warum soll das führende „/“ entfernt werden?

    Was wenn ich es woanders entpacken will?

  6. worf

    Wenn Du woanders entpacken willst, gibst Du es mit dem großen C an:

    tar -xzvf /home/test/file.tar.gz -C /Dokumente/test/

    Das führende „/“ würde ich entferen, wenn ich einen relativen Pfad benutzen wollte, sowas wie „..“ oder „tief/tiefer/nochtiefer/“.

    Wie entpacke ich ein einzelnes File?

  7. o_O

    finde es sollten auch bz2 und xz beschrieben werden und auch ganz wichtig das erhalten von attributen. greets o_O

  8. Palmovitsch

    Ich finde die Erklärung auch toll. Nur was ist eigentlich ein führendes „/“ ???? Davon ist immer wieder die Rede

  9. F.G.Neurieser

    Hallo und guten Tag,
    zuerst einmal danke für die super Erklärung. Aber nun habe ich eine Frage.

    Ich möchte z.B. meine WordPressinstallation sichern. Dies geht ja noch sehr einfach mit dem Befehl

    tar -cvzf .tar.gz $WEBSPACE

    wobei $WEBSPACE zuerst definiert wurde: WEBSPACE=“/var/www/html//html/at/“

    sehe ich mir die wp-struktur an, dann habe ich ja lediglich 3 unterordner sowie etliche dateien im Hauptverzeichnis. Und genau nur diese möchte ich eigentlich sichern und in einem anderen Verzeichnis RESTORE=“/var/www/html//html/wptest“ wiederhestellen.

    Wie müsste ich denn das Archiv erstellen bzw. entpacken?

    Danke schon im Voraus

  10. Frank Richter

    hallo,

    hat mir sehr geholfen. was mich noch interesiern würde om man ein tar archiv auch teilen kann. meine backup ist grösser als 4gb.

    frank

  11. Pingback: Umzug vtiger CRM auf eine neue QNAP NAS | www.it-system.info

  12. Pingback: Tar eine Anleitung – packen, entpacken und komprimieren – Ubuntu hilfe » Persönliche Aufzeichnungen

  13. Pingback: pirater skype

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.