bzip2(1) | General Commands Manual | bzip2(1) |
NOMBRE¶
bzip2, bunzip2 - un compresor de archivos por ordenación de
bloques, v1.0.8
bzcat - descomprime archivos hacia la salida estándar
bzip2recover - recupera datos desde archivos bzip2 dañados
SINOPSIS¶
bzip2 [ -cdfkqstvzVL123456789 ] [ archivos
... ]
bunzip2 [ -fkvsVL ] [ archivos ... ]
bzcat [ -s ] [ archivos ... ]
bzip2recover archivo
DESCRIPCIÓN¶
bzip2 comprime archivos utilizando el algoritmo de compresión de texto por ordenación de bloques de Burrows-Wheeler. Generalmente, la compresión obtenida es considerablemente mejor que la de compresores más convencionales basados en LZ77/LZ78, y se aproxima al rendimiento de la familia PPM de compresores estadísticos.
Las opciones de la línea de órdenes son deliberadamente muy similares a las de GNU gzip, pero no son idénticas.
bzip2 espera que una lista de nombres acompañe las opciones de la línea de órdenes. Cada archivo es reemplazado por una copia comprimida de él mismo, de nombre "nombre_original.bz2". Cada archivo comprimido tiene la misma fecha de modificación, permisos y -si es posible- el mismo propietario que el original correspondiente, de forma que estas propiedades puedan ser recuperadas correctamente en el momento de la descompresión. El manejo de los nombres de los archivos es "ingenuo" en el sentido de que no hay forma de preservar los nombres originales, los permisos y las fechas en los sistemas de archivos que carecen de estos conceptos, o que tienen serias restricciones en el tamaño de los nombres, como por ejemplo MS-DOS.
Por defecto, bzip2 y bunzip2 no sobreescribirán archivos existentes. Si quieres que esto ocurra, especifica la opción -f.
Si no se especifica el nombre de ningún archivo, bzip2 comprimirá desde la entrada estándar hacia la salida estándar. En este caso, bzip2 se negará a escribir la salida comprimida hacia una terminal, ya que ésta sería totalmente incomprensible y por lo tanto inútil.
bunzip2 (o bzip2 -d) descomprime todos los archivos indicados. Aquellos que no hayan sido creados con bzip2 no se procesarán emitiéndose un mensaje de advertencia. bzip2 trata de averiguar el nombre del archivo descomprimido a partir del comprimido del siguiente modo:
filename.bz2 pasa a llamarse filename
filename.bz pasa a llamarse filename
filename.tbz2 pasa a llamarse filename.tar
filename.tbz pasa a llamarse filename.tar
anyothername pasa a llamarse anyothername.out
Si el archivo tiene una de las extensiones conocidas: .bz2, .bz, .tbz2 o bien .tbz, bzip2 indicará que no puede adivinar el nombre del archivo original y empleará el nombre completo del mismo añadiéndole la exensión .out.
Al igual que para la compersión, si no se indica ningún nombre de archivo se intentará descomprimir la entrada estándar enviando el resultado por la salida estándar.
bunzip2 descomprimirá correctamente un archivo que sea la concatenación de uno o más archivos comprimidos. El resultado es la concatenación de los correspondientes archivos descomprimidos. Con (-t) se puede comprobar la integridad de archivos concatenados comprimidos.
También se pueden comprimir o descomprimir archivos a la salida estándar utilizando la opción -c. Múltiples archivos pueden ser comprimidos y descomprimidos de esta forma. Las salidas resultantes van siendo pasadas secuencialmente hacia la salida estándar. La compresión de múltiples archivos de esta manera genera un flujo que contiene múltiples representaciones de archivos. Tal flujo solo puede ser descomprimido correctamente por la versión 0.9.0 o superior de bzip2; versiones anteriores de bzip2 pararán tras descomprimir el primer archivo del flujo.
bzcat (o bzip2 -dc) descomprime todos los archivos especificados hacia la salida estándar.
bzip2 considera los argumentos de las variables de entorno BZIP2 y BZIP en ese orden, procesándolos antes de los argumentos indicados por el usuario en la línea de órdenes. Esta es la forma adecuada para indicar argumentos por defecto
La compresión siempre se realiza, incluso aunque el archivo comprimido sea ligeramente mayor que el original. Los archivos de menos de cien bytes tienden a hacerse más grandes, ya que el mecanismo de compresión tiene una sobrecarga constante de unos 50 bytes. Datos aleatorios (incluyendo la salida de la mayoría de compresores) son codificados a unos 8.05 bits por byte, dando una expansión alrededor del 0.5%.
Como autocomprobación para tu protección, bzip2 utiliza CRCs de 32 bits para asegurarse de que la versión descomprimida de un archivo es idéntica a la original. Esto protege contra la corrupción de los datos comprimidos, y contra fallos sin detectar en bzip2 (afortunadamente es muy poco probable). La posibilidad de que la corrupción de datos pase desapercibida es microscópica, alrededor de una probabilidad entre cuatro billones por cada archivo procesado. Cuidado, sin embargo, con que la comprobación se realiza tras la descompresión, por lo que solo entonces se te informará de si algo está mal. El programa no te puede ayudar a recuperar los datos originales descomprimidos. Puede utilizar bzip2recover para intentar recuperar los datos de archivos dañados.
0 para finalización normal, 1 para problemas de entorno (archivo no encontrado, opciones no válidas, errores de E/S, etc...), 3 para un error interno de consistencia (ej. un bug o fallo) que ha provocado que bzip2 se asuste.
OPCIONES¶
- -c --stdout
- Comprime o descomprime la entrada estándar.
- -d --decompress
- Fuerza la descompresión. bzip2, bunzip2 y bzcat son en realidad el mismo programa, y la decisión sobre la acción a realizar se toma en función del nombre que se utilice. Esta opción ignora este mecanismo y hace que bzip2 descomprima.
- -z --compress
- El complementario a -d: fuerza la compresión, independientemente del nombre con que se invoque.
- -t --test
- Comprueba la integridad del archivo(s) especificado, pero no lo descomprime. En realidad se realiza una descompresión de prueba y se lanza el resultado.
- -f --force
- Fuerza la sobrescritura de los archivos de salida. En general,
bzip2 no sobreescribe archivos ya existentes. También hace
que bzip2 rompa enlaces duros a archivos, de otro modo no lo
haría.
en general, bzip2 no acepta descomprimir archivos sin el byte mágico del encabezado. Si se fuerza a hacerlo, (-f) pasará estos archivos sin modificarlos. Este es el comportamiento de GNU gzip.
- -k --keep
- Mantener (no borrar) los archivos de entrada durante la compresión o la descompresión.
- -s --small
- Reduce la utilización de memoria para la compresión, la
descompresión y la comprobación. Los archivos son
descomprimidos y comprobados utilizando un algoritmo modificado que solo
requiere 2.5 bytes por cada byte del bloque. Esto significa que cualquier
archivo puede ser descomprimido en 2300k de memoria, aunque a la mitad de
la velocidad normal.
Durante la compresión, -s selecciona un tamaño de bloque de 200k, lo que limita el uso de memoria a aproximadamente el mismo número, a expensas del porcentaje de compresión. En pocas palabras, si su máquina no tiene mucha memoria (8 megabytes o menos), utilice -s para todo. Vea CONTROL DE MEMORIA más adelante.
- -q --quiet
- Evita mostrar mensajes de aviso poco importantes. Aquellos que indiquen errores de E/S y críticos sí se mostrarán.
- -v --verbose
- Modo extenso (muestra el porcentaje de compresión para cada archivo procesado). El uso de más opciones -v incrementa el nivel de extensión, arrojando gran cantidad de información principalmente de interés para usos de diagnóstico.
- -L --license -V --version
- Muestra la versión del programa, los términos de la licencia y sus condiciones.
- -1 (o --fast) para -9 (o --best)
- Define el tamaño de bloque a 100k, 200k... 900k durante la compresión, no teniendo ningún efecto durante la descompresión. Consulte CONTROL DE MEMORIA más adelante. Los alias --fast y --best son principalemente para asegurar la compatibilidad con GNU gzip. Concretamente, --fast no aporta una mejora significativa de la rapidez y --best simplemente ejecuta el comportamiento por defecto.
- --
- Considerará todos los argumentos dados a continuación como nombres de archivo aunque éstos comiencen con un guión. Así, podrá trabajar con archivos así ejecutando, por ejemplo, bzip2 -- -miarchivo.
- --repetitive-fast --repetitive-best
- Estas opciones son redundantes a partir de la versión 0.9.5. Aportaban un control rudimentario sobre el algoritmo de ordenación en versiones anteriores, lo que era útil algunas veces. A partir de esta versión, las mejoras en el algoritmo las convirtieron en algo obsoleto.
CONTROL DE MEMORIA¶
Bzip2 comprime en bloques los archivos grandes. El tamaño del bloque afecta tanto al porcentaje de compresión conseguido, como a la cantidad de memoria necesitada para la compresión y la descompresión. Las opciones -1 a -9 especifican que el tamaño de los bloques vaya de 100,000 bytes hasta 900,000 bytes (el utilizado) respectivamente. En el momento de descompresión, el tamaño de bloque utilizado para la compresión es leído de la cabecera del archivo comprimido y entonces bunzip2 se asigna a si mismo la memoria justa para descomprimir el archivo. Puesto que el tamaño de los bloques está guardado en los archivos comprimidos, se deduce que las opciones -1 hasta -9 son irrelevantes para la descompresión y por tanto son ignoradas.
Los requerimientos para la compresión y descompresión pueden estimarse:
Compresión: 400k + ( 8 x tamaño de bloque )
Descompresión: 100k + ( 4 x tamaño de bloque ), o
100k + ( 2.5 x tamaño de bloque )
Los tamaños de bloques más grandes producen rápidamente resultados marginales cada vez más pequeños. La mayor parte de la compresión procede de los primeros doscientos o trecientos KBs de tamaño de bloque, un hecho a considerar cuando se utilice bzip2 en máquinas pequeñas. También es importante apreciar que los requerimientos de memoria en la descompresión vienen dados por el tamaño de bloque elegido en la compresión.
Para archivos comprimidos con el tamaño de bloque por defecto de 900k, bunzip2 requerirá aproximadamente 3700 kbytes para descomprimir. Para soportar la descompresión de cualquier archivo en una máquina de 4MB, bunzip2 tiene una opción para descomprimir utilizando aproximadamente la mitad de esta cantidad de memoria, unos 2300 kbytes. La velocidad de descompresión también se divide entre dos, por lo que solo se debe utilizar cuando sea necesario. La opción mencionada es -s.
En general, intenta utilizar el mayor tamaño de bloque que permita la cantidad de memoria de tu sistema, puesto que esto maximiza la compresión conseguida. La velocidad de compresión y descompresión no se ven prácticamente afectadas por el tamaño de bloque.
Otro punto importante tiene que ver con los archivos que caben en un solo bloque -- eso equivale a la mayoría de archivos que encontrará usando grandes tamaños de bloque. La cantidad de memoria utilizada 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 20.000 bytes con la opción -9 hará que el compresor se asigne unos 7600k de memoria, pero solo utilice 400k + 20000 * 8 = 560 kilobytes de ella. De forma similar, el descompresor se asignará 3700k pero solo utilizará 100k + 20000 * 4 = 180 kbytes.
Aquí está una tabla que resume la utilización máxima de memoria para los diferentes tamaños de bloque. También se recoge el tamaño total resultante de compresión de 14 archivos del "Calgary Text Compression Corpus" que sumaban 3,141,622 bytes. Esta columna da una idea de como varía la compresión en función del tamaño de bloque. Estos datos no llegan a dar una verdadera idea de la ventaja de tamaños de bloque grandes para archivos grandes, ya que el Corpus está dominado por archivos pequeños.
Uso al Uso al Descomp. Tamaño
Opción comprimir descomp. usando -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
RESCATANDO DATOS EN ARCHIVOS DAÑADOS¶
bzip2 comprime los archivos en bloques, normalmente de 900kbytes. Cada bloque se maneja de manera independiente. Si un error de transmisión o del medio (físico) provoca que un archivo .bz2 multibloque sea dañado, puede que sea posible recuperar los datos de los bloques intactos que queden en el archivo.
La representación comprimida de cada bloque está delimitada por un patrón de 48 bits, lo que hace posible el encontrar los límites de los bloques con cierta certeza. Cada bloque contiene su propio CRC de 32 bit, por lo que los bloques dañados puedes ser distinguidos de los intactos.
bzip2recover es un simple programa cuyo único propósito es la búsqueda de bloques en archivos .bz2, para su posterior escritura en su propio archivo .bz2. Entonces puede utilizar bzip2 -t para comprobar la integridad de los archivos resultantes y descomprimir aquellos que estén intactos.
bzip2recover acepta un solo argumento: el nombre del archivo dañado, y crea un grupo de archivos "rec0001archivo.bz2", "rec0002archivo.bz2", etc, con los bloques extraídos. Los nombres de salida están diseñados de forma que la utilización de comodines en un procesado posterior (por ejemplo, "bzip2 -dc rec*file.bz2 > recovered_data") los liste en el orden "correcto".
bzip2recover será de mayor provecho cuando trate archivos .bz2 grandes, ya que estos contendrán muchos bloques. Es inútil utilizarlo en archivos de un solo bloque dañados, ya que el bloque dañado no podrá ser recuperado. Si desea minimizar cualquier posible perdida de datos debida a un error del medio físico o de la transmisión, puede considerar la utilización de tamaños de bloque menores en la compresión.
NOTAS SOBRE El FUNCIONAMIENTO DEL PROGRAMA¶
La fase de ordenación del programa recoge y junta todas las cadenas similares del archivo. Debido a esto, los que contienen series muy largas de símbolos, tales como "aabaabaabaab ..." (repetida varios cientos de veces) pueden comprimirse de forma extraordinariamente lenta. Las versiones 0.9.5 y posteriores funcionan mucho mejor en este aspecto. El ratio entre el caso más desfavorable y la media está entorno a 10:1, en versiones anteriores estaba entorno a 100:1. Puede utilizar la opción -vvvv para monitorizar en detalle el progreso. La velocidad de descompresión no se ve afectada.
La velocidad de descompresión no se ve afectada por este hecho.
Normalmente bzip2 reserva varios megabytes de memoria para operar en ellos, y entonces los utiliza de una manera bastante aleatoria. Esto significa que el funcionamiento del programa, tanto para comprimir como para descomprimir, se ve en gran parte determinado por la velocidad a la que su máquina sea capaz de servir fallos de caché. Debido a esto, se ha observado que pequeños cambios en el código para reducir la tasa de fallos proporcionan una mejora desproporcionadamente grande en el funcionamiento del programa. Supongo que bzip2 funcionará mejor en máquinas con caches de gran tamaño.
ADVERTENCIAS¶
Los mensajes de error de E/S no son tan útiles como podrían. bzip2 intenta detectar errores de E/S y salir limpiamente, pero los detalles sobre la causa del problema a veces pueden ser engañosos.
Esta página del manual pertenece a la versión 1.0.8 de bzip2. Los datos comprimidos creados por esta versión son totalmente compatibles con la anteriorversión, las versiones 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 y superiores con con la siguiente excepción: Solo la versión 0.9.0 puede descomprimir correctamente múltiples archivos concatenados. La 0.1pl2 no puede hacer esto; parará justo después de descomprimir el primer archivo en el flujo de datos.
Las versiones anteriores a 1.0.2 de bzip2recover empleaban enteros de 32 bits para representar las posiciones de los bits en archivos comprimidos, esto provocaba que no pudiese manejar archivos de más de 512 megabytes. La versión 1.0.2 y superiores emplean enteros de 64 bits en las plataformas con soporte para ello (Windows y aquellas con soporte para GNU). Para saber si bzip2recover se ha compilado con dicha limitación, simplemente ejecútelo sin argumentos. En cualquier casi, puede crear usted mismo una versión sin esta limitación siempre que pueda recompilarlo con MaybeUInt64 definido para que sea un entero sin signo.
AUTOR¶
Julian Seward, jseward@acm.org.
Las ideas incluidas en bzip2 se deben (al menos) a la siguiente gente: Michael Burrows y David Wheeler (por la transformación por ordenación de bloques), David Wheeler (otra vez, por el codificador de Huffman), Peter Fenwick (por el modelo de programación estructurada del bzip, original, y por muchos refinamientos), y Alistair Moffat, Radford Neal y Ian Witten (por el codificador aritmético del bzip original). Estoy en deuda con ellos por su ayuda, su apoyo y sus consejos. Vea el manual en la distribución sin compilar para encontrar apuntes sobre donde hallar 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 alentó para que mejorara el funcionamiento de la compresión de los casos más desfavorables. Donna Robinson convirtió la documentación al formato XML. Los scripts bz* derivan de los de GNU gzip. Mucha gente envío parches, ayudó con los problemas de portabilidad, prestó máquinas, aportó consejos y fue de ayuda en general.
TRADUCCIÓN¶
La traducción al español de esta página del manual fue creada por Salvador Gimeno Zanón <salgiza@jet.es> y Marcos Fouces <marcos@debian.org>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.