¿Cuál es la ventaja de usar 'tar' hoy?

209

Sé que tarse hizo para archivos de cinta en el pasado, pero hoy tenemos formatos de archivo que agregan archivos y realizan compresión dentro del mismo formato de archivo lógico.

Preguntas:

  • ¿Existe una penalización de rendimiento durante las etapas de agregación / compresión / descompresión por usar tarencapsulado en gzipo bzip2, en comparación con el uso de un formato de archivo que agrega y comprime en la misma estructura de datos? Suponga que el tiempo de ejecución del compresor que se está comparando es idéntico (por ejemplo, gzip y Deflate son similares).

  • ¿Hay características del tarformato de archivo que otros formatos de archivo, como .7zy .zipno tienen?

  • Dado que tares un formato de archivo tan antiguo y existen formatos de archivo más nuevos hoy en día, ¿por qué tar(ya sea encapsulado gzip, bzip2o incluso el nuevo xz) todavía tan ampliamente utilizado hoy en GNU / Linux, Android, BSD y otros sistemas operativos UNIX similares para archivos? transferencias, fuente de programas y descargas binarias, y algunas veces incluso como formato de administrador de paquetes?

MarcusJ
fuente
33
No estoy de acuerdo con que "pierda el tiempo". Si se refiere al rendimiento, no hay penalización de rendimiento real para el alquitrán ya que el formato es muy eficiente. Si quiere decir que desperdicia su tiempo, no veo cómo tar xvzfes más difícil que 7z -x...
allquixotic
41
Parece estar lamentando el hecho de que tar no almacena un catálogo al principio, por lo que las herramientas de compresión gui que desean enumerar los contenidos antes de extraer tienen que descomprimir todo el alquitrán solo para enumerar los contenidos, luego lo descomprimen nuevamente al extraer .
psusi
10
@ MarcusJ: ¿crees que 7z de alguna manera sabe mágicamente dónde comienza cada archivo en un archivo? Además, los algoritmos de compresión habituales (gzip, bzip2) funcionan con la transmisión del contenido: no es necesario completar al 100% la primera etapa antes de la siguiente.
unperson325680
11
Además, @MarcusJ parece confundir dos cosas diferentes: cuando lo hace tar xvzf, ¡los datos sin comprimir no se escriben en el disco duro en .tarformato! Tienes razón en que si corriste gunzip blah.tar.gzy luego tar xf blah.tar, escribiría los datos en el disco dos veces (una vez como .tar y otra vez como archivos en el sistema de archivos), pero en realidad nadie lo hace de esa manera. Los tar xzfusos de una tubería UNIX (básicamente una copia de la memoria) para transferir los datos sin comprimir desde gzip(o lo que sea compresor) a tar, por lo que los datos se no se escribe en el disco en .tarformato.
allquixotic
14
Una cosa que sé es que tar(especialmente comprimido) se comporta terriblemente cuando se trata de corrupción de datos. Pequeños datos de redundancia / recuperación agregados por formatos modernos valen oro
PPC

Respuestas:

178

Parte 1: rendimiento

Aquí hay una comparación de dos flujos de trabajo separados y lo que hacen.

Tiene un archivo en el disco blah.tar.gzque es, digamos, 1 GB de datos comprimidos con gzip que, cuando no está comprimido, ocupa 2 GB (por lo tanto, una relación de compresión del 50%).

La forma en que crearía esto, si hiciera el archivo y la compresión por separado, sería:

tar cf blah.tar files ...

Esto daría como resultado blah.taruna mera agregación de la files ...forma no comprimida.

Entonces harías

gzip blah.tar

Esto leería el contenido del blah.tardisco, lo comprimiría a través del algoritmo de compresión gzip, escribiría el contenido y blah.tar.gzluego desvincularía (eliminaría) el archivo blah.tar.

¡Ahora, descomprimamos!

Camino 1

Tienes blah.tar.gz, de una forma u otra.

Decides correr:

gunzip blah.tar.gz

Esta voluntad

  • LEA el contenido de datos comprimidos de 1 GB de blah.tar.gz.
  • PROCESE los datos comprimidos a través del gzipdescompresor en la memoria.
  • A medida que el búfer de memoria se llena con "un bloque" de datos, ESCRIBA los datos sin comprimir en el archivo blah.taren el disco y repita hasta que se lean todos los datos comprimidos.
  • Desvincular (eliminar) el archivo blah.tar.gz.

Ahora, tiene blah.taren el disco, que está descomprimido pero contiene uno o más archivos dentro, con una carga de estructura de datos muy baja. El tamaño del archivo es probablemente un par de bytes mayor que la suma de todos los datos del archivo.

Tu corres:

tar xvf blah.tar

Esta voluntad

  • LEA los 2 GB de contenido de datos sin comprimir blah.tary las tarestructuras de datos del formato de archivo, incluida la información sobre permisos de archivos, nombres de archivos, directorios, etc.
  • ESCRIBA los 2 GB de datos más los metadatos en el disco. Esto implica: traducir la estructura de datos / información de metadatos para crear nuevos archivos y directorios en el disco según corresponda, o reescribir archivos y directorios existentes con nuevos contenidos de datos.

El total de datos que LEIMOS del disco en este proceso fue de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.

El total de datos que escribimos en el disco en este proceso fue de 2 GB (para gunzip) + 2 GB (para tar) + unos pocos bytes para metadatos = aproximadamente 4 GB.

Camino 2

Tienes blah.tar.gz, de una forma u otra.

Decides correr:

tar xvzf blah.tar.gz

Esta voluntad

  • LEA el contenido de datos comprimidos de 1 GB de blah.tar.gzun bloque a la vez en la memoria.
  • PROCESE los datos comprimidos a través del gzipdescompresor en la memoria.
  • A medida que el búfer de memoria se llena, canalizará esos datos, en la memoria, al taranalizador de formato de archivo, que leerá la información sobre metadatos, etc. y los datos del archivo sin comprimir.
  • A medida que el búfer de memoria se llena en el taranalizador de archivos, ESCRIBIRÁ los datos sin comprimir en el disco, creando archivos y directorios y llenándolos con el contenido sin comprimir.

