cpio VS tar et cp
Je viens d'apprendre que cpio dispose de trois modes: la copie, la copie et le pass-through.
Je me demandais quels sont les avantages et les inconvénients de la commande cpio, en vertu de la copie et de copie dans les modes de goudron. Quand est-il préférable d'utiliser la commande cpio et quand utiliser du goudron?
Question similaire pour cpio, en vertu de pass-through mode versus cp.
Merci et salutations!
source d'informationauteur Tim
Vous devez vous connecter pour publier un commentaire.
Je ne vois aucune raison d'utiliser la commande cpio pour toute raison autre que l'extraction a ouvert les fichiers RPM, via disrpm ou rpm2cpiomais il peut y avoir des cas particuliers où cpio est préférable de goudron.
De l'histoire et de la popularité
Les deux tar et cpio sont en concurrence les formats d'archives qui ont été introduites dans La Version 7 Unix en 1979, puis inclus dans POSIX.1-1988, bien que le goudron est resté dans la prochaine norme POSIX.1-2001Un.
Cpio format de fichier a changé plusieurs fois et n'a pas été pleinement compatibles entre les versions. Par exemple, il y a maintenant un fichier ASCII est codé de la représentation binaire des informations sur le fichier de données.
Goudron est plus universellement connu, est devenu plus polyvalent au fil des ans, et est plus susceptible d'être pris en charge sur un système donné. Cpio est encore utilisée dans quelques domaines, tels que la Red Hat package format (TR /min), bien que TR /min v5 (qui est certes obscur) utilise xar au lieu de cpio.
À la fois en direct sur la plupart des systèmes de type Unix, bien que le goudron est la plus courante. Voici Debian installer stats:
Modes
Copier-out: C'est pour les archives de la création, qui s'apparente à
tar -pc
Copie dans: C'est pour l'extraction de l'archive, qui s'apparente à
tar -px
Pass-through: C'est essentiellement une combinaison des deux, qui s'apparente à
tar -pc … |tar -px
mais en une seule commande (et donc au microscope le plus rapide). Il est similaire à lacp -pdr
bien que les deux cpio et (surtout) de goudron ont plus la capacité de personnalisation. Également envisager dersync -a
qui, souvent, les gens à oublier, car il est plus généralement utilisé à travers une connexion réseau.Je n'ai pas comparé leurs performances, mais je pense qu'ils vont être assez similaire dans la CPU, de la mémoire et de la taille de l'archive (après compression).
TAR(1) est tout aussi bon que cpio() si ce n'est mieux. On peut dire que c'est , en fait, mieux que CPIO, car elle est omniprésente et vérifiées. Il doit y avoir une raison pour laquelle nous avons des boules de goudron partout.
Pourquoi est cpio mieux que le goudron? Un certain nombre de raisons.
Lors de la création, il a beaucoup plus de contrôle sur les fichiers qui sont et ne sont pas copiés, puisque vous devez explicitement liste les fichiers que vous voulez copier. Par exemple, ce qui est le plus facile à lire et à comprendre?
ou sur Solaris:
ou avec gnutar:
Quelques notes ici: pour les grandes listes de fichiers, vous ne pouvez pas trouver dans d'inverser les devis, la commande de longueur de la ligne sera envahie; vous devez utiliser un fichier intermédiaire. Séparé de trouver et de goudron commandes sont intrinsèquement plus lent, car les mesures sont faites en série.
Considérer ce cas plus complexe où vous voulez un arbre complètement emballé, mais certains fichiers dans un tar, et les fichiers restants dans l'autre.
ou sous Solaris:
ou avec gnutar:
De nouveau, quelques remarques: recherche indépendante et de goudron commandes sont intrinsèquement plus lente. La création de plusieurs fichiers intermédiaires crée le désordre. gnutar se sent un peu plus propre, mais les options de ligne de commande sont fondamentalement incompatibles!
Si vous avez besoin de copier un grand nombre de fichiers d'un ordinateur à un autre en toute hâte à travers un réseau occupé, vous pouvez exécuter plusieurs cpio en parallèle. Par exemple:
Note qu'il serait utile si vous pouviez diviser l'entrée en morceaux de taille. J'ai créé un utilitaire appelé "npipe" de le faire. npipe serait de lire des lignes à partir de stdin, et de créer des N sortie de tuyaux et de nourrir les lignes à eux comme à chaque ligne a été consommé. De cette façon, si la première entrée est un fichier de grande taille qui a pris 10 minutes pour le transfert et le reste étaient des petits fichiers qui a pris 2 minutes pour le transfert, vous n'en aurez pas bloqué en attente pour le fichier de grande taille, plus qu'une douzaine de petits fichiers en file d'attente derrière elle. De cette façon, en fin de fractionnement à la demande, et non pas uniquement par le nombre de lignes ou d'octets dans la liste des fichiers. Une fonctionnalité similaire pourrait être accompli avec gnu-xargs' parallèle un fork de capacité, sauf que met arguments sur la ligne de commande au lieu de les diffusant sur stdin.
Comment est-ce plus rapide? Pourquoi ne pas utiliser NFS? Pourquoi ne pas utiliser rsync? NFS est par nature très lente, mais plus important encore, l'utilisation d'un seul outil est intrinsèquement à thread unique. rsync lit dans l'arbre source et écrit à la destination de l'arborescence d'un fichier à la fois. Si vous avez un multi-processeur de la machine (j'étais à l'époque à l'aide de 16cpu par machine), en parallèle de l'écriture est devenue très importante. J'ai accéléré la copie d'un 8GB de l'arbre vers le bas à 30 minutes; c'est de 4,6 MO/sec! Sûr que ça sonne lent depuis un réseau 100Mbit pouvez facilement le faire en 5-10 MO/s, mais c'est l'inode moment de la création qui le rend lent; il y avait facilement 500 000 fichiers dans cet arbre. Donc, si l'inode de la création est le goulot d'étranglement, puis j'avais besoin de paralléliser l'exécution de cette opération. Par comparaison, la copie des fichiers dans un seul thread façon serait de prendre 4 heures. C'est 8x plus rapide!
Une raison secondaire que cela a été plus rapide, c'est que parallèlement tcp tuyaux sont moins vulnérables à la perte d'un paquet ici et là. Si un tuyau pénètre dans l'impasse en raison d'un paquet perdu, les autres ne seront généralement pas affectée. Je ne suis pas vraiment sûr de savoir comment beaucoup cela fait une différence, mais très finement multi-threads noyaux, cela peut être encore plus efficace car la charge de travail peut être répartie sur tous ceux d'inactivité du processeur de
Dans mon expérience, cpio fait une meilleure job que le goudron, ainsi que d'être plus à l'argument portable (arguments ne changent pas entre les versions de cpio!), si elle ne peut pas être trouvé sur certains systèmes, il n'est pas installé par défaut sur RedHat), mais là encore Solaris ne vient pas avec gzip par défaut.