15 tar-Befehlsbeispiele für Sysadmin und Entwickler

tar ist eines der beliebtesten Dateiarchivierungsformate, die in Unix- und Linux-basierten Systemen verfügbar sind.

Der Name selbst leitet sich von Tape ARchive ab, da es zum Schreiben sequentieller Daten auf Bandgeräte entwickelt wurde. Es wird manchmal auch als Tarball bezeichnet.

Standardmäßig archiviert tar die Dateien nur unkomprimiert, aber mit einigen Teilen. Wir können verschiedene Komprimierungstechniken verwenden, um eine komprimierte Ausgabe zu erhalten. Das tar-Dienstprogramm ist normalerweise standardmäßig in den meisten Linux-Distributionen enthalten, und das Format selbst wird von anderen Betriebssystemen, einschließlich Windows und macOS, über verschiedene Tools und Dienstprogramme unterstützt.

Wir werden in diesem Artikel einige der allgemeinen Beispiele und die Verwendung des tar-Befehls und seiner unterstützten Flags behandeln.

Also lasst uns anfangen…

tar-Archiv erstellen

Um ein einfaches unkomprimiertes Archiv zu erstellen, lautet die Syntax für den tar-Befehl:

$ tar cvf <tar-file-name> <files-to-archive>

Hier stehen die Flags c für Erstellung, v für ausführliche Ausgabe und f für die Angabe des Dateinamens des tar-Archivs. Geben Sie per Konvention den Namen der TAR-Datei mit der Erweiterung .tar an. Zu archivierende Dateien können mit Platzhaltern oder als einzelne oder mehrere Dateinamen/Pfade angegeben werden.

Als Beispiel habe ich drei Dateien in meinem Verzeichnis:

$ ls -l
total 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, 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, wie:

$ 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 (GZ) erstellen

tar ermöglicht nicht nur das Archivieren von Dateien, sondern auch das Komprimieren, um Platz zu sparen. Eines der beliebtesten Komprimierungsformate ist Gunzip, das normalerweise durch die Erweiterung .gz nach .tar oder als tgz dargestellt wird. Wir können das z-Flag verwenden, um anzugeben, dass die Dateien mit gunzip komprimiert werden müssen. 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 beobachten, dass sich die Größe beider Archivdateien erheblich unterscheidet, obwohl beide die gleichen drei Dateien enthalten. Dies liegt an der Verwendung der Komprimierung unter Verwendung des Z-Flags.

Komprimiertes Archiv erstellen (BZ2)

tar unterstützt mehrere andere Komprimierungsformate. Eines davon ist bz2 oder bzip2, das durch die Erweiterung tar.bz2 oder manchmal als tbz2 dargestellt wird. Es kann Ihnen eine kleinere Archivgröße geben, verbraucht aber wiederum mehr CPU, sodass der Prozess des Komprimierens/Dekomprimierens langsamer sein kann als bei gz-Archiven.

  Fix System konnte die eingegebene Umgebungsoption nicht finden

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 archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 10240
$

Alle Dateien entpacken

Ein tar-Archiv (ob komprimiert oder unkomprimiert) kann einfach mit der Option x extrahiert werden. Die folgenden Beispiele verdeutlichen die 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 sogar 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-Inhalte auflisten

Um den Inhalt eines tar-Archivs aufzulisten, können Sie das t-Flag wie unten gezeigt verwenden:

$ 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
$

Entpacken Sie bestimmte Dateien

Aus einem tar-, tar.gz- oder tar.bz2-Archiv kann nur eine Datei extrahiert werden, indem der Dateiname wie folgt angegeben wird:

$ 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
$

Ebenso können Sie mehrere durch Leerzeichen getrennte Dateinamen angeben, um sie auf einmal zu extrahieren.

$ 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
$

Entpacken mit Wildcard

Um eine oder mehrere Dateien mit einem Platzhaltermuster zu extrahieren, verwenden Sie das Flag –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/angehängt werden, indem r oder –append Flag mit neuen Dateinamen oder Platzhaltermustern verwendet wird (denken Sie daran, dass dies nur mit unkomprimierten .tar-Dateien und nicht mit tar.gz- oder tar.bz2-komprimierten Formaten 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 beobachten, dass die Auflistung des Inhalts von archive.tar erneut die beiden neu hinzugefügten Dateien anzeigt.

  So löschen Sie ein Microsoft Teams-Konto

Dateien aus dem Archiv löschen

Das Entfernen bestimmter Dateien aus einem tar-Archiv ist mit dem Flag –delete wie unten gezeigt möglich (vergleichen Sie die tar-Auflistung vor und nach dem Löschen von 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 für unkomprimierte Tarballs und schlägt bei komprimierten Archivformaten fehl.

Mit Verifizieren erstellen

Während Sie unkomprimierte Tar-Dateien erstellen, können Sie den Inhalt des Archivs mit dem W-Flag wie folgt überprüfen:

$ 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 Komprimierungs-Flags verwendet werden, obwohl Sie die erstellte tar-Datei später mit gzip oder anderen Tools komprimieren können.

Extrahieren Sie tar in den Ordner

Wenn Sie Ihren Tarball-Inhalt in einen bestimmten Ordner anstelle des aktuellen Verzeichnisses extrahieren möchten, verwenden Sie das Flag -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
$

Verwenden Sie das Diff-Flag

Sie können das Flag –diff oder d verwenden, um Änderungen zwischen den Dateien im tar-Archiv und denen im Dateisystem zu finden. Hier ist ein Beispiel, das den Unterschied einmal ausführt, wenn die Datei innerhalb und außerhalb des tar gleich war. Nach dem Aktualisieren der Datei wurde sie erneut 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 differs
file4.txt: Size differs
$

Dateien ausschließen

Das Ausschließen bestimmter Dateien kann beim Erstellen von Tar-Archiven erforderlich sein. 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 mehrmals angeben, um mehrere Dateinamen oder Muster in der AND-Bedingung anzugeben. Beachten Sie, dass von den sechs Dateien im Verzeichnis im obigen Beispiel nur zwei Dateien die Bedingung erfüllten, in archive.at.gz aufgenommen zu werden.

  So planen Sie ein Google Meet-Meeting

Größe des tar-Inhalts anzeigen

Wir können die Größe des Inhalts eines komprimierten Tar-Archivs mit dem folgenden Befehl abrufen:

$ 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 das 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 Berechtigung von Dateien und Verzeichnissen bei, die er archiviert, obwohl Sie dies explizit mit -p flag oder –preserve-permissions angeben können, 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 tar-Befehl ausführen können, und zeigt, wie er Ihnen bei Ihren täglichen Systemverwaltungsaufgaben helfen kann.

Lesen Sie die Manpage man tar oder verwenden Sie den Befehl tar –help oder tar –usage, um weitere Details zu erhalten.