El total de datos que LEIMOS del disco en este proceso fue de 1 GB de datos comprimidos, punto.

El total de datos que escribimos en el disco en este proceso fue de 2 GB de datos sin comprimir + unos pocos bytes para metadatos = aproximadamente 2 GB.

Si observa, la cantidad de E / S de disco en Way 2 es idéntica a la E / S de disco realizada, por ejemplo, por los programas Zipo 7-Zip , ajustando las diferencias en la relación de compresión.

Y si le preocupa la relación de compresión, use el Xzcompresor para encapsular tar, y tiene el archivo TAR LZMA2 , que es tan eficiente como el algoritmo más avanzado disponible para 7-Zip :-)

Parte 2: características

tar almacena los permisos de Unix dentro de sus metadatos de archivo, y es muy conocido y probado para empaquetar con éxito un directorio con todo tipo de permisos diferentes, enlaces simbólicos, etc. Hay más de unas pocas instancias en las que uno podría necesitar guardar un montón de archivos en un solo archivo o secuencia, pero no necesariamente comprimirlo (aunque la compresión es útil y de uso frecuente).

Parte 3: compatibilidad

Muchas herramientas se distribuyen en formato fuente o binario como .tar.gz o .tar.bz2, porque es un formato de archivo de "mínimo común denominador": al igual que la mayoría de los usuarios de Windows tienen acceso a descompresores .zip o .rar, la mayoría de las instalaciones de Linux , incluso los más básicos, tendrán acceso al menos a alquitrán y pistolas, sin importar la antigüedad o reducción. Incluso los firmwares de Android tienen acceso a estas herramientas.

Los nuevos proyectos dirigidos a audiencias que ejecutan distribuciones modernas pueden muy bien distribuir en un formato más moderno, como .tar.xz (usando el formato de compresión Xz (LZMA), que se comprime mejor que gzip o bzip2), o .7z, que es similar a los formatos de archivo ZIP o RAR en que ambos comprimen y especifican un diseño para encapsular múltiples archivos en un solo archivo.

No ves que .7z se usa con más frecuencia por la misma razón por la que la música no se vende en tiendas de descargas en línea en formatos nuevos como Opus o video en WebM . Compatibilidad con personas que ejecutan sistemas antiguos o muy básicos.

allquixotic
fuente
Felicitaciones por una gran respuesta con todo el contenido separado bajo tres encabezados distintos.
JFW
2
"Parte 3: Compatibilidad" parece haber sido copiada de la respuesta de @ Kruug.
titaniumdecoy
23
@titaniumdecoy ¿Has notado que fue allquixotic quien originalmente escribió esa parte y la editó en la respuesta de Kruug?
slhck
2
Gracias por señalar eso, no me di cuenta. Sin embargo, me parece un poco tonto tener un bloque de texto idéntico en dos respuestas diferentes en esta página.
titaniumdecoy
1
Esto responde por qué tarencaja en el ecosistema de archivo (es decir, para agregar archivos juntos, proporcionando un aumento del rendimiento y algunos otros beneficios, como el ahorro de permisos), pero no aborda por qué darno se utilizan alternativas modernas como las existentes. En otras palabras, esta respuesta justifica el uso de agregadores de archivos, pero no del tarsoftware en sí mismo.
Gaborous
101

Esto ha sido respondido en Stack Overflow .

bzip y gzip funcionan en archivos únicos, no en grupos de archivos. El zip simple y antiguo (y pkzip) funcionan en grupos de archivos y tienen el concepto del archivo incorporado.

La filosofía * nix es una de las pequeñas herramientas que realizan trabajos específicos muy bien y pueden encadenarse juntas. Es por eso que hay dos herramientas aquí que tienen tareas específicas, y están diseñadas para encajar bien juntas. También significa que puede usar tar para agrupar archivos y luego puede elegir una herramienta de compresión (bzip, gzip, etc.).

Muchas herramientas se distribuyen en formato fuente o binario como .tar.gz o .tar.bz2, porque es un formato de archivo de "mínimo común denominador": al igual que la mayoría de los usuarios de Windows tienen acceso a descompresores .zip o .rar, la mayoría de las instalaciones de Linux , incluso los más básicos, tendrán acceso al menos tary gunzip, sin importar la antigüedad o reducción. Incluso los firmwares de Android tienen acceso a estas herramientas.

Los nuevos proyectos dirigidos a audiencias que ejecutan distribuciones modernas pueden distribuir muy bien en un formato más moderno, como .tar.xz(usando el formato de compresión Xz ( LZMA ), que se comprime mejor que gzip o bzip2), o .7z, que es similar al ZIP o RAR formatos de archivo en que comprime y especifica un diseño para encapsular múltiples archivos en un solo archivo.

No ves que .7z se usa con más frecuencia por la misma razón por la que la música no se vende en tiendas de descargas en línea en formatos nuevos como Opus o video en WebM . La compatibilidad con personas que ejecutan sistemas antiguos o muy básicos es importante.

Kruug
fuente
77
Hola @Kruug, edité tu publicación solo para dar una perspectiva práctica de por qué las personas aún eligen usar estos formatos cuando tienen la opción de usar otra cosa. No cambié el texto que ya tenías. Esto es solo para asegurar que lo que parece ser la respuesta canónica a esta pregunta tendrá una imagen completa. Siéntase libre de editar mi edición si lo desea :)
allquixotic
55
@allquixotic inicio alguien? Edite la edición y edite para poder editar una edición ...
SnakeDoc
21
Esta respuesta es definitivamente un caso de "A veces me sorprenden los votos no merecidos". ¡No aborda el tema central de la pregunta que consiste en enumerar el contenido de alquitrán comprimido y ni siquiera es una respuesta original!
Ярослав Рахматуллин
55
-1 por gran justicia. Esto debería haber sido un comentario.
wim
66
No compro el legado / argumento de mínimo común denominador; Recuerdo que en los sistemas nuevos (sun) con frecuencia tenía que descargar gzip / gunzip (de sunfreeware) solo para instalar otro software empaquetado tar.gz (más gnu tar, ya que el alquitrán de sun era malo). Para el legado / mínimo común denominador, tenía tar.Z(comprimir / descomprimir). La progresión de las utilidades ha sido un flujo constante (sin juego de palabras) de cambio y mejora: Z => zip => gz => bz2 => 7z => xz (o el orden que prefiera). En cuanto al rol de tar, algunas utilidades solo descomprimen / y solo requieren tar para agrupar las jerarquías de archivos.
michael
63

