ubuntuusers.de

tar

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png Das Programm tar steht für "tape archiver". Es wurde ursprünglich geschrieben, um Daten auf Bandlaufwerken zu sichern. Auch heute noch ist es das beliebteste Werkzeug zum Archivieren von Daten auf Linux-Systemen. Der Hauptvorteil eines von tar erstellten Archivs gegenüber dem in der Windowswelt weitverbreiteten Format ZIP ist, dass die Benutzerrechte einer Datei mit gesichert und beim Entpacken wieder hergestellt werden (allerdings nur, wenn Quelle und Ziel die Unix-Dateirechte unterstützen).

Dieser Artikel beschreibt das bei Ubuntu eingesetzte GNU tar. Versionen des Programms für andere Betriebssysteme können sich davon unterscheiden bzgl. des Aufrufs und des Verhaltens. Ob man GNU tar benutzt, kann man mit diesem Befehl testen:

tar --version 

Ein vom Programm tar erstelltes Archiv wird oftmals auch als Tarball bezeichnet. Dafür ist ein auf .tar endender Dateiname üblich, aber nicht erforderlich. In Verbindung mit gzip oder bzip2 trifft man oft auf Dateien mit der Endung *.tar.gz, .tgz oder tar.bz2. Solche Archive wurden mittels zusätzlicher Programme nachträglich komprimiert.

Funktion

Das Programm schreibt alle Dateien sequenziell (= hintereinander) in ein Archiv.

Falls einzelne Dateien oder Verzeichnisse mangels Berechtigungen nicht gesichert werden können, informiert tar darüber und setzt den Vorgang fort. Dabei werden diese Dateien natürlich ausgelassen.

Neue Dateien werden immer an das Ende gehängt. Somit ist es möglich (aber selten), dass in einem Archiv mehrere Dateien mit gleichem Namen, aber in anderen Versionen, vorhanden sein können. Dies kann allerdings dazu führen, dass eine Datei beim Extrahieren mehrfach mit einer jüngeren Version überschrieben wird. Abhilfe kann hier die Option -k bringen (siehe unten).

Was man mit tar zu einem Archiv vereinigt hat, kann man auch mit tar derselben Version wieder in seine Bestandteile trennen. Wenn man gezwungen ist, für das Ein- und Auspacken unterschiedliche Versionen von tar verwenden zu müssen, sind für die Portabilität zusätzliche Feinheiten zu beachten, siehe Dokumentation.

Installation

Das Programm ist bei Ubuntu im Regelfall bereits in der Standard-Installation enthalten. Falls es fehlen sollte, kann es aus den offiziellen Paketquellen durch die folgenden Pakete installiert[1] werden:

⚓︎

  • tar ("GNU-Version des tar-Archivierungsprogramms aus main")

Befehl zum Installieren der Pakete:

sudo apt-get install tar 

Dieses enthält neben dem Programm auch die Hilfsprogramme tarcat und rmt sowie Manpages.

  • tar-doc (optional, "Dokumentation für das tar-Paket aus main")

Befehl zum Installieren der Pakete:

sudo apt-get install tar-doc 

Dieses Paket enthält die offizielle Anleitung von tar, formatiert zur Anzeige durch info. Ohne dieses Paket zeigt info ebenfalls die Manpage an.

Bedienung

Grafische Oberfläche

Es gibt für das Kommandozeilenprogramm tar grafische Bedienoberflächen, beispielsweise

Diese sind insbesondere beim Entpacken von Tarballs an bestimmte Stellen im Dateisystem praktisch. Dieser Artikel geht aber nicht weiter darauf ein und beschränkt sich auch die Benutzung des Programms auf der Kommandozeile.

⚓︎

Syntax

Der allgemeine Aufruf im Terminal[2] lautet:

tar OPTIONen DATEIen 

⚓︎ Beispiel für einen (später beschriebenen) Befehl:

