15 Beispiele für tar-Befehle für Sysadmin und Entwickler
Veröffentlicht: 2021-09-21tar ist eines der beliebtesten Dateiarchivierungsformate, die in Unix- und Linux-basierten Systemen verfügbar sind.
Der Name selbst ist aus T Affen AR schnittlauch abgeleitet , wie es für das Schreiben von Daten auf sequentielle Bandgeräten entwickelt wurde. Es wird manchmal auch als Tarball bezeichnet.
Standardmäßig archiviert tar die Dateien nur ohne Komprimierung, aber mit einigen Teilen. Wir können verschiedene Komprimierungstechniken verwenden, um eine komprimierte Ausgabe zu erhalten. Das Dienstprogramm tar 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 häufigsten 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 Befehl tar :
$ tar cvf <tar-file-name> <files-to-archive> Hier steht das Flag c für die Erstellung, v für die ausführliche Ausgabe und f für die Angabe des Dateinamens des tar-Archivs. .tar Konvention den tar-Dateinamen mit der Erweiterung .tar . Zu archivierende Dateien können mit Wildcards 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. Dies kann folgendermaßen erfolgen:
$ 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 zum Beispiel:
$ 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 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 . Wir können das Flag z 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 feststellen, dass die Größe der beiden Archivdateien erheblich unterschiedlich ist, obwohl beide dieselben drei Dateien enthalten. Dies ist auf die Verwendung der Komprimierung mit dem z Flag zurückzuführen.
Komprimiertes Archiv erstellen (BZ2)
tar unterstützt mehrere andere Komprimierungsformate. Eine davon ist bz2 oder bzip2 die durch die Erweiterung tar.bz2 oder manchmal als tbz2 . Es kann zu einer geringeren Archivgröße führen, verbraucht aber wiederum mehr CPU, sodass der Prozess des Komprimierens/Dekomprimierens 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 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. Nachfolgende 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 gz :
$ 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 $Bestimmte Dateien entpacken
Nur eine Datei kann aus einem tar oder tar.gz oder tar.bz2 Archiv tar.bz2 werden, indem der Dateiname wie tar.bz2 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 Platzhalter PATTERN , verwenden --wildcards 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 vorhandenen unkomprimierten Tarballs hinzugefügt/angehängt werden, --append Flag r oder --append mit neuen Dateinamen oder Platzhaltermustern verwendet wird (denken Sie daran, dass dies nur mit unkomprimierten .tar Dateien und nicht mit den komprimierten Formaten tar.gz oder tar.bz2 ):

$ 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 wieder die beiden neu hinzugefügten Dateien anzeigt.
Dateien aus dem Archiv löschen
Das Entfernen bestimmter Dateien aus einem tar-Archiv ist mit --delete Flag --delete wie unten gezeigt möglich (vergleichen Sie die tar-Liste 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 bei unkomprimierten Tarballs und schlägt bei komprimierten Archivformaten fehl.
Mit Verify erstellen
Beim Erstellen von unkomprimierten Tar-Dateien 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 Komprimierungsflags verwendet werden, obwohl Sie die erstellte tar Datei später mit gzip oder anderen Tools gzip können.
Tar in Ordner extrahieren
Wenn Sie Ihren Tarball-Inhalt in einen bestimmten Ordner statt in das aktuelle Verzeichnis 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 $Diff-Flag verwenden
Sie können --diff oder d flag verwenden, um alle Änderungen zwischen den Dateien im tar-Archiv und denen im Dateisystem zu finden. Hier ist ein Beispiel, das das diff einmal diff , wenn die Datei innerhalb und außerhalb des Tars gleich war. Nach dem Aktualisieren der Datei wurde sie noch einmal ausgeführt, um den Unterschied in der Ausgabe anzuzeigen.
$ 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 eine Anforderung sein. Dies kann mit --exclude Flag --exclude .
$ 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 --exclude 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 dir im obigen Beispiel nur zwei Dateien die Bedingung erfüllten, in archive.at.gz .
Größe des tar-Inhalts anzeigen
Wir können die Größe des Inhalts eines komprimierten Tar-Archivs mit dem folgenden Befehl ermitteln:
$ 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
--preserve-permissions Befehl tar die Berechtigung für Dateien und Verzeichnisse bei, die er archiviert, obwohl Sie dies explizit mit dem Flag -p oder --preserve-permissions angeben können, wie unten gezeigt:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $Zusammenfassung
tar ist lange Zeit ein nützliches Dienstprogramm auf Unix/Linux-Systemen und wurde hauptsächlich für Archivierungs- und Backup-Aufgaben 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. In diesem Artikel wurden einige der grundlegenden Operationen behandelt, die Sie mit dem Befehl tar ausführen können, und zeigt, wie er Ihnen bei Ihren täglichen Systemverwaltungsaufgaben helfen kann.
tar --help Manpage man tar oder verwenden tar --usage Befehl tar --help oder tar --usage , um weitere Details zu erhalten.
