bzip2(1) General Commands Manual bzip2(1) NOMBRE bzip2, bunzip2 - un compresor de archivos por ordenacion de bloques, v1.0.8 bzcat - descomprime archivos hacia la salida estandar bzip2recover - recupera datos desde archivos bzip2 danados SINOPSIS bzip2 [ -cdfkqstvzVL123456789 ] [ archivos ... ] bunzip2 [ -fkvsVL ] [ archivos ... ] bzcat [ -s ] [ archivos ... ] bzip2recover archivo DESCRIPCION bzip2 comprime archivos utilizando el algoritmo de compresion de texto por ordenacion de bloques de Burrows-Wheeler. Generalmente, la compresion obtenida es considerablemente mejor que la de compresores mas convencionales basados en LZ77/LZ78, y se aproxima al rendimiento de la familia PPM de compresores estadisticos. Las opciones de la linea de ordenes son deliberadamente muy similares a las de GNU gzip, pero no son identicas. bzip2 espera que una lista de nombres acompane las opciones de la linea de ordenes. Cada archivo es reemplazado por una copia comprimida de el mismo, de nombre "nombre_original.bz2". Cada archivo comprimido tiene la misma fecha de modificacion, 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 descompresion. 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 tamano de los nombres, como por ejemplo MS-DOS. Por defecto, bzip2 y bunzip2 no sobreescribiran archivos existentes. Si quieres que esto ocurra, especifica la opcion -f. Si no se especifica el nombre de ningun archivo, bzip2 comprimira desde la entrada estandar hacia la salida estandar. En este caso, bzip2 se negara a escribir la salida comprimida hacia una terminal, ya que esta seria totalmente incomprensible y por lo tanto inutil. bunzip2 (o bzip2 -d) descomprime todos los archivos indicados. Aquellos que no hayan sido creados con bzip2 no se procesaran emitiendose 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 indicara que no puede adivinar el nombre del archivo original y empleara el nombre completo del mismo anadiendole la exension .out. Al igual que para la compersion, si no se indica ningun nombre de archivo se intentara descomprimir la entrada estandar enviando el resultado por la salida estandar. bunzip2 descomprimira correctamente un archivo que sea la concatenacion de uno o mas archivos comprimidos. El resultado es la concatenacion de los correspondientes archivos descomprimidos. Con (-t) se puede comprobar la integridad de archivos concatenados comprimidos. Tambien se pueden comprimir o descomprimir archivos a la salida estandar utilizando la opcion -c. Multiples archivos pueden ser comprimidos y descomprimidos de esta forma. Las salidas resultantes van siendo pasadas secuencialmente hacia la salida estandar. La compresion de multiples archivos de esta manera genera un flujo que contiene multiples representaciones de archivos. Tal flujo solo puede ser descomprimido correctamente por la version 0.9.0 o superior de bzip2; versiones anteriores de bzip2 pararan tras descomprimir el primer archivo del flujo. bzcat (o bzip2 -dc) descomprime todos los archivos especificados hacia la salida estandar. bzip2 considera los argumentos de las variables de entorno BZIP2 y BZIP en ese orden, procesandolos antes de los argumentos indicados por el usuario en la linea de ordenes. Esta es la forma adecuada para indicar argumentos por defecto La compresion siempre se realiza, incluso aunque el archivo comprimido sea ligeramente mayor que el original. Los archivos de menos de cien bytes tienden a hacerse mas grandes, ya que el mecanismo de compresion tiene una sobrecarga constante de unos 50 bytes. Datos aleatorios (incluyendo la salida de la mayoria de compresores) son codificados a unos 8.05 bits por byte, dando una expansion alrededor del 0.5%. Como autocomprobacion para tu proteccion, bzip2 utiliza CRCs de 32 bits para asegurarse de que la version descomprimida de un archivo es identica a la original. Esto protege contra la corrupcion de los datos comprimidos, y contra fallos sin detectar en bzip2 (afortunadamente es muy poco probable). La posibilidad de que la corrupcion de datos pase desapercibida es microscopica, alrededor de una probabilidad entre cuatro billones por cada archivo procesado. Cuidado, sin embargo, con que la comprobacion se realiza tras la descompresion, por lo que solo entonces se te informara de si algo esta mal. El programa no te puede ayudar a recuperar los datos originales descomprimidos. Puede utilizar bzip2recover para intentar recuperar los datos de archivos danados. 0 para finalizacion normal, 1 para problemas de entorno (archivo no encontrado, opciones no validas, 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 estandar. -d --decompress Fuerza la descompresion. bzip2, bunzip2 y bzcat son en realidad el mismo programa, y la decision sobre la accion a realizar se toma en funcion del nombre que se utilice. Esta opcion ignora este mecanismo y hace que bzip2 descomprima. -z --compress El complementario a -d: fuerza la compresion, 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 descompresion 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. Tambien hace que bzip2 rompa enlaces duros a archivos, de otro modo no lo haria. en general, bzip2 no acepta descomprimir archivos sin el byte magico del encabezado. Si se fuerza a hacerlo, (-f) pasara estos archivos sin modificarlos. Este es el comportamiento de GNU gzip. -k --keep Mantener (no borrar) los archivos de entrada durante la compresion o la descompresion. -s --small Reduce la utilizacion de memoria para la compresion, la descompresion y la comprobacion. 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 compresion, -s selecciona un tamano de bloque de 200k, lo que limita el uso de memoria a aproximadamente el mismo numero, a expensas del porcentaje de compresion. En pocas palabras, si su maquina no tiene mucha memoria (8 megabytes o menos), utilice -s para todo. Vea CONTROL DE MEMORIA mas adelante. -q --quiet Evita mostrar mensajes de aviso poco importantes. Aquellos que indiquen errores de E/S y criticos si se mostraran. -v --verbose Modo extenso (muestra el porcentaje de compresion para cada archivo procesado). El uso de mas opciones -v incrementa el nivel de extension, arrojando gran cantidad de informacion principalmente de interes para usos de diagnostico. -L --license -V --version Muestra la version del programa, los terminos de la licencia y sus condiciones. -1 (o --fast) para -9 (o --best) Define el tamano de bloque a 100k, 200k... 900k durante la compresion, no teniendo ningun efecto durante la descompresion. Consulte CONTROL DE MEMORIA mas 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. -- Considerara todos los argumentos dados a continuacion como nombres de archivo aunque estos comiencen con un guion. Asi, podra trabajar con archivos asi ejecutando, por ejemplo, bzip2 -- -miarchivo. --repetitive-fast --repetitive-best Estas opciones son redundantes a partir de la version 0.9.5. Aportaban un control rudimentario sobre el algoritmo de ordenacion en versiones anteriores, lo que era util algunas veces. A partir de esta version, las mejoras en el algoritmo las convirtieron en algo obsoleto. CONTROL DE MEMORIA Bzip2 comprime en bloques los archivos grandes. El tamano del bloque afecta tanto al porcentaje de compresion conseguido, como a la cantidad de memoria necesitada para la compresion y la descompresion. Las opciones -1 a -9 especifican que el tamano de los bloques vaya de 100,000 bytes hasta 900,000 bytes (el utilizado) respectivamente. En el momento de descompresion, el tamano de bloque utilizado para la compresion es leido de la cabecera del archivo comprimido y entonces bunzip2 se asigna a si mismo la memoria justa para descomprimir el archivo. Puesto que el tamano de los bloques esta guardado en los archivos comprimidos, se deduce que las opciones -1 hasta -9 son irrelevantes para la descompresion y por tanto son ignoradas. Los requerimientos para la compresion y descompresion pueden estimarse: Compresion: 400k + ( 8 x tamano de bloque ) Descompresion: 100k + ( 4 x tamano de bloque ), o 100k + ( 2.5 x tamano de bloque ) Los tamanos de bloques mas grandes producen rapidamente resultados marginales cada vez mas pequenos. La mayor parte de la compresion procede de los primeros doscientos o trecientos KBs de tamano de bloque, un hecho a considerar cuando se utilice bzip2 en maquinas pequenas. Tambien es importante apreciar que los requerimientos de memoria en la descompresion vienen dados por el tamano de bloque elegido en la compresion. Para archivos comprimidos con el tamano de bloque por defecto de 900k, bunzip2 requerira aproximadamente 3700 kbytes para descomprimir. Para soportar la descompresion de cualquier archivo en una maquina de 4MB, bunzip2 tiene una opcion para descomprimir utilizando aproximadamente la mitad de esta cantidad de memoria, unos 2300 kbytes. La velocidad de descompresion tambien se divide entre dos, por lo que solo se debe utilizar cuando sea necesario. La opcion mencionada es -s. En general, intenta utilizar el mayor tamano de bloque que permita la cantidad de memoria de tu sistema, puesto que esto maximiza la compresion conseguida. La velocidad de compresion y descompresion no se ven practicamente afectadas por el tamano de bloque. Otro punto importante tiene que ver con los archivos que caben en un solo bloque -- eso equivale a la mayoria de archivos que encontrara usando grandes tamanos de bloque. La cantidad de memoria utilizada es proporcional al tamano del archivo, ya que el archivo es mas pequeno que un bloque. Por ejemplo, comprimir un archivo de 20.000 bytes con la opcion -9 hara 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 asignara 3700k pero solo utilizara 100k + 20000 * 4 = 180 kbytes. Aqui esta una tabla que resume la utilizacion maxima de memoria para los diferentes tamanos de bloque. Tambien se recoge el tamano total resultante de compresion de 14 archivos del "Calgary Text Compression Corpus" que sumaban 3,141,622 bytes. Esta columna da una idea de como varia la compresion en funcion del tamano de bloque. Estos datos no llegan a dar una verdadera idea de la ventaja de tamanos de bloque grandes para archivos grandes, ya que el Corpus esta dominado por archivos pequenos. Uso al Uso al Descomp. Tamano Opcion 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 DANADOS bzip2 comprime los archivos en bloques, normalmente de 900kbytes. Cada bloque se maneja de manera independiente. Si un error de transmision o del medio (fisico) provoca que un archivo .bz2 multibloque sea danado, puede que sea posible recuperar los datos de los bloques intactos que queden en el archivo. La representacion comprimida de cada bloque esta delimitada por un patron de 48 bits, lo que hace posible el encontrar los limites de los bloques con cierta certeza. Cada bloque contiene su propio CRC de 32 bit, por lo que los bloques danados puedes ser distinguidos de los intactos. bzip2recover es un simple programa cuyo unico proposito es la busqueda 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 esten intactos. bzip2recover acepta un solo argumento: el nombre del archivo danado, y crea un grupo de archivos "rec0001archivo.bz2", "rec0002archivo.bz2", etc, con los bloques extraidos. Los nombres de salida estan disenados de forma que la utilizacion de comodines en un procesado posterior (por ejemplo, "bzip2 -dc rec*file.bz2 > recovered_data") los liste en el orden "correcto". bzip2recover sera de mayor provecho cuando trate archivos .bz2 grandes, ya que estos contendran muchos bloques. Es inutil utilizarlo en archivos de un solo bloque danados, ya que el bloque danado no podra ser recuperado. Si desea minimizar cualquier posible perdida de datos debida a un error del medio fisico o de la transmision, puede considerar la utilizacion de tamanos de bloque menores en la compresion. NOTAS SOBRE El FUNCIONAMIENTO DEL PROGRAMA La fase de ordenacion del programa recoge y junta todas las cadenas similares del archivo. Debido a esto, los que contienen series muy largas de simbolos, 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 mas desfavorable y la media esta entorno a 10:1, en versiones anteriores estaba entorno a 100:1. Puede utilizar la opcion -vvvv para monitorizar en detalle el progreso. La velocidad de descompresion no se ve afectada. La velocidad de descompresion 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 maquina sea capaz de servir fallos de cache. Debido a esto, se ha observado que pequenos cambios en el codigo para reducir la tasa de fallos proporcionan una mejora desproporcionadamente grande en el funcionamiento del programa. Supongo que bzip2 funcionara mejor en maquinas con caches de gran tamano. ADVERTENCIAS Los mensajes de error de E/S no son tan utiles como podrian. bzip2 intenta detectar errores de E/S y salir limpiamente, pero los detalles sobre la causa del problema a veces pueden ser enganosos. Esta pagina del manual pertenece a la version 1.0.8 de bzip2. Los datos comprimidos creados por esta version son totalmente compatibles con la anteriorversion, 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 excepcion: Solo la version 0.9.0 puede descomprimir correctamente multiples archivos concatenados. La 0.1pl2 no puede hacer esto; parara justo despues 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 mas de 512 megabytes. La version 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 limitacion, simplemente ejecutelo sin argumentos. En cualquier casi, puede crear usted mismo una version sin esta limitacion siempre que pueda recompilarlo con MaybeUInt64 definido para que sea un entero sin signo. AUTOR Julian Seward, jseward@acm.org. https://sourceware.org/bzip2/ Las ideas incluidas en bzip2 se deben (al menos) a la siguiente gente: Michael Burrows y David Wheeler (por la transformacion por ordenacion de bloques), David Wheeler (otra vez, por el codificador de Huffman), Peter Fenwick (por el modelo de programacion estructurada del bzip, original, y por muchos refinamientos), y Alistair Moffat, Radford Neal y Ian Witten (por el codificador aritmetico del bzip original). Estoy en deuda con ellos por su ayuda, su apoyo y sus consejos. Vea el manual en la distribucion sin compilar para encontrar apuntes sobre donde hallar fuentes de documentacion. Christian von Roques me animo a buscar algoritmos de ordenacion mas rapidos, para acelerar la compresion. Bela Lubkin me alento para que mejorara el funcionamiento de la compresion de los casos mas desfavorables. Donna Robinson convirtio la documentacion al formato XML. Los scripts bz* derivan de los de GNU gzip. Mucha gente envio parches, ayudo con los problemas de portabilidad, presto maquinas, aporto consejos y fue de ayuda en general. TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Salvador Gimeno Zanon y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . bzip2(1)