Tar tiene un amplio conjunto de operaciones y modificadores que saben todo sobre los sistemas de archivos Unix. Conoce los permisos de Unix, los diferentes tiempos asociados con los archivos, los enlaces duros, los enlaces blandos (y la posibilidad de que los enlaces simbólicos puedan introducir ciclos en el gráfico del sistema de archivos) y le permiten especificar varias formas diferentes de administrar todos estos datos. .

  • ¿Desea que los datos extraídos conserven los tiempos de acceso a los archivos? Tar puede hacer eso. Para preservar los permisos? Tar puede hacer eso.

  • ¿Desea conservar los enlaces simbólicos como enlaces simbólicos? Tar lo hace por defecto. ¿Quieres copiar el objetivo en su lugar? Tar puede hacer eso.

  • ¿Desea estar seguro de que los datos enlazados solo se almacenan una vez (es decir, hacer lo correcto)? Tar hace eso.

  • ¿Desea manejar bien los archivos dispersos? Tar puede hacer eso.

  • ¿Quieres datos sin comprimir (¿por qué?)? Tar puede hacer eso. Para comprimir con gzip? Tar puede hacer eso. Con bzip2? Tar puede hacer eso. ¿Con programas arbitrarios de compresión externa? Tar puede hacer eso.

  • ¿Desea escribir o recuperar a / desde un dispositivo sin formato? El formato de Tar lo maneja bien.

  • ¿Desea agregar archivos a un archivo existente? Tar puede hacer eso. ¿Para diferenciar dos archivos para ver qué cambió? Tar puede hacer eso. ¿Para actualizar solo aquellas partes del archivo que han cambiado? Tar puede hacer eso.

  • ¿Desea asegurarse de no archivar en más de un sistema de archivos? Tar puede hacer eso.

  • ¿Desea capturar solo archivos que son más nuevos que su última copia de seguridad? Tar puede hacer eso.

  • ¿Desea conservar los nombres o números de usuarios y grupos? Tar puede hacer cualquiera de los dos.

  • ¿Necesita preservar los nodos del dispositivo (como los archivos /dev) para que después de la extracción, el sistema se ejecute correctamente? Tar puede hacer eso.

Tar ha evolucionado para manejar muchos casos de uso durante décadas y realmente sabe mucho sobre las cosas que la gente quiere hacer con los sistemas de archivos Unix.

dmckee
fuente
12
No necesita GNU tar para usar un compresor arbitrario: solo dígale a tar que escriba el archivo para stdout f -y lo canalice al compresor.
Ilmari Karonen
3
"¿Quieres datos sin comprimir (¿por qué?)?" Utilizo tarmuy a menudo para copiar un árbol del sistema de archivos de un lugar a otro y preservar los permisos, etc., y la compresión en este caso solo requiere ciclos de CPU adicionales. Por ej tar cf - * | tar xf - -C /somewhere.
Steve
1
Además, desearía un archivo .tar cuando el sistema de archivos de destino realiza la desduplicación. La creación de archivos comprimidos en un sistema de archivos que realiza la desduplicación reducirá sustancialmente la relación de deduplicación. Ejemplo: una vez eliminamos un archivo tar.gz de $ 10,000.00; es decir, ocupaba $ 10k en espacio de almacenamiento porque alguien usaba compresión.
Aaron
Los ciclos de CPU @Steve pueden ser más baratos que el disco IO para algoritmos como LZ4 o LZO. Es por eso que estamos acostumbrados en zram, y los sistemas de archivos de compresión transparentes como NTFS, ZFS, Btrfs ... así que a veces es realmente más rápido que a comprimir ya que la cantidad de S de disco se reduce en gran medida
phuclv
30

Confunde los dos procesos distintos de archivo y compresión .

Razones para usar un archivador

Una razón para usar el archivado sin compresión es, por ejemplo, si un grupo de archivos se copia de un host a otro. Un comando como el siguiente

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

puede acelerar las cosas considerablemente. Si sé que los archivos no se pueden comprimir o si SSH está configurado con compresión, puede ahorrar un tiempo considerable de CPU. Claro, uno puede usar una herramienta de compresión más moderna con una función de archivo y desactivar la compresión. La ventaja tares que puedo esperar que esté disponible en todos los sistemas.

Razones para usar un archivador con compresión gzip

Una de las razones que utilizo tarcon gzipes: la velocidad! Si quiero transferir algunos GiB de archivos de texto de un lugar a otro, no me importa exprimir los últimos bytes, ya que la compresión solo se usa para el tránsito, no para el almacenamiento a largo plazo. En los casos que uso gzip, lo que no maximiza la CPU (en contraste con 7-Zip , por ejemplo), lo que significa que estoy obligado a E / S nuevamente y no a la CPU. Y de nuevo: gzippuede considerarse disponible en todas partes.

Razones para utilizar tara favor de scp, rsync, etc.

Es mejor scpque tenga muchos archivos pequeños para copiar (por ejemplo, un directorio de correo con cientos de miles de archivos). rsyncPor increíble que sea, es posible que no esté disponible en todas partes. Además, rsyncsolo vale la pena si parte de los archivos, o una versión anterior, ya está presente en el destino. Para la copia inicial tares la más rápida, con compresión o sin ella, dependiendo de los datos reales.