tar -c -v -f Archiv.tar Datei1 'Datei 2' 'Datei 3' 
  • OPTIONen ist eine nicht leere Liste von Angaben, was das Programm tun soll. GNU tar kennt eine beeindruckende Vielzahl von solchen Optionen, der Befehl

    tar --usage 

    zeigt sie alle und im Abschnitt Optionen werden einige häufig verwendete beschrieben.

  • DATEIen ist eine Liste von Dateinamen. Diese Liste beschreibt, welche Dateien bearbeitet, also z.B. archiviert oder wieder hergestellt werden sollen. Der mit den OPTIONen ausgewählte operative Modus bestimmt, ob diese Liste leer sein darf oder sogar muss.

  • Das erste Argument für GNu tar muss eine Option sein, sonst gibt es eine Fehlermeldung oder ein fehlerhaftes Ergebnis. Nach dem ersten Argument kann man zwar OPTIONen und DATEIen mischen, aber das sollte man im Interesse einer guten Verständlichkeit vermeiden.

Optionen

Die Optionen kann man unterteilen in die Grundeinstellungen (operativer Modus) nach folgender Tabelle 1 und die Feineinstellungen nach Tabelle 2 und Tabelle 3. Das Programm kennt für Optionen drei unterschiedliche Schreibweisen:

  1. Beim GNU-Stil wird jede Option durch ein beschreibendes Wort bezeichnet, das von 2 Bindestrichen eingeleitet wird. Der Beispielbefehl lautet dann:

    tar --create --verbose --file=Archiv.tar Datei1 'Datei 2' 'Datei 3' 

    Diesen Stil sollte man z.B. in Skripten anwenden, da das zur Dokumentation beiträgt.

  2. Beim UNIX-Stil wird jede Option über einen einzelnen Kennbuchstaben mit einem einleitenden Bindestrich identifiziert. Der Beispielbefehl lautet dann wie oben angegeben.
    Man kann aber optional auch die Kennbuchstaben direkt aneinander schreiben und spart dann alle Bindestriche bis auf den ersten:

    tar -cvf Archiv.tar Datei1 'Datei 2' 'Datei 3' 
  3. Aus der Ära vor UNIX stammt der traditionelle Stil. Hierbei muss man die Kennbuchstaben aneinander schreiben und es gibt keinen einleitenden Bindestrich:

    tar cvf Archiv.tar Datei1 'Datei 2' 'Datei 3' 

    Diese alte Methode verschlechtert die Lesbarkeit und sollte deshalb vermieden werden. Diese Schreibweise existiert bei GNU tar nur zur Kompatibilität mit UNIX tar.

Die Reihenfolge der Optionen ist bei GNU tar bis auf wenige Ausnahmen beliebig; das gilt aber für gleichnamige Programme bei anderen Betriebssystemen als GNU/Linux möglicherweise nicht. Zu den Ausnahmen gehören u.a. die Option -C und die Optionen in der Gruppe von --exclude; Details siehe Dokumentation, insbesondere Kapitel 3.4.4 der offiziellen Anleitung.

Obwohl bei GNU tar nicht erforderlich, sollte man auch bei der Benutzung dieses Programms der Konvention folgen, die Option für die Grundeinstellung zuerst zu nennen, da dies zur Klarheit und leichteren Verständlichkeit beiträgt.

⚓︎ Es gibt 9 operative Modus, die sich gegenseitig ausschließen:

Tabelle 1: Grundeinstellungen zur Auswahl des operativen Modus
Option
UNIX
Option
GNU
Beschreibung
-c --create Ein neues Archiv erzeugen, und angegebene Dateien darin ablegen. Wenn man diesen Modus auf ein schon existierendes Archiv anwendet, wird es gelöscht und neu angelegt.
--delete Angegebene Dateien aus dem Archiv entfernen. Funktioniert nur mit Archiven in Dateiform, nicht mit Magnetbändern.
-d --diff
--compare
Dateien im Archiv und im Dateisystem miteinander vergleichen.
-r --append Dateien an ein bestehendes Archiv anhängen. Anmerkung 2
-t --list Inhalt eines Archivs anzeigen.
--test-label Testet das Volume-Label des Archivs. Ohne Angabe von Dateien wird das Label ausgegeben, anderenfalls wird jede angegebene Datei auf Anwesenheit im Archiv getestet und wenn sie fehlt, endet das Programm mit Fehlerstatus 1.
-u --update Nur Dateien anhängen, die jünger sind als ihre Archiv-Version.
-x --extract
--get
Dateien aus einem Archiv extrahieren.
-A --catenate
--concatenate
Inhalt eines bestehenden Archivs an ein anderes Archiv anhängen.

