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 :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
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:
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.
Bueno, todas las versiones de tar (GNU o no) pueden usarse en una tubería. Simplemente use un signo menos ( -
) como nombre de archivo:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
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.
pax
: P