bzip2, bunzip2: un compresor de archivos basado en el algoritmo de ordenamiento de bloques de Burrows-Wheeler, v1.0.8
bzcat: descomprime archivos a la salida estándar
bzip2recover: recupera datos de archivos bzip2 dañados
SINOPSIS
bzip2 [ -cdfkqstvzVL123456789 ] [ nombres de archivo ... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ nombres de archivo ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ nombres de archivo ... ]
bzcat [ -h|--help ]
bzip2recover nombre de archivo
DESCRIPCIÓN
bzip2 comprime archivos utilizando el algoritmo de compresión de texto de ordenamiento de bloques de Burrows-Wheeler y la codificación Huffman. La compresión es generalmente considerablemente mejor que la que se logra con los compresores basados en LZ77/LZ78 más convencionales y se acerca al rendimiento de la familia de compresores estadísticos PPM.
Las opciones de línea de comandos son deliberadamente muy similares a las de GNU gzip, pero no son idénticas.
bzip2 espera una lista de nombres de archivo que acompañen a los indicadores de línea de comandos. Cada archivo se reemplaza por una versión comprimida de sí mismo, con el nombre "nombre_original.bz2". Cada archivo comprimido tiene la misma fecha de modificación, permisos y, cuando sea posible, propiedad que el archivo original correspondiente, para que estas propiedades se puedan restaurar correctamente en el momento de la descompresión. El manejo de nombres de archivo es ingenuo en el sentido de que no hay un mecanismo para preservar los nombres de archivo, permisos, propiedades o fechas originales en los sistemas de archivos que carecen de estos conceptos o que tienen serias restricciones de longitud de nombre de archivo, como MS-DOS.
bzip2 y bunzip2 no sobrescribirán los archivos existentes de forma predeterminada. Si desea que esto suceda, especifique el indicador -f.
Si no se especifican nombres de archivo, bzip2 comprime desde la entrada estándar a la salida estándar. En este caso, bzip2 no escribirá la salida comprimida a un terminal, ya que esto sería completamente incomprensible y, por lo tanto, inútil.
bunzip2 (o bzip2 -d) descomprime todos los archivos especificados. Los archivos que no fueron creados por bzip2 se detectarán e ignorarán, y se emitirá una advertencia. bzip2 intenta adivinar el nombre del archivo para el archivo descomprimido a partir del nombre del archivo comprimido de la siguiente manera:
nombre_archivo.bz2 se convierte en nombre_archivo
nombre_archivo.bz se convierte en nombre_archivo
nombre_archivo.tbz2 se convierte en nombre_archivo.tar
nombre_archivo.tbz se convierte en nombre_archivo.tar
cualquier_otro_nombre se convierte en cualquier_otro_nombre.out
Si el archivo no termina con una de las terminaciones reconocidas, .bz2, .bz, .tbz2 o .tbz, bzip2 se queja de que no puede adivinar el nombre del archivo original y utiliza el nombre original con .out adjunto.
Al igual que con la compresión, proporcionar nombres de archivo sin especificar provoca la descompresión desde la entrada estándar a la salida estándar.
bunzip2 descomprimirá correctamente un archivo que sea la concatenación de dos o más archivos comprimidos. El resultado es la concatenación de los archivos descomprimidos correspondientes. También se admite la prueba de integridad (-t) de archivos comprimidos concatenados.
También puede comprimir o descomprimir archivos a la salida estándar mediante la opción -c. Se pueden comprimir y descomprimir varios archivos de esta manera. Las salidas resultantes se envían secuencialmente a stdout. La compresión de varios archivos de esta manera genera una secuencia que contiene varias representaciones de archivos comprimidos. Dicha secuencia solo se puede descomprimir correctamente con bzip2 versión 0.9.0 o posterior. Las versiones anteriores de bzip2 dejarán de procesar después de descomprimir el primer archivo de la secuencia.
bzcat (o bzip2 -dc) descomprime todos los archivos especificados a la salida estándar.
bzip2 leerá los argumentos de las variables de entorno BZIP2 y BZIP, en ese orden, y los procesará antes de leer cualquier argumento de la línea de comandos. Esto proporciona una forma conveniente de proporcionar argumentos predeterminados.
La compresión siempre se realiza, incluso si el archivo comprimido es ligeramente más grande que el original. Los archivos de menos de unos cien bytes tienden a ser más grandes, ya que el mecanismo de compresión tiene una sobrecarga constante de alrededor de 50 bytes. Los datos aleatorios (incluido el resultado de la mayoría de los compresores de archivos) se codifican a aproximadamente 8.05 bits por byte, lo que produce una expansión de alrededor del 0.5%.
Como autocomprobación para su protección, bzip2 utiliza CRC de 32 bits para asegurarse de que la versión descomprimida de un archivo sea idéntica a la original. Esto protege contra la corrupción de los datos comprimidos y contra errores no detectados en bzip2 (con suerte, muy poco probable). Las posibilidades de que la corrupción de datos pase desapercibida son microscópicas, aproximadamente una de cada cuatro mil millones para cada archivo procesado. Tenga en cuenta, sin embargo, que la comprobación se realiza al descomprimir, por lo que solo puede indicarle que algo no está bien. No puede ayudarle a recuperar los datos originales no comprimidos. Puede utilizar bzip2recover para intentar recuperar datos de archivos dañados.
Valores de retorno: 0 para una salida normal, 1 para problemas ambientales (archivo no encontrado, marcas no válidas, errores de E/S, etc.), 2 para indicar un archivo comprimido dañado, 3 para un error de consistencia interna (por ejemplo, un error) que provocó que bzip2 entrara en pánico.
OPCIONES
-c --stdout
Comprima o descomprima a la salida estándar.
-d --decompress
Fuerce la descompresión. bzip2, bunzip2 y bzcat son en realidad el mismo programa, y la decisión sobre qué acciones tomar se basa en qué nombre se utiliza. Esta opción anula ese mecanismo y obliga a bzip2 a descomprimir.
-z --compress
El complemento de -d: fuerza la compresión, independientemente del nombre de la invocación.
-t --test
Compruebe la integridad de los archivos especificados, pero no los descomprima. Esto realmente realiza una descompresión de prueba y descarta el resultado.
-f --force
Fuerza la sobrescritura de los archivos de salida. Normalmente, bzip2 no sobrescribe los archivos de salida existentes. También obliga a bzip2 a romper los enlaces duros a los archivos, lo que de otro modo no haría.
Normalmente, bzip2 se niega a descomprimir archivos que no tienen los bytes de encabezado mágicos correctos. Si se fuerza (-f), sin embargo, pasará dichos archivos sin modificarlos. Así es como se comporta GNU gzip.
-k --keep
Conserva (no elimina) los archivos de entrada durante la compresión o descompresión.
-s --small
Reduce el uso de memoria, para la compresión, descompresión y prueba. Los archivos se descomprimen y se prueban utilizando un algoritmo modificado que solo requiere 2,5 bytes por byte de bloque. Esto significa que cualquier archivo se puede descomprimir en 2300 KB de memoria, aunque a aproximadamente la mitad de la velocidad normal.
Durante la compresión, -s selecciona un tamaño de bloque de 200 KB, lo que limita el uso de memoria a aproximadamente la misma cantidad, a expensas de la relación de compresión. En resumen, si su máquina tiene poca memoria (8 MB o menos), utilice -s para todo. Consulte la sección GESTIÓN DE LA MEMORIA a continuación.
-q --quiet
Suprime los mensajes de advertencia no esenciales. Los mensajes relacionados con los errores de E/S y otros eventos críticos no se suprimirán.
-v --verbose
Modo detallado: muestra la relación de compresión para cada archivo procesado. Más opciones -v aumentan el nivel de detalle, mostrando mucha información que es principalmente de interés para fines de diagnóstico.
-h --help
Imprime un mensaje de ayuda y sale.
-L --license -V --version
Muestra la versión del software, los términos y condiciones de la licencia.
-1 (o --fast) a -9 (o --best)
Establece el tamaño del bloque en 100 KB, 200 KB ... 900 KB al comprimir. No tiene efecto al descomprimir. Consulte la sección GESTIÓN DE LA MEMORIA a continuación. Los alias --fast y --best se proporcionan principalmente para la compatibilidad con GNU gzip. En particular, --fast no hace que las cosas sean significativamente más rápidas. Y --best simplemente selecciona el comportamiento predeterminado.
-- Trata todos los argumentos posteriores como nombres de archivo, incluso si comienzan con un guion. Esto permite manejar archivos con nombres que comienzan con un guion, por ejemplo: bzip2 -- -myfilename.
--repetitive-fast --repetitive-best
Estas opciones son redundantes en las versiones 0.9.5 y posteriores. Proporcionaban cierto control aproximado sobre el comportamiento del algoritmo de ordenación en versiones anteriores, lo que a veces era útil. Las versiones 0.9.5 y posteriores tienen un algoritmo mejorado que hace que estas opciones sean irrelevantes.
GESTIÓN DE LA MEMORIA
bzip2 comprime archivos grandes en bloques. El tamaño del bloque afecta tanto a la relación de compresión que se logra como a la cantidad de memoria necesaria para la compresión y descompresión. Las opciones -1 a -9 especifican que el tamaño del bloque sea de 100.000 bytes a 900.000 bytes (el valor predeterminado), respectivamente. En el momento de la descompresión, el tamaño del bloque utilizado para la compresión se lee del encabezado del archivo comprimido, y bunzip2 luego asigna suficiente memoria para descomprimir el archivo. Dado que los tamaños de bloque se almacenan en los archivos comprimidos, se deduce que las opciones -1 a -9 son irrelevantes y, por lo tanto, se ignoran durante la descompresión.
Los requisitos de compresión y descompresión, en bytes, se pueden estimar de la siguiente manera:
Compresión: 400 k + (8 x tamaño del bloque)
Descompresión: 100 k + (4 x tamaño del bloque), o
100k + (2,5 x tamaño del bloque)
Los tamaños de bloque más grandes ofrecen rendimientos marginales que disminuyen rápidamente. La mayor parte de la compresión proviene de los primeros dos o tres cientos de kilobytes del tamaño del bloque, un hecho que vale la pena tener en cuenta al usar bzip2 en máquinas pequeñas. También es importante comprender que el requisito de memoria para la descompresión se establece en el momento de la compresión mediante la elección del tamaño del bloque.
Para los archivos comprimidos con el tamaño de bloque predeterminado de 900 k, bunzip2 requerirá aproximadamente 3700 kbytes para descomprimir. Para admitir la descompresión de cualquier archivo en una máquina de 4 megabytes, bunzip2 tiene una opción para descomprimir utilizando aproximadamente la mitad de esta cantidad de memoria, alrededor de 2300 kbytes. La velocidad de descompresión también se reduce a la mitad, por lo que solo debe usar esta opción cuando sea necesario. La bandera correspondiente es -s.
En general, intente usar el tamaño de bloque más grande que permitan las restricciones de memoria, ya que esto maximiza la compresión lograda. La velocidad de compresión y descompresión se ve prácticamente inafectada por el tamaño del bloque.
Otro punto importante se aplica a los archivos que caben en un solo bloque; eso significa la mayoría de los archivos que encontraría al usar un tamaño de bloque grande. La cantidad de memoria real que se utiliza es proporcional al tamaño del archivo, ya que el archivo es más pequeño que un bloque. Por ejemplo, comprimir un archivo de 20000 bytes con la bandera -9 hará que el compresor asigne alrededor de 7600 k de memoria, pero solo utilice 400 k + 20000 * 8 = 560 kbytes de ella. De manera similar, el descompresor asignará 3700k, pero solo utilizará 100 k + 20000 * 4 = 180 kbytes.
Aquí hay una tabla que resume el uso máximo de memoria para diferentes tamaños de bloque. También se registra el tamaño comprimido total para 14 archivos del Calgary Text Compression Corpus, que suman 3.141.622 bytes. Esta columna da una idea de cómo varía la compresión con el tamaño del bloque. Estas cifras tienden a subestimar la ventaja de los tamaños de bloque más grandes para archivos más grandes, ya que el Corpus está dominado por archivos más pequeños.
Comprimir Descomprimir Descomprimir Tamaño Bandera uso uso uso -s del Corpus
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
RECUPERACIÓN DE DATOS DE ARCHIVOS DAÑADOS
bzip2 comprime los archivos en bloques, generalmente de 900 kbytes de largo. Cada bloque se maneja de forma independiente.
Si un error en los medios o en la transmisión provoca que un archivo .bz2 de varios bloques se dañe, es posible que se puedan recuperar datos de los bloques no dañados del archivo.
La representación comprimida de cada bloque está delimitada por un patrón de 48 bits, lo que permite encontrar los límites de los bloques con una certeza razonable. Cada bloque también lleva su propio CRC de 32 bits, por lo que los bloques dañados se pueden distinguir de los que no lo están.
^ zip2recover es un programa simple cuyo propósito es buscar bloques en archivos .bz2 y escribir cada bloque en su propio archivo .bz2. Luego, puede usar bzip2 -t para probar la integridad de los archivos resultantes y descomprimir los que no estén dañados.
^ zip2recover toma un solo argumento, el nombre del archivo dañado, y escribe varios archivos "rec00001file.bz2", "rec00002file.bz2", etc., que contienen los bloques extraídos. Los nombres de los archivos de salida están diseñados de tal manera que el uso de comodines en el procesamiento posterior (por ejemplo, "bzip2 -dc rec*file.bz2 > recovered_data") procese los archivos en el orden correcto.
^ zip2recover debería ser de mayor utilidad al tratar con archivos .bz2 grandes, ya que estos contendrán muchos bloques. Es evidentemente inútil usarlo en archivos de un solo bloque dañados, ya que un bloque dañado no se puede recuperar. Si desea minimizar cualquier posible pérdida de datos debido a errores de transmisión o de medios, puede considerar comprimir con un tamaño de bloque más pequeño.
NOTAS DE RENDIMIENTO
La fase de ordenación de la compresión reúne cadenas similares en el archivo. Debido a esto, los archivos que contienen secuencias muy largas de símbolos repetidos, como "aabaabaabaab ..." (repetido varias cientos de veces), pueden comprimirse más lentamente de lo normal. Las versiones 0.9.5 y posteriores funcionan mucho mejor que las versiones anteriores en este sentido. La relación entre el peor de los casos y el tiempo de compresión promedio está en la región de 10:1. Para las versiones anteriores, esta cifra era más como 100:1. Puede usar la opción -vvvv para monitorear el progreso en gran detalle, si lo desea.
La velocidad de descompresión no se ve afectada por estos fenómenos.
^ zip2 generalmente asigna varios megabytes de memoria para operar y luego realiza operaciones en ella de manera bastante aleatoria. Esto significa que el rendimiento, tanto para la compresión como para la descompresión, está determinado en gran medida por la velocidad a la que su máquina puede gestionar los errores de caché. Debido a esto, se ha observado que los pequeños cambios en el código para reducir la tasa de errores de caché producen mejoras de rendimiento desproporcionadamente grandes. Imagino que bzip2 funcionará mejor en máquinas con cachés muy grandes.
ADVERTENCIAS
Los mensajes de error de E/S no son tan útiles como podrían ser. bzip2 intenta detectar errores de E/S y salir limpiamente, pero los detalles de cuál es el problema a veces parecen bastante engañosos.
Esta página de manual pertenece a la versión 1.0.8 de bzip2. Los datos comprimidos creados por esta versión son completamente compatibles con versiones anteriores y posteriores con las versiones públicas anteriores, versiones 0.1pl2, 9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 y posteriores, pero con la siguiente excepción: 0.9.0 y posteriores pueden corregir correctamente la descompresión de varios archivos comprimidos concatenados. 0.1pl2 no puede hacer esto; se detendrá después de descomprimir solo el primer archivo de la secuencia.
Las versiones de bzip2recover anteriores a la 1.0.2 utilizaban enteros de 32 bits para representar las posiciones de bits en los archivos comprimidos, por lo que no podían manejar archivos comprimidos de más de 512 megabytes. Las versiones 0.2 y posteriores utilizan enteros de 64 bits en algunas plataformas que los admiten (objetivos compatibles con GNU y Windows). Para determinar si bzip2recover se compiló con esta limitación, ejecútelo sin argumentos. En cualquier caso, puede compilar usted mismo una versión ilimitada si puede recompilarlo con MaybeUInt64 establecido como un entero sin signo de 64 bits.
AUTOR
Julian Seward, _.
https://sourceware.org/bzip2/
Las ideas incorporadas en bzip2 se deben (al menos) a las siguientes personas: Michael Burrows y David Wheeler (por la transformación de ordenación por bloques), David Wheeler (nuevamente, por el codificador Huffman), Peter Fenwick (por el modelo de codificación estructurada en el bzip original y muchas mejoras), y Alistair Moffat, Radford Neal e Ian Witten (por el codificador aritmético en el bzip original). Estoy muy agradecido por su ayuda, apoyo y consejo. Consulte el manual en la distribución de origen para obtener información sobre las fuentes de documentación. Christian von Roques me animó a buscar algoritmos de ordenación más rápidos para acelerar la compresión. Bela Lubkin me animó a mejorar el rendimiento de compresión en el peor de los casos. Donna Robinson convirtió la documentación a XML. Los scripts bz* derivan de los de GNU gzip. Muchas personas enviaron parches, ayudaron con los problemas de portabilidad, prestaron máquinas, dieron consejos y fueron generalmente útiles.