Je suis curieux et j'ai lu un peu, mais j'ai encore des questions.
Qu'est-ce qui différencie CPIO de TAR? On m'a dit dans une autre question que tar servait à rassembler de nombreux fichiers dans une archive, qui est alors généralement gzip'd ou bzip'd.
De plus, on m'a dit que TAR ne peut pas compresser à partir de STDOUT. Je souhaite archiver / compresser des instantanés ZFS pour les sauvegardes. Je me demandais si je pouvais combiner CPIO avec bzip2 pour obtenir cet effet.
Ou est-ce que j'ai une idée complètement fausse? N'est-ce pas le but de CPIO?
C’est le genre de commande que j’ai eu à lire après avoir lu afin que Oracle docs sur la sauvegarde des instantanés ZFS.
# 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
: PRéponses:
Les deux
tar
etcpio
ont un seul but: concaténer de nombreux fichiers séparés en un seul flux. Ils ne compressent pas les données. (Ces jourstar
sont plus populaires en raison de leur relative simplicité - il peut prendre des fichiers d'entrée en tant qu'arguments au lieu d'avoir à être couplés avec cefind
quicpio
a été fait.)Dans votre cas, vous n'avez besoin d' aucun de ces outils. ils n'auraient aucun effet utile, car vous n'avez pas beaucoup de fichiers séparés.
zfs send
déjà fait la même chose quitar
aurait fait. Donc, vous n'avez aucun fichier, seulement un flux sans nom.Pour compresser l'instantané, il vous suffit de diriger la
zfs
sortie via un programme de compression:(Vous pouvez remplacer
gzip
avecxz
oubzip2
ou tout autre outil de compression de flux, si vous le souhaitez.)la source
zfs send
déjà la même chose que voustar
feriez.En plus de ce qui a été dit auparavant par Grawity et Paul :
Histoire
A l'époque, cpio (avec l'option
-c
utilisée) était l' outil à utiliser pour déplacer des fichiers vers d'autres dérivés UNIX, car il était plus portable et plus flexible que tar . Mais les problèmes de portabilité du goudron peuvent être considérés comme résolus depuis la fin des années 1980.Malheureusement, c’est à peu près à cette époque que différents fournisseurs ont modifié le
-c
format de cpio (il suffit de regarder la page de manuel de GNU cpio et l’option-H
). À ce moment-là, tar devenait plus portable que cpio ... Il a fallu presque une décennie pour que les différents fournisseurs UNIX aient réglé le problème. L' installation de GNU tar et de GNU cpio était une nécessité pour tous les administrateurs qui devaient traiter des bandes de sources différentes à l'époque (encore aujourd'hui, je présume).Interface utilisateur
tar peut utiliser un fichier de configuration de bande dans lequel l'administrateur configurerait les lecteurs de bande connectés au système. L'utilisateur pourrait alors simplement dire "Je prendrai le lecteur de bande 1" au lieu de devoir mémoriser le nœud de périphérique exact de la bande (ce qui peut être très déroutant et n'est pas standardisé sur différentes plates-formes UNIX.
Mais la principale différence est:
tar est capable de rechercher seul des répertoires et prend la liste des fichiers ou des répertoires à sauvegarder à partir d'arguments en ligne de commande.
cpio archive uniquement les fichiers ou les répertoires auxquels il est dit, mais ne recherche pas les sous-répertoires de manière récursive. De plus, cpio obtient la liste des éléments à archiver de stdin - c’est pourquoi il est presque toujours utilisé en combinaison avec find .
Une commande cpio semble souvent effrayante pour le débutant si elle est comparée à tar :
Je pense que c'est la raison principale pour laquelle la plupart des gens utilisent tar pour créer des fichiers d'archive: Pour des tâches simples comme assembler un répertoire complet, il est simplement plus facile à utiliser.
De plus, GNU tar offre la possibilité
-z
de compresser l’archive à la volée avec GNU zip , ce qui rend les choses encore plus faciles.D'autre part, on peut faire des choses intéressantes avec find & cpio . En fait, il s’agit d’une approche plus semblable à UNIX: pourquoi inclure la recherche dans l’arborescence de répertoires dans cpio s’il existe déjà un outil prenant en charge presque tout ce à quoi on peut penser: find . Les choses qui me viennent à l’esprit ne font que sauvegarder des fichiers plus récents qu’une certaine date, limiter les fichiers à ceux qui résident dans le même système de fichiers ou filtrer la recherche-sortie
grep -v
en excluant certains fichiers ...Les utilisateurs de GNU tar ont consacré beaucoup de temps à inclure un grand nombre de choses auparavant possibles uniquement avec cpio . En fait, les deux outils ont appris l'un de l'autre - mais seul cpio peut lire le format de tar - et non l'inverse.
traitement de goudron et de sortie
Une dernière note à quelque chose que vous avez dit:
Eh bien, chaque version de tar (GNU ou non) peut être utilisée dans un tuyau. Utilisez simplement un signe moins (
-
) comme nom d’archive:De plus, GNU tar offre la possibilité
--to-command
de spécifier une commande de post-processeur - bien que je préfère quand même le canal. Peut-être est-il utile lors de l'écriture sur certains périphériques matériels.la source
cp
), move (mv
)diff
,, etc.; - )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. vous avez dit:only cpio may read the format of tar
. n'est-ce pas une contradiction?tar et cpio ont essentiellement la même fonction, qui consiste à créer un seul fichier contigu à partir d'une entrée de plusieurs fichiers et répertoires. À l'origine, c'était pour mettre le résultat sur une bande, mais de nos jours, il est généralement utilisé pour alimenter un utilitaire de compression, comme vous l'avez décrit ci-dessus. En effet, la compression d'un seul fichier volumineux est plus efficace en termes de temps et d'espace que de compresser beaucoup de petits fichiers. Notez que de nombreux formats d'image (png, jpg, etc.) sont déjà fortement compressés et peuvent même devenir un peu plus grands s'ils sont soumis à un utilitaire de compression.
Ni tar ni cpio ne font de compression eux-mêmes. Tar a effectivement "remporté" la guerre "que devons-nous utiliser pour créer des fichiers agrégés", mais cpio est consulté à divers endroits. Je ne suis pas au courant des avantages de l'un sur l'autre, tar gagne en étant plus couramment utilisé.
tar peut en effet prendre les entrées sur stdin et les sorties sur stdout - qui seront ensuite redirigées vers bzip2 comme vous l'avez déjà fait ou quelque chose de similaire. Si appelé avec l'option "z", il invoquera automatiquement gzip sur la sortie.
la source
-j
pas invoquer bzip2?tar -caf myfiles.tar.xz myfiles/
compressera en utilisantxz
et cecitar -caf myfiles.tar.gz myfiles/
compressera engzip
.J'ai demandé à un support technique HP en ca. 1996 pourquoi utiliser
cpio
plustar
.On m'a dit que les bandes s'étiraient et s'usaient. Lorsqu'il
tar
atteint une partie illisible de la bande, il échoue et renvoie le numéro de l'erreur. Lorsquecpio
atteint une partie illisible, il continue au prochain bloc lisible, se resynchronise et continue.Je n'ai jamais vu de documentation à l'appui, mais toujours utilisée
cpio
.la source
A noter également: sur (au moins) FreeBSD et Mac OS X, vous pouvez manipuler des fichiers cpio avec tar. BSD tar utilise libarchive sous le capot, il peut donc gérer cpio, pax, shar ...
Cela signifie que les problèmes d'utilisation de la
cpio
commande ne doivent pas nécessairement vous empêcher d'interagir avec les fichiers cpio.la source
only cpio may read the format of tar
. vous avez dit:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. n'est-ce pas une contradiction?Bien que les réponses ici comparent déjà
cpio
ettar
très bien, je voudrais mettre en évidence l’une descpio
fonctionnalités de ce dernier, appelée mode pipeline, qui rend plus efficace la copie de fichiers sélectifs (c.-à-d. Viafind
et filter) tout en préservant la structure de leurs répertoires. Cette fonctionnalité est bien documentée et se présente comme suit:L'équivalent avec
tar
impliquerait quelque chose comme ceci:Il existe bien sûr d’autres alternatives telles que
rsync
etcp --parents
discutées dans un autre fil , mais rien n’est comparable à la flexibilité offerte par la combinaison defind
etcpio
. Étanttar
omniprésent dans la création d’archives, c’est la seule raison pour laquelle j’utilise encorecpio
.la source