Marco
fuente
1
Pero si vas a archivar, ¿por qué no comprimir también? De acuerdo, sí, puede ahorrar tiempo para archivos que no se comprimen fácilmente, pero los archivadores probablemente deberían saber que la música, por ejemplo, no es muy comprimible, excepto los encabezados.
MarcusJ
2
Es posible que no lo necesite o que su contenido no sea comprimible.
Hasturkun
44
Por razones de rendimiento, a menudo es más fácil usar la agregación de archivos sin comprimir al enviar datos a través de enlaces de red de ancho de banda muy alto que exceden la velocidad a la que el compresor puede comprimir datos. Esto se puede lograr, por ejemplo, con Gigabit Ethernet; solo unos pocos algoritmos de compresión bien diseñados, que también tienen una relación de compresión muy pobre, pueden comprimir datos tan rápido incluso en una gran CPU de escritorio. En un dispositivo integrado, tiene incluso menos tiempo de CPU para trabajar.
allquixotic
3
esto no solo acelera las cosas, sino que también permite preservar la propiedad del archivo, las marcas de tiempo y los atributos (si los privilegios del usuario lo permiten)
Andre Holzner
3
@AndreHolzner Derecha. A menudo lo hago tar cf - . | (cd ~/somewhere; tar xvf -). Es realmente útil no tener que esperar hasta que se escriba el índice central (como, por ejemplo, en un archivo zip).
user239558
24

Agregando a las otras buenas respuestas aquí, prefiero la combinación tar+ gzip|bzip2|xzprincipalmente porque estos archivos comprimidos son como secuencias, y puede canalizarlos fácilmente.

Necesito descomprimir un archivo disponible en internet. Ya sea con zipo rarformatos Tengo que descargar primero y luego descomprimirlo. Con tar.{gz,bz2,xz}puedo descargar y descomprimir en el mismo paso, sin necesidad de tener el archivo comprimido físicamente en el disco:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Esto dejará solo los archivos sin comprimir en mi disco y acelerará todo el proceso, porque no estoy perdiendo el tiempo descargando primero el archivo completo y después de que finalice la descarga, lo descomprimo. En cambio, lo estoy descomprimiendo mientras se está descargando. No puede hacer esto con zipo rararchivos.

Carlos Campderrós
fuente
2
No sé acerca de rar (es un programa terrible que solo parece haberse popularizado entre los piratas debido a su capacidad de dividirse en múltiples archivos más pequeños), pero puedes transmitir zip muy bien. La página del manual incluso lo menciona. También tiene la ventaja de poder extraer o actualizar archivos del medio de un archivo grande de manera eficiente, aunque el alquitrán tiende a obtener una compresión ligeramente mejor. La compresión frente al acceso aleatorio es una compensación.
psusi
3
@psusi incorrecto. Puede hacer hacks como este , pero lo que hace es descargar todo el archivo en la memoria y luego descomprimirlo, en lugar de descomprimirlo mientras lo descarga. Y funzipsolo extrae el primer archivo en el archivo zip, no todos.
Carlos Campderrós
2
@Stu solo para aclarar, no es un problema, solo está optimizando tu tiempo (no me importa el espacio si eso es lo que pensabas)
Carlos Campderrós
1
Ambas partes funcionan: puede alquitránar en un lado y deshacer en el otro también:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Carlos Campderrós
1
@psusi como recuerdo de los viejos tiempos cuando usaba pkzip para almacenar archivos en múltiples disquetes, comprime el catálogo de la tienda al final del archivo. Siempre solicita el último disquete para iniciar la extracción o mostrar el catálogo. Entonces en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg
Mikhail Moskalev
13

Hay varias razones para quedarse con Tar (GNU).

Está:

  • Licencia GPL
  • bueno en el sentido de la filosofía de Unix
    • herramienta de un solo propósito, capaz de realizar varias tareas
  • bien documentado y tiene muchas características confiables
  • compatible con varios algoritmos de compresión
  • fácil de usar y las personas han desarrollado hábitos con él
  • ampliamente disponible
  • Me siento cálido y borroso por dentro cuando uso el software iniciado por RMS (excluyendo Emacs )

Si su carne de res en particular es tener que "descomprimir" un tarball antes de poder leer el contenido, entonces probablemente tenga razón. WinRAR y 7-Zip lo hacen automáticamente. Sin embargo, existen soluciones simples a este problema, como documentar el contenido de un archivo sin comprimir.

Ярослав Рахматуллин
fuente
1
Es software libre, por lo que son muchos. Es bueno en lo que hace. Difícilmente comparado con otras cosas. Está bien documentado y tiene muchas características. Las características apenas se usan y son detestablemente fáciles de usar. Es compatible con varios algoritmos de compresión - No tantos como algunos otros
Griffin
44
los dioses de Unix lo crearon, ¡por lo tanto, debemos usarlo!
SnakeDoc
28
Tar también almacena los permisos de UNIX de forma nativa, y es muy conocido y probado. Hay más de unos pocos casos en los que uno podría necesitar agrupar un montón de archivos en un solo archivo o transmisión, pero no necesariamente comprimirlo.
LawrenceC
3
Afortunadamente, el alquitrán no se limita solo a las versiones de GNU. Si bien GNU tar es ciertamente una buena pieza de software, los front-end relacionados con libarchive + son mucho más rápidos y fáciles de integrar en otros proyectos de software. Puede argumentar a favor del alquitrán sin convertirlo en una pelea de licencias.
Lucas Holt
1
No soy sarcástica. Me gusta RMS y la forma en que lleva a cabo sus creencias.
Ярослав Рахматуллин
11

Los formatos de archivo como .zip requieren que el software lea primero el final del archivo, para leer un catálogo de nombres de archivo. Por el contrario, tar almacena esa información en la secuencia comprimida.

La ventaja de la forma de alquitrán es que puede descomprimir datos mientras los lee desde una tubería no buscable, como un socket de red.

La ventaja de la forma zip es que, para un archivo estático en el disco, puede examinar el contenido y los metadatos sin descomprimir primero todo el archivo.

