Ich bin neugierig und habe ein bisschen gelesen, habe aber noch Fragen.
Was unterscheidet CPIO von TAR? Mir wurde in einer anderen Frage gesagt, dass tar zum Zusammenführen vieler Dateien in einem Archiv dient, das dann normalerweise gzip'd oder bzip'd ist.
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.
Oder habe ich die völlig falsche Vorstellung? Ist das nicht der Zweck des CPIO?
Dies ist die Art von Befehlen, die ich nach dem Lesen aufgerufen habe, damit Oracle Dokumente zum Sichern von ZFS-Snapshots erstellt.
# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2
# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2
pax
: PAntworten:
Beide
tar
undcpio
haben einen einzigen Zweck: Verknüpfen Sie mehrere separate Dateien zu einem einzigen Stream. Sie komprimieren keine Daten. (Heutzutagetar
ist es aufgrund seiner relativen Einfachheit populärer - es kann Eingabedateien als Argumente annehmen, anstatt mit diesen gekoppelt zufind
werdencpio
.)In Ihrem Fall benötigen Sie keines dieser Tools. Sie hätten keine nützlichen Auswirkungen, da Sie nicht viele separate Dateien haben.
zfs send
tat schon das selbe, wastar
getan hätte. Sie haben also keine Dateien, nur einen namenlosen Stream.Um den Schnappschuss zu komprimieren, müssen Sie nur die
zfs
Ausgabe durch ein Komprimierungsprogramm leiten:(Sie können
gzip
mitxz
oderbzip2
oder einem anderen Stream-Komprimierungs-Tool ersetzen , wenn Sie möchten.)quelle
zfs send
macht schon das selbe,tar
was das machen würde.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 :
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:
Nun, jede Version von tar (GNU oder nicht) kann in einer Pipe verwendet werden. Verwenden Sie einfach ein Minuszeichen (
-
) als Archivname: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.quelle
cp
), move (mv
)diff
usw. fragen ; )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. Sie haben gesagt:only cpio may read the format of tar
. ist das kein widerspruchtar und cpio haben im Wesentlichen dieselbe Funktion: Sie erstellen eine einzige zusammenhängende Datei aus einer Eingabe mehrerer Dateien und Verzeichnisse. Ursprünglich diente dies dazu, das Ergebnis auf Band zu bringen, aber heutzutage wird es im Allgemeinen verwendet, um in ein Komprimierungsdienstprogramm wie das oben beschriebene einzuspeisen. Dies liegt daran, dass das Komprimieren einer einzelnen großen Datei zeit- und platzsparender ist als das Komprimieren vieler kleiner Dateien. Sie sollten beachten, dass viele Bildformate (PNG, JPG usw.) bereits stark komprimiert sind und möglicherweise sogar etwas größer werden, wenn sie mit einem Komprimierungsprogramm erstellt werden.
Weder tar noch cpio machen selbst eine Komprimierung. Tar hat den Krieg "Was sollen wir verwenden, um aggregierte Dateien zu erstellen" effektiv "gewonnen", aber cpio bekommt an verschiedenen Stellen einen Lookin. Mir sind keine Vorteile des einen gegenüber dem anderen bekannt, Teer gewinnt dadurch, dass er häufiger verwendet wird.
tar kann in der Tat die Eingabe von stdin und die Ausgabe von stdout übernehmen - was dann in bzip2 weitergeleitet wird, wie Sie es getan haben oder so ähnlich. Bei Aufruf mit der Option "z" wird automatisch gzip für die Ausgabe aufgerufen.
quelle
-j
bzip2 nicht aufzurufen?tar -caf myfiles.tar.xz myfiles/
wird mit komprimierenxz
und dastar -caf myfiles.tar.gz myfiles/
wird mit komprimierengzip
.Ich habe einen HP-Kundendienst in ca. gefragt. 1996 warum
cpio
übertar
.Mir wurde gesagt, dass sich Bänder dehnen und abnutzen. Wenn
tar
ein nicht lesbarer Teil des Bandes erreicht wird, schlägt dies fehl und gibt die Fehlernummer zurück. Wenncpio
ein unlesbarer Teil erreicht wird, wird der nächste lesbare Block erneut synchronisiert und fortgesetzt.Ich habe noch nie eine Dokumentation gesehen, die dies unterstützt, aber immer verwendet
cpio
.quelle
Ebenfalls erwähnenswert: Unter (mindestens) FreeBSD und Mac OS X können Sie cpio-Dateien mit tar bearbeiten. BSD tar benutzt libarchive unter der Haube, damit es mit cpio, pax, shar ... umgehen kann
Dies bedeutet, dass die Usability-Probleme des
cpio
Befehls Sie nicht daran hindern müssen, mit cpio-Dateien zu interagieren.quelle
only cpio may read the format of tar
. Sie haben gesagt:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. ist das kein widerspruchObwohl die Antworten hier bereits vergleichbar
cpio
undtar
sehr gut sind, möchte ich eine dercpio
Funktionen hervorheben , die als Pipeline-Modus bezeichnet werden und die es effizienter macht, ausgewählte Dateien (dh Viafind
und Filter) unter Beibehaltung ihrer Verzeichnisstruktur zu kopieren . Diese Funktion ist gut dokumentiert und sieht im Grunde so aus:Das Äquivalent mit
tar
würde ungefähr so aussehen:Es gibt natürlich auch andere Alternativen wie
rsync
undcp --parents
diskutierte in einem anderen Thread , aber nichts kommt nah an der Flexibilität durch die Kombination angeboten vonfind
undcpio
. Datar
ich für die Erstellung von Archiven allgegenwärtig bin, ist dies der einzige Grund, warum ich ihn immer noch benutzecpio
.quelle