tar ist eines der beliebtesten Formate für die Dateiarchivierung in Unix- und Linux-basierten Systemen
Der Name selbst leitet sich von Klebeband ARchivab, da es für das Schreiben sequenzieller Daten auf Bandgeräten entwickelt wurde. Manchmal wird es auch als Tarball bezeichnet
Standardmäßig archiviert tar die Dateien nur ohne Komprimierung, sondern unter Verwendung einiger Teile. Wir können verschiedene Komprimierungstechniken verwenden, um eine komprimierte Ausgabe zu erhalten. Das Dienstprogramm tar ist in der Regel standardmäßig in den meisten Linux-Distributionen enthalten, und das Format selbst wird von verschiedenen Tools und Dienstprogrammen in anderen Betriebssystemen, einschließlich Windows und macOS, unterstützt
In diesem Artikel werden wir einige gängige Beispiele und die Verwendung des tar-Befehls und seiner unterstützten Flaggen behandeln
Fangen wir auch an...
Tar-Archiv erstellen
Um ein einfaches unkomprimiertes Archiv zu erstellen, lautet die Syntax für den Befehl tar
$ tar cvf <tar-Dateiname> <Dateien zum Archiv>
Dabei stehen die Flaggen c
für die Erstellung, v
für die ausführliche Ausgabe und f
für die Angabe des Dateinamens des tar-Archivs. Geben Sie den Tar-Dateinamen standardmäßig mit der Erweiterung .tar
an. Die zu archivierenden Dateien können mit Platzhaltern oder als einzelne oder mehrere Dateinamen/Pfade angegeben werden
Ein Beispiel: Ich habe drei Dateien in meinem Verzeichnis
$ ls -l
insgesamt 12
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Und ich möchte ein tar-Archiv
erstellen, das alle drei Dateien enthält, das geht wie folgt
$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$
ls -l archive.tar
-rw-r-r-
1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
$
Ich kann auch nur bestimmte Dateien zum Archivieren angeben, z.B.
$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$
ls -l archive1.tar
-rw-r-r-
1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$
Komprimiertes Archiv erstellen (GZ)
tar ermöglicht nicht nur die Archivierung von Dateien, sondern auch deren Komprimierung, um Platz zu sparen. Eines der beliebtesten Komprimierungsformate ist gunzip, das in der Regel durch die Erweiterung .gz
nach .tar
oder als tgz
dargestellt wird. Wir können die Flagge z
verwenden, um anzugeben, dass die Dateien mit gunzip komprimiert werden sollen. Hier ist ein Beispiel
$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$
ls -l archive.tar archive.tar.gz
-rw-r-r-
1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r-r-
1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz
$
Sie können feststellen, dass sich die Größe der beiden Archivdateien erheblich unterscheidet, obwohl beide die gleichen drei Dateien enthalten. Dies ist auf die Komprimierung mit dem Flag z
zurückzuführen
Komprimiertes Archiv erstellen (BZ2)
tar unterstützt mehrere andere Komprimierungsformate. Eine davon ist bz2
oder bzip2
, das durch die Erweiterung tar.bz2
oder manchmal auch als tbz2
dargestellt wird. Damit erhalten Sie zwar eine kleinere Archivgröße, aber es verbraucht mehr CPU-Leistung, so dass der Prozess der Komprimierung/Dekomprimierung langsamer sein kann als bei einem gz-Archiv
Beispiel
$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar: POSIX tar-Archiv (GNU)
archive.tar.bz2: bzip2 komprimierte Daten, Blockgröße = 900k
archive.tar.gz: gzip komprimierte Daten, von Unix, Originalgröße modulo 2^32 10240
$
Alle Dateien entpacken
Ein tar-Archiv (ob komprimiert oder unkomprimiert) kann einfach mit der Option x
entpackt werden. Die folgenden Beispiele verdeutlichen seine Verwendung
$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Dies funktioniert für ein gz-komprimiertes
Archiv wie folgt
$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Oder auch für ein bz2
komprimiertes Archiv als
$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Tar-Inhalt auflisten
Um den Inhalt eines tar-Archivs aufzulisten, können Sie das Flag t
verwenden, wie unten gezeigt
$ tar tvf archive.tar.bz2
-rw-r-r-
abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r-r-
abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r-r-
abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$
Bestimmte Dateien enttarnen
Sie können eine einzelne Datei aus einer tar-
oder tar.gz-
oder tar.bz2-Archiv
entpacken, indem Sie den Dateinamen wie folgt angeben
$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$
ls -l
total 8
-rw-r-r-
1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
$
In ähnlicher Weise können Sie mehrere Dateinamen durch Leerzeichen getrennt angeben, um sie in einem Rutsch zu entpacken
$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Untar mit Wildcard
Um eine oder mehrere Dateien unter Verwendung eines Platzhaltermusters
zu entpacken, verwenden Sie die Option --wildcards
$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r-r-
1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$
Dateien zum Archiv hinzufügen
Neue Dateien können zu bestehenden unkomprimierten Tarballs hinzugefügt werden, indem Sie r
oder --append
mit neuen Dateinamen oder Platzhaltermustern verwenden (beachten Sie, dass dies nur mit unkomprimierten .tar-Dateien
und nicht mit den komprimierten Formaten tar.gz
oder tar.bz2
funktioniert)
$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r-r-
abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt
-rw-r-r-
abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt
$
Sie können feststellen, dass die Auflistung des Inhalts von archive.tar
wieder die beiden neu hinzugefügten Dateien anzeigt
Dateien aus dem Archiv löschen
Das Entfernen bestimmter Dateien aus einem tar-Archiv ist mit der Option --delete
wie folgt möglich (vergleichen Sie die tar-Liste vor und nach dem Löschen der Dateien)
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r-r-
abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r-r-
abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$
Auch dies funktioniert nur bei unkomprimierten Tarballs und schlägt bei komprimierten Archivformaten fehl
Erstellen mit Verify
Bei der Erstellung von unkomprimierten tar-Dateien können Sie den Inhalt des Archivs mit der W-Flagge
wie folgt verifizieren
$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$
Dies kann nicht mit Komprimierungsflags verwendet werden, obwohl Sie die erstellte tar-Datei
später mit gzip
oder andere Tools komprimieren können
Tar in einen Ordner extrahieren
Wenn Sie den Inhalt Ihres Tarballs nicht in das aktuelle Verzeichnis, sondern in einen bestimmten Ordner extrahieren möchten, verwenden Sie die Flagge -C
mit dem Verzeichnispfad wie unten gezeigt
$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r-r-
1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r-r-
1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r-r-
1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$
Diff Flag verwenden
Sie können die Flagge --diff
oder d
verwenden, um Änderungen zwischen den Dateien im tar-Archiv und den Dateien im Dateisystem zu finden. Hier ist ein Beispiel, bei dem diff
einmal ausgeführt wird, wenn die Datei im tar-Archiv und die Datei außerhalb des Archivs identisch waren. Nachdem die Datei aktualisiert wurde, wurde es noch einmal ausgeführt, um den Unterschied in der Ausgabe zu zeigen
$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time unterscheidet sich
file4.txt: Größe weicht ab
$
Dateien ausschließen
Bei der Erstellung von tar-Archiven kann es erforderlich sein, bestimmte Dateien auszuschließen. Dies kann mit dem Flag --exclude
erreicht werden
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r-r-
abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r-r-
abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$
Wie Sie der obigen Ausgabe entnehmen können, können wir das Flag --exclude
mehrfach angeben, um mehrere Dateinamen oder Muster in der UND-Bedingung
angeben. Beachten Sie, dass von den sechs Dateien im Verzeichnis
des obigen Beispiels nur zwei Dateien die Bedingung erfüllen, um in archive.at.gz
aufgenommen zu werden
Tar Inhalt anzeigen Größe
Wir können die Größe des Inhalts eines komprimierten tar-Archivs mit dem folgenden Befehl abfragen
$ tar tvf archive.tar.gz
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r-r-
abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$
tar -xzf archive.tar.gz --to-stdout|wc -c
56
$
Ähnlich für bz2
Archiv
$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r-r-
abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$
tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$
Berechtigungen beibehalten
Standardmäßig behält der tar-Befehl
die Berechtigungen der Dateien und Verzeichnisse bei, die er archiviert. Sie können dies jedoch auch explizit mit der Flagge -p
oder --preserve-permissions
angeben, wie unten gezeigt
$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$
Zusammenfassung 👨💻
tar ist seit langem ein nützliches Dienstprogramm auf Unix/Linux-Systemen und wurde hauptsächlich für Archivierungs- und Sicherungsaufgaben verwendet. Das Dienstprogramm hat sich im Laufe der Zeit mit vielen Optionen weiterentwickelt. Es kann für einfache bis komplexe Aufgaben verwendet werden, vorausgesetzt, Sie kennen die Funktionen, die es bietet. Dieser Artikel behandelt einige der grundlegenden Operationen, die Sie mit dem Befehl tar
durchführen können, und zeigt, wie er Ihnen bei Ihren tägliche Aufgaben der Systemverwaltung kann helfen
Weitere Einzelheiten finden Sie auf der Manpage man tar
oder mit dem Befehl tar --help
oder tar --usage
.