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
tar
ycpio
tienen un único propósito: concatenar muchos archivos separados en una sola secuencia. No comprimen datos. (En estos díastar
es más popular debido a su relativa simplicidad: puede tomar archivos de entrada como argumentos en lugar de tener que combinarlosfind
como locpio
ha hecho).En su caso, no necesita ninguna de estas herramientas; no tendrían ningún efecto útil, porque no tienes muchos archivos separados.
zfs send
Ya hice lo mismo quetar
hubiera 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
zfs
salida a través de un programa de compresión:(Si lo desea, puede sustituirlo
gzip
conxz
o conbzip2
cualquier otra herramienta de compresión de flujo).fuente
zfs send
ya hace lo mismo quetar
haría.Además de lo dicho anteriormente por Grawity y Paul :
Historia
En los "viejos tiempos", cpio (con la opción
-c
utilizada) 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
-c
formato 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
-z
que 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 -v
para 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-command
de 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
-j
invocar bzip2?tar -caf myfiles.tar.xz myfiles/
se comprimirá usandoxz
y estotar -caf myfiles.tar.gz myfiles/
se comprimirá usandogzip
.Pedí un soporte técnico de HP en ca. 1996 por qué usar
cpio
mástar
.Me dijeron que las cintas se estiran y desgastan. Cuando
tar
llega a una parte ilegible de la cinta, falla y devuelve el número de error. Cuandocpio
alcanza 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
cpio
comando 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
cpio
ytar
muy bien, me gustaría resaltar una decpio
las características llamadas modo de canalización que hace que sea más eficiente copiar archivos selectivos (es decir, a travésfind
y 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
tar
implicaría algo como esto:Por supuesto, hay otras alternativas como
rsync
ycp --parents
discutidas en otro hilo , pero nada se acerca a la flexibilidad que ofrece la combinación defind
ycpio
. Altar
ser omnipresente para crear archivos, esta es la única razón por la que todavía usocpio
.fuente