Hay dos tareas distintas pero relacionadas. El empaquetado de un árbol de archivos (incluidos los nombres de archivo, la estructura de directorios, los permisos del sistema de archivos, la propiedad y cualquier otro metadato) en una secuencia de bytes se denomina
archivado . Eliminar la redundancia en una secuencia de bytes para producir una secuencia de bytes más pequeña se denomina compresión .
En Unix, las dos operaciones están separadas, con herramientas distintas para cada una. En la mayoría de las otras plataformas (actuales e históricas), las herramientas combinadas realizan el archivado y la compresión.
(gzip y otros programas que imitan la interfaz de gzip a menudo tienen la opción de almacenar el nombre de archivo original en la salida comprimida, pero esto, junto con un CRC u otra verificación para detectar la corrupción, son los únicos metadatos que pueden almacenar).
Hay ventajas en separar la compresión del archivo. El archivado es específico de la plataforma (los metadatos del sistema de archivos que necesitan preservarse varían ampliamente), pero la implementación es sencilla, en gran medida vinculada a E / S, y cambia poco con el tiempo. La compresión es independiente de la plataforma, pero las implementaciones están vinculadas a la CPU y los algoritmos mejoran constantemente para aprovechar los mayores recursos que el hardware moderno puede aportar al problema.
El archivador de Unix más popular es tar
, aunque existen otros como cpio
y ar
. (Los paquetes de Debian son ar
archivos, mientras
cpio
que a menudo se usan para discos RAM iniciales). Se combina tar
o se ha combinado a menudo con herramientas de compresión como compress
(.Z), gzip
(.gz),
bzip2
(.bz2) y xz
(.xz), desde la más antigua hasta la más joven. , y no casualmente de peor a mejor compresión.
Hacer un tar
archivo comprimido y comprimirlo son pasos distintos: el compresor no sabe nada sobre el tar
formato del archivo. Esto significa que extraer un solo archivo de un tar
archivo comprimido requiere descomprimir todos los archivos anteriores. Esto a menudo se llama un archivo "sólido".
Del mismo modo, dado que tar es un formato de "transmisión", necesario para que sea útil en una tubería, no hay un índice global en un archivo tar, y enumerar el contenido de un archivo tar es tan costoso como extraerlo.
Por el contrario, Zip y RAR y 7-zip (los archivadores más populares en las plataformas modernas de Windows) generalmente comprimen cada archivo por separado, y comprimen los metadatos ligeramente si es que lo hacen. Esto permite una lista barata de los archivos en un archivo y la extracción de archivos individuales, pero significa que la redundancia entre múltiples archivos en el mismo archivo no puede ser explotada para aumentar la compresión. Si bien, en general, comprimir un archivo ya comprimido no reduce aún más el tamaño del archivo, ocasionalmente puede ver un archivo zip dentro de un archivo zip: la primera compresión convirtió muchos archivos pequeños en un archivo grande (probablemente con la compresión desactivada), que el segundo comprimir y luego comprimir como una sola entidad.
Existe una polinización cruzada entre las diferentes plataformas y filosofías: gzip
es esencialmente zip
el compresor sin su archivador, y xz
es esencialmente 7-zip
el compresor sin su archivador.
Hay otros compresores especializados. Las variantes de PPM y su sucesor ZPAQ
están optimizadas para una compresión máxima sin tener en cuenta el consumo de recursos. Pueden masticar fácilmente tanta CPU y RAM como pueda arrojarles, y la descompresión es tan exigente como la compresión (por el contrario, las herramientas de compresión más utilizadas son
asimétricas : descomprimir es más barato que comprimir).
En el otro extremo del espectro, lzo
, snappy
y LZ4
son compresores de "luz", diseñado para una máxima velocidad y mínimo consumo de recursos, a costa de compresión. Son ampliamente utilizados en sistemas de archivos y otros almacenes de objetos, pero no tanto como herramientas independientes.
Entonces, ¿cuál debes elegir?
Archivado:
Dado que está en Ubuntu, no hay ninguna razón real para usar otra cosa que no sea el tar
archivado, a menos que esté tratando de crear archivos que sean fácilmente legibles en otro lugar.
zip
es difícil de superar por la ubicuidad, pero no está centrado en Unix y no mantendrá los permisos del sistema de archivos y la información de propiedad, y su compresión integrada es anticuada. 7-zip y RAR (y ZPAQ) tienen una compresión más moderna pero no son adecuados para archivar sistemas de archivos Unix (aunque no hay nada que le impida usarlos solo como compresores); RAR también es propietario.
Compresión:
Para obtener la máxima compresión, puede echar un vistazo a un punto de referencia, como el enorme en http://mattmahoney.net/dc/text.html . Esto debería darle una mejor idea de las compensaciones involucradas.
Sin embargo, probablemente no desee la máxima compresión. Es muy caro.
xz
es la herramienta de compresión de uso general más popular en los sistemas Unix modernos. Creo que 7-zip también puede leer archivos xz, ya que están estrechamente relacionados.
Finalmente: si está archivando datos para algo que no sea almacenamiento a corto plazo, debe elegir algo de código abierto y preferiblemente extendido, para minimizar los dolores de cabeza más adelante.