Zusätzlich zu dem, was zuvor von Grawity und Paul gesagt wurde :
Geschichte
In den "alten Tagen" war cpio (mit verwendeter Option -c
) das Werkzeug, um Dateien auf andere UNIX-Derivate zu verschieben, da es portabler und flexibler als tar war . Die Teer- Portabilitätsprobleme können jedoch seit Ende der 1980er Jahre als gelöst angesehen werden.
Unglücklicherweise war es ungefähr zu dieser Zeit, dass verschiedene Hersteller das -c
Format von cpio zerrissen haben (schauen Sie sich einfach die Handbuchseite für GNU cpio und die Option an -H
). Zu dieser Zeit wurde tar portabler als cpio ... Es dauerte fast ein ganzes Jahrzehnt, bis die verschiedenen UNIX-Anbieter das geklärt hatten. Mit GNU tar und GNU cpio installiert wurde ein Muss für alle Administratoren , die mit Bändern aus verschiedenen Quellen beschäftigen mußten dann zurück (auch heute nehme ich an ).
Benutzeroberfläche
tar verwendet möglicherweise eine Bandkonfigurationsdatei, in der der Administrator die an das System angeschlossenen Bandlaufwerke konfiguriert. Der Benutzer würde dann einfach "Nun, ich nehme Bandlaufwerk 1" sagen, anstatt sich den genauen Geräteknoten für das Band merken zu müssen (was sehr verwirrend sein kann und auch auf verschiedenen UNIX-Plattformen nicht standardisiert ist.
Der Hauptunterschied ist jedoch:
tar kann Verzeichnisse selbst durchsuchen und verwendet die Liste der zu sichernden Dateien oder Verzeichnisse aus Befehlszeilenargumenten.
cpio archiviert nur die Dateien oder Verzeichnisse, denen es befohlen wurde, durchsucht die Unterverzeichnisse jedoch nicht rekursiv. Außerdem ruft cpio die Liste der zu archivierenden Elemente von stdin ab. Deshalb wird es fast immer in Kombination mit find verwendet .
Ein cpio- Befehl sieht für den Anfänger im Vergleich zu tar oft furchterregend aus :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Ich denke, das ist der Hauptgrund, warum die meisten Leute tar verwenden , um Archivdateien zu erstellen: Für einfache Aufgaben wie das Bündeln eines vollständigen Verzeichnisses ist es einfach einfacher zu verwenden.
Auch GNU tar bietet die Möglichkeit , -z
die das Archiv verursacht mit zu komprimierenden GNU Zip - on - the - fly, so dass die Dinge noch einfacher.
Andererseits kann man mit find & cpio raffinierte Dinge machen . Tatsächlich handelt es sich eher um einen UNIX-ähnlichen Ansatz: Warum sollte die Verzeichnisbaumsuche in cpio aufgenommen werden, wenn es bereits ein Tool gibt, das fast alles erledigt, was man sich vorstellen kann: find . Dinge, die mir in den Sinn kommen, sind nur das Sichern von Dateien, die neuer sind als ein bestimmtes Datum, das Einschränken der Dateien auf diejenigen, die sich im selben Dateisystem befinden oder das Filtern der Find-Ausgabe grep -v
, um bestimmte Dateien auszuschließen ...
Die Leute von GNU tar haben viel Arbeit investiert, um viele der Dinge zu berücksichtigen , die vorher nur mit cpio möglich waren . Tatsächlich haben beide Tools voneinander gelernt - aber nur cpio kann das Format von tar lesen - und nicht umgekehrt.
Teer- und Ausgabeverarbeitung
Eine letzte Anmerkung zu etwas, das Sie gesagt haben:
Außerdem wurde mir mitgeteilt, dass TAR von STDOUT nicht komprimiert werden kann. Ich möchte ZFS-Snapshots für Backups archivieren / komprimieren. Ich habe mich gefragt, ob ich CPIO mit bzip2 kombinieren kann, um diesen Effekt zu erzielen.
Nun, jede Version von tar (GNU oder nicht) kann in einer Pipe verwendet werden. Verwenden Sie einfach ein Minuszeichen ( -
) als Archivname:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Auch GNU tar bietet die Möglichkeit , --to-command
einen Post - Prozessor - Befehl angeben - obwohl ich würde immer noch das Rohr bevorzugen. Vielleicht ist es hilfreich, wenn Sie auf bestimmte Hardwaregeräte schreiben.
pax
: P