Tengo curiosidad y leí un poco, pero todavía tengo preguntas.
¿Qué hace a CPIO diferente de TAR? En otra pregunta me dijeron que tar es para juntar muchos archivos en 1 archivo que generalmente es gzip'd o bzip'd.
También me dijeron que TAR no puede comprimir desde STDOUT. Quiero archivar / comprimir instantáneas ZFS para copias de seguridad. Me preguntaba si podría combinar CPIO con bzip2 para obtener este efecto.
¿O tengo una idea completamente equivocada? ¿No es ese el propósito de CPIO?
Este es el tipo de comandos que he encontrado después de leer, por lo que Oracle documenta la copia de seguridad de las instantáneas de 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: PRespuestas:
Ambos
tarycpiotienen un único propósito: concatenar muchos archivos separados en una sola secuencia. No comprimen datos. (En estos díastares más popular debido a su relativa simplicidad: puede tomar archivos de entrada como argumentos en lugar de tener que combinarlosfindcomo locpioha hecho).En su caso, no necesita ninguna de estas herramientas; no tendrían ningún efecto útil, porque no tienes muchos archivos separados.
zfs sendYa hice lo mismo quetarhubiera hecho. Por lo tanto, no tiene ningún archivo, solo una secuencia sin nombre.Para comprimir la instantánea, todo lo que tiene que hacer es canalizar la
zfssalida a través de un programa de compresión:(Si lo desea, puede sustituirlo
gzipconxzo conbzip2cualquier otra herramienta de compresión de flujo).fuente
zfs sendya hace lo mismo quetarharía.Además de lo dicho anteriormente por Grawity y Paul :
Historia
En los "viejos tiempos", cpio (con la opción
-cutilizada) era la herramienta que se usaba para mover archivos a otros derivados de UNIX, ya que era más portátil y flexible que el tar . Pero los problemas de portabilidad del alquitrán pueden considerarse resueltos desde finales de los años ochenta.Desafortunadamente, fue en ese momento que diferentes proveedores destrozaron el
-cformato de cpio (solo mire la página del manual para GNU cpio y la opción-H). En ese momento, el alquitrán se volvió más portátil que cpio ... Pasaron casi una década completa hasta que los diferentes proveedores de UNIX lo resolvieron. Tener GNU tar y GNU cpio instalados era una necesidad para todos los administradores que tenían que lidiar con cintas de diferentes fuentes en ese entonces (incluso hoy en día supongo).Interfaz de usuario
tar puede usar un archivo de configuración de cinta donde el administrador configuraría las unidades de cinta conectadas al sistema. El usuario simplemente diría "Bueno, tomaré la unidad de cinta 1" en lugar de tener que recordar el nodo exacto del dispositivo para la cinta (que podría ser muy confuso y tampoco está estandarizado en diferentes plataformas UNIX).
Pero la principal diferencia es:
tar es capaz de buscar directorios por sí mismo y toma la lista de archivos o directorios de los argumentos de la línea de comandos.
cpio archiva solo los archivos o directorios que se le indican, pero no busca subdirectorios recursivamente por sí mismo. También cpio obtiene la lista de elementos para archivar desde stdin ; es por eso que casi siempre se usa en combinación con find .
Un comando cpio a menudo parece aterrador para el principiante en comparación con tar :
Creo que esa es la razón principal por la que la mayoría de las personas usan tar para crear archivos de almacenamiento: para tareas simples como agrupar un directorio completo es más fácil de usar.
Además, GNU tar ofrece la opción
-zque hace que el archivo se comprima con GNU zip sobre la marcha, lo que facilita aún más las cosas.Por otro lado, uno puede hacer cosas ingeniosas con find & cpio . De hecho, es un enfoque más parecido a UNIX: ¿Por qué incluir la búsqueda de árbol de directorios en cpio si ya hay una herramienta que se encarga de casi todo lo que uno puede pensar: encontrar . Lo que viene a la mente es solo hacer una copia de seguridad de los archivos más nuevos que una fecha determinada, restringir los archivos a los que residen en el mismo sistema de archivos o filtrar el resultado de búsqueda
grep -vpara excluir ciertos archivos ...La gente de GNU tar pasó mucho trabajo para incluir muchas de esas cosas que antes solo eran posibles con cpio . De hecho, ambas herramientas aprendieron unas de otras, pero solo cpio puede leer el formato de tar , no al revés.
procesamiento de alquitrán y salida
Una última nota a algo que dijiste:
Bueno, todas las versiones de tar (GNU o no) pueden usarse en una tubería. Simplemente use un signo menos (
-) como nombre de archivo:Además, GNU tar ofrece la opción
--to-commandde especificar un comando de postprocesador, aunque todavía prefiero la tubería. Tal vez sea útil al escribir en ciertos dispositivos de hardware.fuente
cp), mover (mv)diff, etc. )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar. usted ha dicho:only cpio may read the format of tar. ¿No es eso una contradicción?tar y cpio tienen esencialmente la misma función, que es crear un solo archivo contiguo a partir de una entrada de múltiples archivos y directorios. Originalmente, esto era para poner el resultado en una cinta, pero en estos días generalmente se usa para alimentar una utilidad de compresión como lo hizo anteriormente. Esto se debe a que comprimir un solo archivo grande es más eficiente en tiempo y espacio que comprimir muchos archivos pequeños. Debe tener en cuenta que muchos formatos de imagen (png, jpg, etc.) ya están muy comprimidos y, de hecho, pueden ser un poco más grandes si se utilizan una utilidad de compresión.
Ni tar ni cpio hacen ninguna compresión por sí mismos. Tar efectivamente ha "ganado" la guerra de "lo que usaremos para hacer archivos agregados", pero cpio lo mira en varios lugares. No conozco ningún beneficio de uno sobre el otro, el alquitrán gana por ser más comúnmente utilizado.
De hecho, tar puede tomar la entrada en stdin y la salida en stdout, que luego se canalizaría a bzip2 como usted o algo similar. Si se llama con la opción "z", invocará automáticamente gzip en la salida.
fuente
-jinvocar bzip2?tar -caf myfiles.tar.xz myfiles/se comprimirá usandoxzy estotar -caf myfiles.tar.gz myfiles/se comprimirá usandogzip.Pedí un soporte técnico de HP en ca. 1996 por qué usar
cpiomástar.Me dijeron que las cintas se estiran y desgastan. Cuando
tarllega a una parte ilegible de la cinta, falla y devuelve el número de error. Cuandocpioalcanza una porción ilegible, continúa al siguiente bloque legible, se resincroniza y continúa.Nunca he visto documentación que respalde esto, pero siempre la he usado
cpio.fuente
También vale la pena señalar: en (al menos) FreeBSD y Mac OS X, puede manipular archivos cpio con tar. BSD tar utiliza libarchive debajo del capó, por lo que puede manejar cpio, pax, shar ...
Esto significa que los problemas de usabilidad del
cpiocomando no tienen que impedir que interactúe con archivos cpio.fuente
only cpio may read the format of tar. usted ha dicho:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar. ¿No es eso una contradicción?Si bien las respuestas aquí ya se comparan
cpioytarmuy bien, me gustaría resaltar una decpiolas características llamadas modo de canalización que hace que sea más eficiente copiar archivos selectivos (es decir, a travésfindy filtrar) al tiempo que conserva su estructura de directorios. Esta característica está bien documentada y en su premisa básica se ve así:El equivalente con
tarimplicaría algo como esto:Por supuesto, hay otras alternativas como
rsyncycp --parentsdiscutidas en otro hilo , pero nada se acerca a la flexibilidad que ofrece la combinación defindycpio. Altarser omnipresente para crear archivos, esta es la única razón por la que todavía usocpio.fuente