Ambos tienen sus usos, dependiendo de lo que estés haciendo.

xorsyst
fuente
55
No, puede leer y escribir archivos zip como una secuencia desde y hacia una tubería.
Mark Adler
Eso puede ser específico de la implementación, entonces ciertamente no es compatible con el pkzip original.
xorsyst
1
Sí, el software debe escribirse para admitirlo. El formato zip lo admite completamente, con descriptores de datos que pueden seguir los datos comprimidos con las longitudes y CRC.
Mark Adler
@ MarkAdler, ¿qué software? Infozip no admite la descompresión de una tubería.
psusi
11

Parece haber cierta renuencia a responder todas sus preguntas directamente, con una aparente preferencia por usar su pregunta como punto de partida para la pontificación. Así que lo intentaré.

¿Existe una penalización de rendimiento durante las etapas de agregación / compresión / descompresión por usar alquitrán encapsulado en gzip o bzip2, en comparación con el uso de un formato de archivo que agrega y comprime en la misma estructura de datos? Suponga que el tiempo de ejecución del compresor que se compara es idéntico (por ejemplo, gzip y Deflate son similares).

No. De hecho, dado que tar y gzip suelen ser dos procesos, incluso obtienes un pequeño beneficio de velocidad de varios núcleos que un archivador como el zip de Info-ZIP no proporciona. En términos de relación de compresión, tar + gzip generalmente funcionará notablemente mejor que zip con deflate ya que el primero puede beneficiarse de la correlación entre archivos, mientras que el segundo comprime los archivos por separado. Ese beneficio de compresión se traduce en un beneficio de velocidad al extraer, ya que un archivo más comprimido se descomprime en menos tiempo.

¿Existen características del formato de archivo tar que otros formatos de archivo, como .7z y .zip, no tienen?

Sí, tar se diseñó para Unix, y ha evolucionado a lo largo de los años para poder grabar y restaurar exactamente cada pequeño rincón y grieta de los sistemas de archivos Unix, incluso el sistema de archivos Mac OS X Unix más ruidoso y crannier. zip puede retener gran parte de los metadatos, como permisos, tiempos, propietarios, grupos y enlaces simbólicos, pero aún no todo. Como ejemplo, ni zip ni 7z pueden reconocer o aprovechar archivos dispersos, ni son conscientes de o pueden restaurar enlaces duros.

Dado que tar es un formato de archivo tan antiguo y existen formatos de archivo más nuevos hoy en día, ¿por qué el tar (ya sea encapsulado en gzip, bzip2 o incluso el nuevo xz) todavía se usa tan ampliamente en GNU / Linux, Android, BSD y otros UNIX? sistemas operativos, para transferencias de archivos, fuente de programas y descargas binarias, y algunas veces incluso como un formato de administrador de paquetes?

Muchas otras buenas respuestas aquí para eso. Lo mejor es que simplemente funciona , y puede seguir actualizándolo a mejores formatos de compresión (por ejemplo, xz) y seguir utilizando el mismo formato de tar e incluso la misma utilidad de tar compilada. Si solo desea empacar un montón de cosas y luego desempaquetar todo en el otro extremo, entonces hay pocas razones para usar cualquier cosa que no sea uno de los programas de software más antiguos, más completos y más depurados.

Si desea acceso aleatorio, actualizaciones parciales u otras cosas que necesitan lidiar con el contenido por partes, o si desea poder descubrir qué hay en él sin leer todo, entonces querrá usar un formato diferente.

Mark Adler
fuente
CW significa Community Wiki . Consulte también ¿Qué son las publicaciones de "Wiki de la comunidad"? .
ctype.h
Supongo que es CW porque la pregunta tiene más de 15 respuestas. Cuando publicó esta respuesta, porque es el 15, la pregunta y todas las respuestas se marcaron CW.
ctype.h
No veo cómo esta respuesta dice algo que ninguna de las otras respuestas hace, aparte de citar directamente las preguntas (que escribí, por cierto, porque la revisión original de la pregunta fue lo suficientemente horrible como para cerrarse como NARQ). Buen intento sin embargo.
allquixotic
Um, ok Lo que quieras pensar está bien. Su respuesta ni ninguna otra respuesta parece abordar si hay una penalización de rendimiento. Su respuesta no aborda la notable diferencia de compresión, aunque otros sí. Como la suya no aborda el rendimiento (su sección de rendimiento trata sobre el flujo de trabajo, nada sobre el rendimiento), ninguna otra respuesta responde a todo en un solo lugar. Es interesante que haya escrito la pregunta de penalización de rendimiento, ¡pero no la respondió! Imagínate.
Mark Adler
Por cierto, su discusión sobre el flujo de trabajo es sobre algo que nadie hace, que es escribir un archivo tar en un disco y luego comprimirlo. tar siempre se usa llamando al programa de compresión directamente o directamente a una tubería a un programa de compresión.
Mark Adler
11

Actuación

La gran diferencia es el orden en que se realizan la compresión y el archivado. tarArchivos, luego, opcionalmente, puede enviar el archivo a un compresor, y zipacumula el archivo y comprime los datos del archivo en fragmentos de 32 KB a medida que se inserta en el archivo. Al dividir los datos del archivo en pequeños trozos y comprimirlos por separado, le permite extraer archivos específicos o partes de archivos sin tener que descomprimir todo en el archivo anterior. También evita que el compresor cree un diccionario muy grande antes de reiniciarlo. Esto significa que la compresión irá más rápido, pero no dará una relación tan buena como comprimir todo con un tamaño de diccionario más grande.

Puede visualizarlo pensando en dos archivos, donde los primeros 500 bytes del segundo archivo son los mismos que los últimos 500 bytes del primer archivo. Con el zipmétodo, el compresor se reinicia para el segundo archivo, por lo que no recuerda que el primer archivo terminó con los mismos datos, por lo que no puede eliminar los datos duplicados del segundo archivo.

Popularidad

