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:
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
Archivmanager und
in Dateimanager integrierte Frontends.
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:
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.
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'
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:
Die Option
-fwird fast immer angewendet, dennoch bleibt sie optional. Wenn man sie nicht angibt, verwendet tar den Wert der UmgebungsvariablenTAPE, 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.Hinweis:
Manche Optionen wie
-roder-Wfunktionieren nur mit einem unkomprimiertem Archiv.OPTIONen kann man auch über die Umgebungsvariable TAR_OPTIONS übergeben, die vor allen Angaben auf der Kommandozeile ausgewertet wird.
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-vist 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/DATEINAMEgenau so in der Archiv-Datei existieren. Ein angegebenes UnterverzeichnisPFADwird 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
-Cspezifiziert das Verzeichnis wohin ausgepackt werden soll. Durch die Option--strip-components=1wird 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
-Lmit 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:
Man erstellt das Archiv:
tar -cf archiv.tar Anleitung.pdf
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
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:
Zusammengefügt werden die Teile mit tarcat:
tarcat Anleitung.tar.00{1..5} > Anleitung.merged.tarManchmal, wenn tar keine zusätzlichen Verwaltungsdaten an den Anfang der Teildateien geschrieben hat, gelingt auch eine funktionsfähige Zusammenfügung mit cat.
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:
Backupskript für vollständige Sicherung ganzer Ordner
Skripte/inkrementelles Backup für schnelle ergänzende Teilsicherungen zwischen Vollsicherungen
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 🇬🇧
Links¶
Archivmanager zu Komprimierungs-Formaten und Archivierungs-Programmen
Wikipedia zu tar
Homepage von GNU tar 🇬🇧 bei GNU.org
Ubuntu-Pakete für rsh 🇬🇧