⚓︎ Es können beliebig viele oder auch gar keine Feineinstellungen angegeben werden:

Tabelle 2: Oft verwendete Feineinstellungen
Option
UNIX
Option
GNU
Beschreibung
-? --help Zeigt eine vollständige Übersicht über alle Optionen.
--version Gibt die installierte Version von tar aus.
-f ARCHIV --file=ARCHIV Archiv in angegebene Datei ARCHIV schreiben, bzw. Daten aus angegebener Datei ARCHIV lesen. Üblicherweise wird diese Option zuletzt angegeben, weil ihr ja ein Dateiname folgen muss. ARCHIV kann auch eine Gerätedatei, wie z.B. /dev/tape0 sein. Tar kommuniziert dann über diese Gerätedatei direkt mit dem Gerät; dies entspricht der ursprünglichen Verwendungsweise des Programms. Anmerkung 1
-g DATEI --listed-incremental=DATEI für inkrementelle Backups. Schreibt zusätzlich eine Datei namens DATEI, in der eine Liste der bisher gesicherten Dateien ist und anhand derer festgelegt wird, welche Dateien im inkrementellen Backup gespeichert werden.
-k --keep-old-files Überschreiben existierender Dateien beim Extrahieren aus einem Archiv verhindern.
-p --preserve-permissions
--same-permissions
Auch Zugriffsrechte extrahieren.
-v --verbose Ausführliche Ausgabe aktivieren.
-w --interactive
--confirmation
Jede Aktion bestätigen.
-W --verify Archiv nach dem Schreiben prüfen. Anmerkung 2
-C VERZEICHNIS --directory=VERZEICHNIS Wechselt in das angegebene Verzeichnis. Das Archiv wird dann dort entpackt.
-M --multi-volume Mehrteiliges Archiv anlegen/anzeigen/extrahieren.
-L ZAHL --tape-length=ZAHL Medium wechseln, nachdem ZAHL kiB geschrieben wurden.

⚓︎ Anmerkungen:

  1. Die Option -f wird fast immer angewendet, dennoch bleibt sie optional. Wenn man sie nicht angibt, verwendet tar den Wert der Umgebungsvariablen TAPE, sofern diese existiert und nicht leer ist, oder sonst eine Voreinstellung; diese Voreinstellung ist bei Ubuntu „-“, was je nach operativem Modus die Verwendung von stdin bzw. stdout bedeutet.

  2. Hinweis:

    Manche Optionen wie -r oder -W funktionieren nur mit einem unkomprimiertem Archiv.

  3. OPTIONen kann man auch über die Umgebungsvariable TAR_OPTIONS übergeben, die vor allen Angaben auf der Kommandozeile ausgewertet wird.

  4. Für weitere Optionen und eine detaillierte Beschreibung siehe Dokumentation.

Beispiele

Anlegen

  • Ein Archiv mit dem Namen archiv.tar mit den Dateien datei_1.txt und allen Dateien vom Typ *.pdf anlegen:

    tar -cf archiv.tar datei_1.txt *.pdf 

    Man kann, wie im Beispiel gezeigt, zur Selektion der Dateien Globs verwenden, diese werden aber nicht von tar, sondern von der aufrufenden Shell aufgelöst und die daraus resultierenden Dateinamen werden an tar übergeben.
    Der oben bereits vorgestellte Beispielbefehl erstellt zusätzlich noch eine Fortschrittsanzeige durch Ausgabe der gerade bearbeiteten Datei; die dafür zuständige Option -v ist beim interaktiven Gebrauch immer zu empfehlen.

  • Ein Archiv mit dem Ordner daten inklusive aller Unterordner und Dateien anlegen:

    tar -cf archiv.tar daten/ 
  • Ein Archiv anlegen, zwei Dateien hinzufügen und nachträglich komprimieren mit gzip:

    tar -czf archiv.tar.gz datei_1.txt datei_2.txt 