Hay muchos otros formatos que tienen varias ventajas tar. 7-Zip no almacena los permisos de archivos de Unix, pero darsí, y zippuede, y los tres almacenan un índice, que permite una exploración rápida, extracción de un subconjunto de archivos y actualización de archivos dentro del archivo. También pueden usar CPU de varios núcleos para la compresión.

La razón por la que todos todavía usan tares la misma razón por la que todos usan Windows y Flash : a la gente no le gusta el cambio. Sin una razón sólida para cambiar, las personas simplemente se adhieren a lo que saben. darno proporciona un beneficio suficiente para justificar la publicación de archivos en el formato cuando la mayoría de las personas ya lo han tarinstalado, y muy pocos lo saben dar, por lo que la simple inercia nos mantiene en el antiguo estándar.

psusi
fuente
2
zip puede almacenar y restaurar los permisos de Unix. Las utilidades zip y descomprimir de InfoZIP normalmente distribuidas con el sistema Unix hacen esto.
Mark Adler
3
zip no comprime el archivo en trozos de 32K. Está confundiendo el tamaño de la ventana deslizante de 32K con la forma en que se realiza la compresión.
Mark Adler
1
gzip -9 no tiene un diccionario de 900 kB. Todos los niveles de gzip usan un diccionario de 32K. Quizás estés pensando en bzip2.
Mark Adler
Tanta desinformación en una respuesta.
Mark Adler
1
Debe corregir su respuesta o eliminarla.
Mark Adler
7

Tar fue creado para hacer copias de seguridad de su sistema de archivos de fidelidad completa, no solo para transferir archivos. Como tal, la utilidad tar es la utilidad más completa para crear un archivo que conserva todo lo importante sobre la estructura de su sistema de archivos.

Esto incluye todas estas características que faltan en una o más herramientas de la competencia:

  • propiedad del archivo
  • permisos de archivo
  • permisos de archivo menos comunes (por ejemplo, setuid, bit fijo)
  • enlaces simbólicos
  • enlaces duros
  • entradas de dispositivo (es decir, dispositivos de caracteres y bloques)
  • archivos escasos
  • Entradas de ACL ( no compatibles con todas las versiones )
  • atributos extendidos / de usuario ( no es compatible con todas las versiones )
  • Etiquetas de SElinux ( no compatibles con todas las versiones )

También tiene la --one-file-systemopción que es extraordinariamente útil al hacer copias de seguridad.

Cada vez que se agrega una nueva característica a los sistemas de archivos, tarprimero se agrega soporte (o incluso exclusivamente). Por lo tanto, sigue siendo la forma más compatible de guardar archivos.

tylerl
fuente
Esta respuesta es la única que tiene sentido. Gracias por publicarlo.
Gaborous
5

Hoy en día tenemos muchos archivos comprimidos, MP3, JPG, videos, archivos tar.gz, paquetes JAR, RPM, DEB, etc. Si necesita agrupar un montón de estos en un solo archivo para transferir, entonces es útil tener una utilidad 'tar' que solo agrupa los archivos sin intentar comprimirlos.

No solo desperdicia tiempo y electricidad intentar comprimir un archivo comprimido, sino que a menudo resulta en un archivo que es más grande que el original.

Otro uso es mejorar las tasas de compresión. Por ejemplo, si 'alquila' un paquete de archivos de registro y luego comprime el resultado, es probable que obtenga un archivo más pequeño que si lo comprimiera primero, luego empaquetado con 'tar'. Y, por supuesto, utilizando tar, puede elegir el algoritmo de compresión que desee y especificar opciones para optimizar la compresión para su caso de uso particular.

Encuentro que tar 'es muy relevante hoy y prefiero que use ZIP. En nuestra oficina, todas las personas con Windows tienen instalado 7-zip, por lo que, para nosotros, los archivos tar son totalmente compatibles con todas las plataformas.

Michael Dillon
fuente
Prácticamente nunca ves tararchivos sin comprimir y hay una razón para eso. tarusa fragmentos muy grandes, lo que significa que obtienes mucho relleno al final de los archivos. Para deshacerse de todos estos ceros, casi siempre vale la pena usarlo gzipsin pensarlo dos veces.
Christian
Una divertida excepción es que el código fuente de gzip está disponible como un alquitrán desnudo, por razones obvias.
Mark Adler
4

Tal vez deberíamos preguntarnos por qué estos "nuevos" formatos de archivo que realizan tanto la compresión como la agregación (y agregaría cifrado) no se construyeron en tar desde el principio en lugar de herramientas completamente diferentes.

Según tengo entendido, hay razones históricas (relacionadas con el historial del sistema operativo, la "protección" de las patentes, la capacidad del proveedor de software para vender herramientas, etc.).

Ahora, como señaló otra respuesta, incluso ahora tar no es claramente inferior a otras soluciones y puede ser mejor en otros aspectos, como la capacidad de trabajar en transmisiones o la gestión de derechos de Unix.

Si lees el artículo de Wikipedia sobre el alquitrán , puedes ver otro hecho interesante. El artículo reconoce algunas deficiencias de tar ... pero no sugiere usar zip en su lugar (realmente el formato zip no resuelve estas deficiencias) sino DAR.

Terminaré con un toque personal. Algunas veces tuve que crear un formato de archivo para almacenar datos cifrados. Usar tar como base fue útil (otros hicieron la misma elección, por ejemplo tar es el formato de agregación interna para paquetes .deb). Era obvio para mí que tratar de comprimir datos después del cifrado era totalmente inútil, tenía que realizar la compresión como un paso independiente antes del cifrado, y tampoco estaba listo para usar el cifrado zip (quería cifrado de dos claves con claves públicas y privadas) . Usando alquitrán funcionó como una brisa.

kriss
fuente
3

Me sorprende que nadie haya mencionado esto, pero una de las razones, no realmente una ventaja, sino una necesidad, es la compatibilidad con versiones anteriores. Hay muchos sistemas que ejecutan software durante décadas que podrían requerir tararchivado. No es rentable contratar a alguien para "arreglar" todos los sistemas antiguos.

