tar
tar - speichert Dateien und Verzeichnisse in einem Archiv
Beschreibung
- tar speichert mehrere Dateien in einem einzelnen Archiv im tar-Format
- Die Funktionsweise ähnelt vom Konzept her der von cpio und der von Programmen wie PKZIP unter Windows
- Es wird intensiv vom Debian/Paketverwaltungssystem genutzt und ist nützlich zur Sicherung von Systemdaten und zum Austausch von Dateisammlungen mit Anderen
- tar (Tape Archiver) sichert Daten auf Bandlaufwerken
- Ein reines tar-Archiv ist nicht komprimiert
In Verbindung mit gzip oder bzip2 trifft man oft auf Dateien mit der Endung .tar.gz, .tgz oder .tar.bz2
- Diese Archivdateien sind zusätzlich komprimiert worden, tar selbst komprimiert nicht
Installation
# apt install tar
Anwendungen
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
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 mit gzip komprimieren:
tar -czf archiv.tar.gz datei_1.txt datei_2.txt
Anzeigen
Den Inhalt eines (komprimierten) Archivs ausführlich anzeigen:
tar -tvf archiv.tar
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!
Ändern
Einem Archiv eine Datei hinzufügen:
tar -rf archiv.tar datei_1.txt
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
Alle Dateien aus einem Archiv im aktuellen Ordner extrahieren:
tar -xf archiv.tar
Alle Dateien aus einem mit gzip komprimierten Archiv im ursprünglichen Ordner extrahieren:
tar -xzf archiv.tar.gz -C /
Alle Dateien in ein bestimmtes Verzeichnis extrahieren (das Ziel-Verzeichnis muss bereits existieren):
tar -xzf archiv.tar.gz -C /PFAD/ZUM/ORDNER
Eine bestimmte Datei aus einem Archiv extrahieren:
tar -xzf 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.
Fehlerbehebung
Syntax
$ tar [Option(en)] Datei(en)
Optionen
Option | Beschreibung |
---|---|
-help | Zeigt eine vollständige Übersicht über alle Optionen |
-version | Gibt die installierte Version von tar aus |
-c | Ein neues Archiv erzeugen |
-d | Dateien im Archiv und im Dateisystem miteinander vergleichen |
-f | Archiv in angegebene Datei schreiben / Daten aus angegebener Datei lesen. Diese Option muss die letzte sein, da die nachfolgende Zeichen als Datei interpretiert werden. Z.B. würde -cfv zu einer Fehlermeldung führen. Korrekt wäre -vcf |
-j | Archiv zusätzlich mit bzip2 (de)komprimieren |
-J | Archiv zusätzlich mit xz (de)komprimieren |
-k | Das Überschreiben existierender Dateien beim Extrahieren aus einem Archiv verhindern |
-p | Zugriffsrechte beim Extrahieren erhalten |
-r | Dateien an ein bestehendes Archiv anhängen |
-t | Inhalt eines Archivs anzeigen |
-u | Nur Dateien anhängen, die jünger sind als ihre Archiv-Version. |
-v | Ausführliche Ausgabe aktivieren. Hierbei ist zu beachten, dass man dies möglichst an den Anfang des Befehls anhängt, wenn mehrere Optionen kombiniert werden. Z.B. würde -cfv zu einer Fehlermeldung führen. Korrekt wäre -vcf |
-w | Jede Aktion bestätigen |
-x | Dateien aus einem Archiv extrahieren |
-z | Archiv zusätzlich mit gzip (de)komprimieren |
-Z | Archiv zusätzlich mit compress (de)komprimieren |
-A | Inhalt eines bestehenden Archivs an ein anderes Archiv anhängen |
-C | Wechselt in das angegebene Verzeichnis. Das Archiv wird dann dort entpackt |
-M | Mehrteiliges Archiv anlegen/anzeigen/extrahieren |
-L | Medium wechseln, wenn ZAHL KBytes geschrieben sind |
-W | Archiv nach dem Schreiben prüfen |
Parameter
Umgebungsvariablen
Exit-Status
Konfiguration
Dateien
Sicherheit
Dokumentation
RFC
Man-Pages
Info-Pages
Siehe auch
Links
Projekt-Homepage
Weblinks
Testfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
TMP
Backup mit tar
tar (tape archiver) verwaltet Dateiarchive
tar [-Acdrtux] [-delete] [-b N] [-BgGhiklmMoOpPPsSvwWz] [-C Verzeichnis] [-f Datei] [-F Datei][-K Datei] [-L Länge] [-N Datum] [-T Datei] [-V Name] [-X Datei] [0-7] [{lmh}]
tar ist ursprünglich ein Tool zur Verwaltung von Bandarchiven. Das GNU-tar kann aber auch auf ,,rohen`` Disketten oder in normalen Dateien Archive im tar Format anlegen und verwalten. Normalerweise werden Archive mit tar nicht komprimiert. Das GNU-tar kann aber die Ein- und Ausgabe durch einen Kompressor leiten. Die neuen Versionen (ab 1.11.2) unterstützen sowohl compress als auch gzip.
Wenn auf der Kommandozeile keine Datei und kein Gerät angegeben ist, versucht tar auf die Gerätedatei eines Magnetbandgerätes zuzugreifen. Je nach Konfiguration ist das meist /dev/tape oder /dev/rmt0. Sie können eine andere Voreinstellung wählen, indem Sie die Umgebungsvariable TAPE mit dem Pfadnamen der entsprechenden Gerätedatei belegen.
Optionen
Die Optionen können aus Gründen der Kompatibilität mit anderen, älteren Versionen von tar auch in Abweichung von den [../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node23.html#goldenrules POSIX-Regeln] ohne das für Optionen übliche Minuszeichen angegeben werden. tar interpretiert den ersten Kommandoparameter immer als Optionsblock. Optionsargumente müssen dann im Anschluß an den Optionsblock in der Reihenfolge angegeben werden, in der die Optionen im Optionsblock erscheinen.
Einige wenige spezielle Optionen des GNU-tar sind nicht als einfache Buchstabenoptionen erreichbar. Diese Schalter und Regler können Sie nur in der für GNU-Kommandos spezifischen verbalen Form erreichen.
-A | hängt ein komplettes Archiv an ein anderes Archiv an (nicht für Magnetbänder) |
-c | erzeugt ein neues Archiv |
-d | vergleicht das Archiv mit dem Dateisystem |
- -delete Datei | löscht die Datei aus dem Archiv (nicht für Magnetbänder) |
-r | hängt Dateien an das Archiv an (nicht für Magnetbänder) |
-t | zeigt den Inhalt des Archivs |
-u | ersetzt Dateien, die neuer als eine bereits archivierte Version sind; ist eine Datei noch nicht archiviert, so wird sie eingefügt (nicht für Magnetbänder) |
-x | kopiert Datei oder alle Dateien aus dem Archiv |
Weitere Optionen | |
-atime-preserve | veranlaßt tar, die Zugriffszeit nach der Archivierung zurück zu setzen |
-b N | setzt die Blockgröße auf Nx512 Bytes (Voreinstellung ist N=20) |
-B | unterdrückt den Abbruch von tar beim Lesen unvollständiger Blöcke; zum Lesen von 4.2BSD Pipes |
-C Verzeichnis | wechselt während der Ausführung in das Verzeichnis, um von dort weitere Dateien zu archivieren |
-f Datei | benutzt Datei oder das damit verbundenen Gerät als Archiv |
-F Datei | bei mehrteiligen Archiven (Option -M) wird das Shellscript Datei ausgeführt, wenn das Medium voll ist |
-G | erzeugt am Anfang des Bandarchives einen speziellen Eintrag für jedes archivierte Verzeichnis; spezielles GNU Format |
-g Datei | erzeugt eine Datei mit einer Liste der archivierten Verzeichnisse als Zeitmarke der Archivierung; wenn die Datei bereits existiert, werden nur die Dateien archiviert, die nach dieser Zeitmarke erzeugt oder verändert wurden (spezielles GNU Format: 1. Zeile = Zeitmarke, 1. Feld = Nr. der Partition, 2. Feld = Inode des Verzeichnisses, 3. Feld = Name des Verzeichnisses) |
-h | archiviert die referenzierten Dateien anstelle der Links |
-i | ignoriert Blöcke mit Nullbytes im Archiv |
-k | existierende Dateien werden beim Auspacken von Archiven nicht überschrieben |
-K Datei | beginnt eine Aktion bei Datei im Archiv |
-l | verhindert Archivierung von Dateien aus anderen Dateisystemen |
-L Länge | wartet auf Medienwechsel nach Länge Bytes |
-m | das Datum der letzten Änderung wird nicht mitarchiviert |
-M | das Archiv ist auf mehrere Medien verteilt (Multi-Volume) |
-N Datum | archiviert nur Dateien, die neuer sind als Datum |
-o | benutzt das alte V7 tar-Format anstelle des ANSI Formates |
-O | schreibt die Dateien in die Standardausgabe |
-p | erhält die Zugriffsrechte der Dateien |
-P | archiviert mit absoluten Dateinamen |
-R | gibt zu jeder Meldung die Blocknummer des Archivblocks aus, von dem die Meldung verursacht wurde |
-s | zeigt an, daß die Liste von Dateien im Argument die gleiche Reihenfolge hat wie die Dateien im Archiv |
-T Datei | holt die Namen der zu archivierenden Dateien aus Datei |
-v | meldet jede Aktion |
-V Name | erzeugt ein Archiv mit dem (internen) Label Name |
-w | erwartet interaktiv Bestätigung jeder Aktion |
-W | verifiziert die geschriebenen Daten im Archiv |
-X Datei | liest aus der Datei Namen oder reguläre Ausdrücke vonoder für Dateien, die nicht archiviert werden sollen |
-z | erzeugt ein mit gzip komprimiertes Archiv |
-Z | erzeugt ein mit compress komprimiertes Archiv |
-{0..7}{lmh} | spezifiziert das Gerät und die Dichte des Speichermediums (für Diskettenarchive ohne Bedeutung); 0 ist der erste Streamer, 1 der zweite und so weiter; die Dichte bestimmt den Bandtyp |
Beispiel
Der Tape Archiver ist das verbreitetste Werkzeug zur Datensicherung in Unix-Systemen. Ursprünglich rein zur Datenübertragung auf Bänder konzipiert, mit deren Hilfe der Datenaustausch zwischen verschiedenen Computern zu Zeiten fehlender Netzwerke ermöglicht werden sollte, hat sich gerade durch die Eignung von Bändern als Backupmedium das Programm quasi zum Standardwerkzeug für das Backup in kleineren Netzwerken etabliert, trotz des Fehlens einer brauchbaren Unterstützung von inkrementellen Backups.
Als Werkzeug zur Archivierung wurde tar im Kapitel Nutzerkommandos bereits vorgestellt.
- Hier soll nun der Schwerpunkt auf den Einsatz des Kommandos zum Backup von Daten liegen.
tar [ OPTION... ] [ DATEI... ]
tar arbeitet auf Dateiebene, kann also beliebige Dateien und Verzeichnisse in eine einzige Zieldatei verpacken. Zieldatei kann dabei alles bedeuten, was unter Unix als Datei betrachtet wird, also ein Gerät, eine normale Datei, eine Pipe...
Die drei wichtigsten Optionen sind c zum Erzeugen eines Archivs, t zum Betrachten des Archivinhalts und x zum Entpacken desselben.
Volles Backup
tar wird alle angegebenen Dateien (oder rekursiv den Inhalt von Verzeichnissen) in ein Archiv verpacken. Per Voreinstellung versucht das Kommando das Archiv auf einen Streamer zu schreiben (/dev/tape oder /dev/rmt0), ist kein solcher im System installiert, schreibt tar das Ergebnis auf die Standardausgabe. Um das Archiv in einer Datei zu sichern, ist die Option -f Datei zu wählen.
Eine angenehme Eigenschaft ist der Umgang mit »Multivolumes« (Option -M) . Speichert man zum Beispiel das Archiv auf eine Diskette und reicht deren Speicherkapazität nicht aus, so fordert tar automatisch zum Wechsel des Mediums auf:
$ tar -Mcf /dev/fd0h1440 ~/Books/ tar: Removing leading `/' from absolute path names in the archive Prepare volume #2 for /dev/fd0h1440 and hit return: Prepare volume #3 for /dev/fd0h1440 and hit return: Prepare volume #4 for /dev/fd0h1440 and hit return:
Im Beispiel schreibt tar die Daten auf eine (unformatierte) Diskette, weswegen dem Kommando genau mitgeteilt werden muss, wie groß die Speicherkapazität dieser ist (es ist das entsprechende Device anzugeben). Als erstes entfernt tar in allen Pfadnamen den führenden Slash (-P forciert die Verwendung absoluter Pfadnamen), so dass das Archiv bei einem späteren Entpacken an beliebiger Stelle im Dateisystem extrahiert werden kann - bei Beibehaltung der Verzeichnisstruktur. Nachfolgend wird der Benutzer zum Wechsel der Disketten aufgefordert. Alternativ zu »-M« kann mit -L Anzahl der Medienwechsel nach Archivierung von Anzahl Bytes erzwungen werden.
Es ist allerdings furchtbar uneffizient, das Archiv unkomprimiert abzulegen. tar kann zum Glück mit mehreren [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung Packern ]zusammen arbeiten. Mit -z wird das Archiv mit [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#gzip_-_Dateien_komprimieren gzip ]komprimiert; -Z nutzt das (veraltete) Werkzeug [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#compress_-_Dateien_komprimieren compress ]und -j (alt: -I) den derzeit effektivsten Packalgorithmus des Kommandos [../../../../index.php/Linuxfibel_-_Nutzerkommandos_-_Archivierung#bzip2_-_Dateien_komprimieren bzip2. ]Wurde ein Archiv einmal gepackt, ist bei allen weiteren Operationen die Option für den jeweiligen Packer anzugeben! Das Packen funktioniert allerdings nicht bei Multilevel-Archiven. Ein Ausweg wäre das »vorab«-Komprimieren einer jeden Datei (zum Beispiel mittels eines Skripts) mit anschließender Archivierung.
Inkrementelles Backup
tar unterstützt nur eine rudimentäre Variante des inkrementellen Backups, in dem Daten zur Archivierung ausgewählt werden können, die »neuer« als ein anzugebendes Datum sind. Das Datum (-n Datum) ist hierbei im Format »Jahr-Monat-Tag« anzugeben. Um zum Beispiel alle Dateien zu erfassen, die in den letzten 7 Tagen (ab aktuellem Zeitpunkt) modifiziert wurden, kann folgender Kommandoaufruf verwendet werden:
$ tar -n $(date -d "now 7 days ago" +%Y-%b-%d) -czf /tmp/backup.tgz ~/Books/
Im Beispiel wurde bewusst die etwas verwirrende Kalkulation des Datums mit Hilfe von [../../../../index.php%3Ftitle=Linuxfibel_-_Sytem-Administration_-_Zeit_und_Steuerung&action=edit date ]gewählt, da dessen Einsatz das Schreiben eines Skripts zum automatischen Erzeugen von inkrementellen Backups vereinfacht.
Überprüfung des Archives
Um sich von einer ordnungsgemäßen Archivierung zu überzeugen, sollte das resultierende Archiv einem Test unterzogen werden. Da der Slash automatisch entfernt wurde, ist zuvor ins Wurzelverzeichnis zu wechseln oder das Arbeitsverzeichnis mit -C Pfad zu ändern und (in Bezug auf obiges Beispiel) Folgendes aufzurufen:
$ tar -C / -d -f /dev/fd0h1440
tar überzeugt sich nun, dass alle Dateien des Archivs auch im Dateisystem existieren. Sobald eine Unstimmigkeit festgestellt wird, wird das Kommando den Fehler ausgeben:
- Um einen Fehler zu provozieren, wurde eine Datei verschoben
$ tar -df /dev/fd0h1440 home/user/Books/linuxfibel.pdf: File does not exist
Recovery
Zu einem Backup gehört natürlich auch eine Möglichkeit, dieses wieder zurückzuspielen. Hier gelangt die Option -x (extract) zum Einsatz. Im Falle von relativen Pfadangaben im Archiv wird die Verzeichnisstruktur unterhalb des aktuellen Verzeichnisses erzeugt. Sie sollten also entweder zuvor ins Zielverzeichnis wechseln, oder dieses mit -C Pfad explizit angeben:
$ tar -C / -x -f /dev/fd0h1440
Handelt es sich um ein auf mehrere Medien verteiltes Archiv, muss die Option -M angegeben werden. tar fordert dann zum Medienwechsel auf.
Möchten Sie nur einzelne Dateien extrahieren, sind deren Namen mit vollständiger Pfadangabe auf der Kommandozeile anzugeben. Hier hilft eventuell die Option -t, um den korrekten Namen, so wie er im Archiv gespeichert ist, zu erfahren:
$ tar tf /dev/fd0h1440 home/user/Books/access.htm home/user/Books/index.htm home/user/Books/stuff.htm home/user/Books/test.htm ... $ tar -C / -x -f /dev/fd0h1440 home/user/Books/index.htm