Erweitern

  • Einem nicht komprimierten Archiv eine Datei hinzufügen:

    tar -rf archiv.tar datei_1.txt 

Anzeigen

  • Den Inhalt eines (ggf. auch komprimierten) Archivs ausführlich anzeigen:

    tar -tvf archiv 

Aktualisieren

  • Fügt nur Dateien hinzu, wenn sie neueren Datums sind als ihr Gegenstück im Archiv:

    tar -uf archiv.tar daten 

    Leider werden bei einer Aktualisierung keine Unterverzeichnisse berücksichtigt!

Vergleichen

  • Den Inhalt eines Archivs mit dem Dateisystem vergleichen:

    tar -dvf archiv.tar 

    Der Befehl sollte in dem Verzeichnis ausgeführt werden, in dem die Dateien, die im Archiv liegen, gespeichert sind.

Extrahieren

Achtung!

Das Programm tar überschreibt beim Extrahieren Dateien und Verzeichnisse ohne Nachfrage, daher

  • Inhalt vor dem Extrahieren überprüfen (siehe Beispiel Anzeigen) oder

  • vor dem Extrahieren ein neues Verzeichnis anlegen und dorthin wechseln.

  • Alle Dateien aus einem Archiv in den aktuellen Ordner extrahieren:

    tar -xf archiv.tar 
  • Alle Dateien in ein bestimmtes, bereits existentes Verzeichnis extrahieren:

    tar -xf archiv.tar.gz -C /PFAD/ZUM/ORDNER 
  • Eine bestimmte Datei aus einem Archiv extrahieren:

    tar -xf archiv.tar.gz PFAD/DATEINAME 

    Dabei muss PFAD/DATEINAME genau so in der Archiv-Datei existieren. Ein angegebenes Unterverzeichnis PFAD wird im aktuellen Verzeichnis (bei relativem Pfad) automatisch erstellt.

  • Inhalt direkt in den Zielordner entpacken

    tar -xf example.tar.gz -C /PFAD/ZUM/ORDNER --strip-components=1 

    Die Option -C spezifiziert das Verzeichnis wohin ausgepackt werden soll. Durch die Option --strip-components=1 wird der Inhalt direkt in das gewünschte Verzeichnis ausgepackt ohne dabei ein Hauptverzeichnis anzulegen.

⚓︎ ⚓︎

Komprimieren

Oft besteht der Wunsch, ein Archiv in einer Datei durch Komprimierung zu verkleinern. Dies ist über zwei Ansätze möglich:

  • Das Programm tar beherrscht intern einige Komprimierungsverfahren, die man über zusätzliche Optionen nach Tabelle 3 auswählen kann. Besonders praktisch ist die Option -a, bei der die Dateiendung den Komprimierungsalgorithmus bestimmt:

    tar -caf Archiv.tgz *.pdf 

    archiviert alle Dateien mit Endung .pdf und komprimiert anschließend mit gzip.

  • Bei externer Komprimierung lässt man das Archiv auf die Standardausgabe schreiben und leitet das per Pipe selber an das Komprimierungsprogramm weiter:

    tar -c *.pdf | gzip >Archiv.tgz 

    erbringt dasselbe Ergebnis wie vorstehender Befehl.

Bei der internen Komprimierung beschäftigt tar immer nur einen CPU-Kern, dagegen kann bei explizitem Aufruf des Komprimierungsprogramms die CPU voll auslasten und gelangt ggf. schneller zum Ziel, siehe hier für Details eines Versuchs.

Bei der externen Komprimierung kann man natürlich statt gzip jedes andere Packprogramm verwenden und hat den zusätzlichen Vorteil, dass man selber die Komprimierung präziser steuern kann.

⚓︎