Keltari
fuente
3

tar es UNIX como UNIX es tar

En mi opinión, la razón de seguir usando tarhoy es que es uno de los casos (probablemente raros) donde el enfoque de UNIX lo hizo perfectamente desde el principio.

Echando un vistazo más de cerca a las etapas involucradas en la creación de archivos, espero que esté de acuerdo en que la forma en que se lleva a cabo la separación de las diferentes tareas aquí es la filosofía de UNIX en su máxima expresión:

  • una herramienta ( tarpara darle un nombre aquí) especializada en transformar cualquier selección de archivos, directorios y enlaces simbólicos, incluidos todos los metadatos relevantes, como marcas de tiempo, propietarios y permisos, en un flujo de bytes.

  • y solo otra herramienta intercambiable arbitrariamente ( gzip bz2 xzpor nombrar solo algunas opciones) que transforma cualquier flujo de entrada de bytes en otro flujo de salida (con suerte) más pequeño.

El uso de este tipo de enfoque brinda un par de beneficios tanto para el usuario como para el desarrollador:

  • extensibilidad Permitiendo acoplarse tarcon cualquier algoritmo de compresión ya existente o cualquier algoritmo de compresión aún por desarrollar sin tener que cambiar nada en el funcionamiento interno tar.

    Tan pronto como salga la nueva herramienta "hyper-zip-utra" o de compresión, ya estás listo para usarla, abrazando a tu nuevo servidor con todo el poder tar.

  • La estabilidad tar ha sido de uso intensivo desde principios de los 80 probada y ejecutada en numerosos sistemas operativos y máquinas.

    Evitar la necesidad de reinventar la rueda en la implementación del almacenamiento de propiedad, permisos, marcas de tiempo y similares una y otra vez para cada nueva herramienta de archivo no solo ahorra mucho tiempo (de lo contrario innecesariamente invertido) en desarrollo, sino que también garantiza la misma confiabilidad para cada Nueva aplicación.

  • consistencia La interfaz de usuario permanece igual todo el tiempo.

    No es necesario recordar que para restaurar los permisos usando la herramienta A, debe pasar la opción --i-hope-you-rember-this-oney usar la herramienta B que debe usar --this-time-its-another-one mientras usa la herramienta C es `--hope-you-didnt-try-with-tool-as-switch.

    Mientras que al utilizar la herramienta D, realmente la habría estropeado si no la hubiera utilizado --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

mikyra
fuente
3

Muchas buenas respuestas, pero todas descuidan un hecho importante. Tar tiene un ecosistema bien establecido de usuarios y desarrolladores en el mundo tipo Unix. Eso lo mantiene en funcionamiento, al igual que ZIP sigue funcionando por su ecosistema DOS / Windows. Tener un ecosistema así es lo que sostiene una tecnología, no sus ventajas técnicas.

Isaac Rabinovitch
fuente
Muy buen comentario, ni siquiera había pensado en eso, y ese es un punto REALMENTE bueno.
MarcusJ
3

La razón es "afianzamiento en la cultura". Hay muchas personas como yo cuyos ojos se ven si se les pide que procesen algo que no sea un archivo comprimido de alquitrán, o el ZIP ocasional, si proviene del mundo de Windows.

No quiero escuchar sobre 7-Zip, RAR o cualquier otra cosa. Si tengo que instalar un programa para descomprimir su archivo, eso es trabajo. Lo haré si resulta que me pagan, o si el contenido es algo que "debo tener" y no está disponible de ninguna otra manera.

Una ventaja del alquitrán es que si le envías un tarball a alguien, se reconoce al instante. El destinatario puede escribir los comandos de extracción utilizando la memoria muscular.

La verdadera pregunta es: ¿por qué algunas personas están tan obsesionadas con ahorrar un byte más de espacio que les piden a todos los demás que pierdan el tiempo instalando alguna utilidad exótica y aprendiendo a usarla? Y luego están los usos estúpidos de los formatos exóticos de compresión y archivo. ¿Un video H.264 con sonido AAC realmente necesita ser puesto en RAR multiparte?

El formato tar puede ser antiguo, pero almacena todo lo que es relevante: contenido del archivo, rutas, marcas de tiempo, permisos y propiedades. Almacena no solo enlaces simbólicos, sino que puede preservar la estructura del enlace duro. También almacena archivos especiales, por lo que se puede usar un archivo de cinta para cosas como un /devdirectorio en miniatura que se usa durante el arranque. Puede armar una distribución de Linux cuyo formato de paquete binario no consiste en nada, sino en tarballs sin comprimir en relación con la raíz del sistema de archivos.

Kaz
fuente
Re "Tan obsesionado" ... imagina que estás varado en la zona de guerra con una sola computadora portátil endurecida, y el disco duro 20G de tamaño reducido está casi lleno, tal vez un concierto a la izquierda, y escuchando los disparos desde lejos, realmente te gustaría navegar un manual .PDF de 100MB que muestra cómo reparar el jeep, pero el archivo está en un archivo .tgz de 2 Gig. Y la computadora portátil ejecuta un sistema operativo propietario extraño de código cerrado, y no tiene acceso de root para eliminar archivos del sistema, no es obvio cómo eliminar 4G + sin romper el desarchivador o el visor de PDF. Si pudieras extraer ese archivo de 100 MB ...
agc
2

Responde directamente las preguntas específicas que planteaste:

¿Existe una penalización de rendimiento durante las etapas de agregación / compresión / descompresión por usar alquitrán encapsulado en gzip o bzip2, en comparación con el uso de un formato de archivo que agrega y comprime en la misma estructura de datos? Suponga que el tiempo de ejecución del compresor que se compara es idéntico (por ejemplo, gzip y Deflate son similares).

Hay una mejora de rendimiento específica, en casos generales, que se usa tarespecialmente con la biblioteca de compresión incorporada (las líneas de comando tar xvzfo tar xvjfstyle, donde se usa una biblioteca de compresión en lugar de un segundo proceso). Esto proviene de dos causas principales:

  • Cuando se procesa una gran cantidad de archivos relativamente pequeños, especialmente los que se usan comúnmente en la distribución de software, existe una alta redundancia. La compresión en muchos archivos da como resultado una compresión general mayor que la compresión de archivos individuales. Y el "diccionario" se calcula una vez por cada porción de entrada, no por cada archivo.

  • tarentiende los sistemas de archivos. Está diseñado para guardar y restaurar un sistema operativo que funcione / funcione. Comprende profundamente lo que es importante en un sistema de archivos UNIX, y captura y restaura fielmente eso. Otras herramientas ... no siempre, especialmente la familia zip, que está mejor diseñada para compartir archivos entre una familia de sistemas operativos, donde el documento es lo importante, no una copia sensible del sistema operativo fiel.

¿Existen características del formato de archivo tar que otros formatos de archivo, como .7z y .zip, no tienen?

Escaso manejo de archivos. Algunas de las bibliotecas de bases de datos directas se basan en archivos dispersos: archivos donde los datos son nominalmente GB, pero los datos reales escritos y almacenados son mucho, mucho menos, y solo se usan unos pocos bloques de disco. Si utiliza una herramienta que no es consciente, al descomprimir, termina con un consumo masivo de bloque de disco, todos con ceros. Convertir eso de nuevo en un archivo escaso es ... doloroso. Si incluso tienes espacio para hacerlo. Necesita una herramienta que comprenda qué es un archivo disperso y lo respeta.

Metadatos Unix ha desarrollado algunas cosas extrañas a lo largo de los años. Nombres de archivos de 14 caracteres, nombres largos de archivos, enlaces de enlaces simbólicos, bits fijos, bits de superusuario, permisos de acceso de grupo heredados, etc. Tar los comprende y reproduce. Herramientas para compartir archivos ... no tanto. Mucha gente no usa los enlaces de la manera que podrían ... Si alguna vez trabajó con un software que sí usa enlaces, y luego usó una herramienta no consciente para realizar copias de seguridad y restaurar, ahora tiene muchas archivos, en lugar de un solo archivo con muchos nombres. Dolor. Su software falla y tiene hinchazón de disco.

Dado que tar es un formato de archivo tan antiguo y existen formatos de archivo más nuevos hoy en día, ¿por qué el tar (ya sea encapsulado en gzip, bzip2 o incluso el nuevo xz) todavía se usa tan ampliamente en GNU / Linux, Android, BSD y otros UNIX? sistemas operativos, para transferencias de archivos, fuente de programas y descargas binarias, y algunas veces incluso como un formato de administrador de paquetes?

tartrabajos. Hace el trabajo para el que está diseñado, bueno. Ha habido otros reemplazos promocionado ( cpio, pax, etc, etc). Pero tar está instalado en casi todo, y las bibliotecas de compresión que usa también son muy comunes por otras razones. No ha aparecido nada más que supere sustancialmente lo que hace el alquitrán. Sin ventajas claras y una gran cantidad de uso y conocimiento integrados en la comunidad, no habrá reemplazo. El alquitrán ha tenido mucho uso a lo largo de los años. Si obtenemos cambios importantes en la forma en que pensamos en los sistemas de archivos, o los archivos que no son de texto de alguna manera se convierten en la forma de transferir código (actualmente no puedo imaginar cómo, pero ignore eso ...), entonces podría encontrar otra herramienta. Pero ese no sería el tipo de sistema operativo que ahora usamos. Sería una cosa diferente, organizada de manera diferente y necesitaría sus propias herramientas.

La pregunta más importante, creo, que no preguntaste, es para qué trabajos 'tar' no son adecuados.

tarcon compresión es frágil Necesita todo el archivo, poco a poco. En mi experiencia, no es resistente. He tenido errores de un solo bit que resultan en archivos de varias partes que se vuelven inutilizables. No introduce redundancia para protegerse contra errores (lo que anularía una de las preguntas que hizo, sobre la compresión de datos). Si existe la posibilidad de corrupción de datos, entonces desea verificar los errores con redundancia para poder reconstruir los datos. Eso significa, por definición, que no estás comprimido al máximo. No se puede tener cada bit de datos necesarios y tener su valor máximo de significado (compresión máxima) y tener cada bit de datos capaz de pérdida y recuperación (redundancia y corrección de errores). Entonces ... ¿cuál es el propósito de su archivo?tares excelente en entornos de alta confiabilidad y cuando el archivo se puede reproducir desde la fuente nuevamente. IME, en realidad es peor en lo original que sugieren sus nombres: el archivo en cinta. Los errores de un solo bit en una cinta (o peor, los errores de un solo bit en un cabezal de cinta, donde pierde un bit en cada byte de una cinta o archivo completo) hacen que los datos se vuelvan inutilizables. Con suficiente redundancia y detección y corrección de errores, puede sobrevivir a cualquiera de esos problemas.

Entonces ... ¿cuánto ruido y corrupción hay en el entorno que está mirando? ¿Se puede usar la fuente para regenerar un archivo fallido? La respuesta, a partir de las pistas que ha proporcionado, es que el sistema no es ruidoso y que la fuente es capaz de regenerar un archivo. En cuyo caso, tares adecuado.

tarcon compresión tampoco funciona bien con archivos precomprimidos. Si está enviando datos ya comprimidos ... solo use tar y no se moleste con la etapa de compresión, solo agrega ciclos de CPU para no hacer mucho. Eso significa que necesita saber qué está enviando y por qué. Si te importa. Si no le importan esos casos especiales, tar copiará fielmente los datos, y comprimir fielmente no hará mucho para hacerlos más pequeños. No hay gran problema, aparte de algunos ciclos de CPU.

JezC
fuente
-3

TAR es archivo de cinta. Ha existido durante décadas y es ampliamente utilizado y respaldado. Es un producto maduro y se ocupa tanto de las necesidades actuales como de las heredadas.

Eduardo
fuente