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 :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
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:
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.
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:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
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.
pax
: P