Tabelle 3: Feineinstellungen für Komprimierung
Option
UNIX
Option
GNU
Beschreibung Dateiendung
-a --auto-compress Archiv komprimieren, dafür das Verfahren gemäß Dateiendung verwenden.
--no-auto-compress Kompressionsprogramm nicht automatisch bestimmen.
-j --bzip2 Archiv zusätzlich mit bzip2 (de)komprimieren. .bz2 .tz2 .tbz2 .tbz
-J --xz Archiv zusätzlich mit xz (de)komprimieren. .xz
-z --gzip
--gunzip
--ungzip
Archiv zusätzlich mit gzip (de)komprimieren. .gz .tgz .taz
-Z --compress
--uncompress
Archiv zusätzlich mit compress (de)komprimieren. .Z .taZ
--lzip
--lzma
--lzop
--zstd
Archiv durch lzip/lzma/lzop/zstd filtern. .lz
.lzma .tlz
.lzo
.zst .tzst

Bein Auspacken wird ein als Datei vorliegendes komprimiertes Archiv über eine interne Signatur oder die Dateinamensendung automatisch erkannt und man kann ohne zusätzliche Optionen arbeiten. Wenn aber das Archiv über eine Pipe erreicht wird, muss man solche Optionen angeben.

⚓︎

Mehrteilige Archive

Das Programm tar kann ein Archiv auf mehrere Datenträger aufteilen und auch einen Datenträgersatz wieder zu einem Archiv zusammensetzen. Es gibt hierfür zwei gängige Methoden.

Multi-Volume-Archive

Multi-Volume-Archive sind eine im Programm tar eingebaute Möglichkeit, sehr große Archive auf externen Medien zu sichern. Das funktioniert im Grundsatz mit allen Laufwerken für Wechseldatenträger wie z.B. Magnetbänder oder Disketten, die direkt Daten schreiben können, jedoch nicht mit optischen Laufwerken, die einen „Brennvorgang“ benötigen.

Man benötigt zusätzlich die Option -M und arbeitet nicht mit regulären Dateien für das Archiv, sondern direkt mit der Gerätedatei (hier beispielhaft: /dev/tape0) für das Laufwerk. Für diese Gerätedatei muss man das Schreibrecht haben, daher arbeitet man in der Regel mit Root-Rechten[3].

Anlegen

Achtung!

Es ist darauf zu achten, das richtige Gerät anzusprechen, da sonst Daten verloren gehen können!

  • Multi-Volume-Archiv anlegen:

    sudo tar -cvMf /dev/tape0 daten/ 

    Wenn ein Medium vollständig beschrieben ist, fragt tar so lange nach neuen Medien, bis alle Daten geschrieben sind. Dies sieht zum Beispiel so aus:

     Medium #2 für /dev/tape0 und Eingabetaste drücken: 
  • Wenn das Medium nicht in der Lage ist die Rückmeldung zu geben, wann es vollständig beschrieben ist, kann die Option -L mit Angabe der Speicherkapazität helfen:

    sudo tar -cvM -L 10000 -f /dev/tape0 daten/ 

    Es ist wichtig, die genaue Speicherkapazität des Mediums anzugeben, da sonst beim Extrahieren eventuell Teile von alten Archiven extrahiert werden.

Nachteile bei dieser Methode:

  • Das Archiv kann nur mit tar wieder hergestellt werden.

  • Zusätzliche Komprimierung ist nicht möglich.

Extrahieren

Normalerweise hat man als normaler Benutzer das Leserecht für Gerätedateien und benötigt deshalb für folgende Befehlen kein sudo; in Ausnahmefällen vielleicht doch.

  • Multi-Volume-Archiv vollständig extrahieren:

    tar -xvpMf /dev/tape0 
  • Eine Datei aus einem Multi-Volume-Archiv extrahieren:

    tar -xvpMf /dev/tape0 PFAD/DATEINAME 

    tar wird dann die folgenden Medien anfordern, bis die benötigte Datei gefunden ist.

Extern

Unter GNU/Linux kann man beliebige Dateien mit dem Programm split aufteilen. Die Zusammenarbeit mit tar sieht so aus:

  1. Man erstellt das Archiv:

    tar -cf archiv.tar Anleitung.pdf 
  2. Die Datei mit dem Archiv in Teile aufspalten:

    split -b 3900M archiv.tar Anleitung.tar. 

    Anleitung.tar.001
    Anleitung.tar.002
    Anleitung.tar.003
    Anleitung.tar.004
    Anleitung.tar.005
  3. Die Teildateien kann man z.B. problemlos einzeln auf Datenträger mit Dateisystemen des Typs FAT16/32 schreiben, die ja nur Dateien unter 4 GiB aufnehmen können.

Beispiel für das Zusammenfügen:

  1. Zusammengefügt werden die Teile mit tarcat:

    tarcat Anleitung.tar.00{1..5} > Anleitung.merged.tar 

    Manchmal, wenn tar keine zusätzlichen Verwaltungsdaten an den Anfang der Teildateien geschrieben hat, gelingt auch eine funktionsfähige Zusammenfügung mit cat.

  2. Aus dem zusammengefügtem Archiv kann man anschließend mit tar -x … ganz normal Dateien extrahieren.

Für die grafische Oberfläche gibt es eine Integration in den Dateimanager Nautilus: Nautilus/Skripte/Splitten und Vereinigen

Backup mit tar

Das Programm tar eignet sich gut zur Datensicherung. Es gibt fertige Skripte zur Integration dieser Aufgaben in den Dateimanager Nautilus:

Netzwerk

Das Programm tar kann problemlos über das Netzwerk Daten transferieren und z.B. ein Archiv auf einem anderen Rechner als Datei ablegen oder auf ein dortiges Gerät ausgeben. Dafür reicht normalerweise aus, mit der Option -f den anderen Rechner (hier beispielhaft: Server) anzugeben:

--file=Server:/PFAD-ZUR-DATEI/Archiv.tar
-f Server:/PFAD-ZUR-DATEI/Archiv.tar
--file=Server:/dev/tape0
-f Server:/dev/tape0

Natürlich muss der Rechnername „Server“ dafür auf dem lokalen Rechner zu einer IP-Adresse auflösbar sein. Man kann auch einen Benutzer auf dem Server in der üblichen Weise mit „Benutzer@Server“ angeben.

Wenn der Dateiname für das Archiv einen Doppelpunkt enthält, wird diese Funktionalität von tar aktiviert. Das Programm tar kontaktiert dann den anderen Rechner per rsh und startet damit das Programm rmt (Remote Tape Server), welches dann im Netzwerk als Gegenstation für den lokalen Client dient.

Anstatt im vorstehend beschriebenen internen Modus die veraltete und unsichere Remote Shell (rsh) und den rmt zu benutzen, kann man mit Hilfe einer Pipe im externen Modus alles verwenden, was eine Ausführung eines Befehls auf dem anderen Rechner ermöglicht, u.a. das sichere und leicht verfügbare Protokoll SSH. Der Befehl

tar -c DATEIen | ssh Benutzer@Server "cat >/PFAD-ZUR-DATEI/Archiv.tar" 

erstellt ein Archiv mit Dateien des lokalen Rechners und legt es auf dem anderen Rechner ab. Bei dieser Arbeitsweise benötigt man eine hinreichend leistungsfähige und zuverlässige Netzwerkverbindung, aber keinen Speicherplatz auf dem lokalen Rechner.

⚓︎

Dokumentation

  • Übersicht:

    tar --usage 
  • Kurzbeschreibung:

    tar --help | less 
  • Manpage mit dem Programm man auf dem eigenen Rechner:

    man tar 
  • oder im Internet: man tar 🇬🇧

  • Eine detaillierte Beschreibung erhält man, wenn das zusätzliche Dokumentationspaket installiert wurde, mit info:

    info tar 

    Ohne Dokumentationspaket zeigt info nur die Manpage.

  • Ausführliche offizielle GNU tar Anleitung 🇬🇧

  • Archivmanager zu Komprimierungs-Formaten und Archivierungs-Programmen

  • Wikipedia zu tar

  • Homepage von GNU tar 🇬🇧 bei GNU.org

  • Ubuntu-Pakete für rsh 🇬🇧

Diese Revision wurde am 20. September 2025 10:40 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Datensicherung, Shell, Packer, Komprimierung, Archivmanager