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
bzip2 [
-cdfkqstvzVL123456789 ] [
archivos ... ]
bzip2 [
-h|--help ]
bunzip2 [
-fkvsVL ] [
archivos ... ]
bunzip2 [
-h|--help ]
bzcat [
-s ] [
archivos ... ]
bzcat [
-h|--help ]
bzip2recover archivo
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.
- -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 2300 k
de memoria, aunque a la mitad de la velocidad normal.
Durante la compresión, -s selecciona un tamaño de bloque de
200 k, 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 anteriormente.
- -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.
- -h --help
- Muestra un mensaje de ayuda y finaliza.
- -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.
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: 400 k + ( 8 x tamaño de bloque )
Descompresión: 100 k + ( 4 x tamaño de bloque ), o
100 k + ( 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
900 k,
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
7600 k de memoria, pero solo utilice 400 k + 20000 * 8 = 560
kilobytes de ella. De forma similar, el descompresor se asignará
3700 k pero solo utilizará 100 k + 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
bzip2 comprime los archivos en bloques, normalmente de 900 kbytes.
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 toma un solo argumento, el nombre del archivo dañado,
y crea un grupo de archivos "rec0001archivo.bz2",
"rec0002archivo.bz2", etc, conteniendo 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") procesa los archivos
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.
La fase de ordenación de la compresión recoge y junta todas las
cadenas similares del archivo. Debido a esto, los archivos con series muy
largas de símbolos, tales como "aabaabaabaab ..." (repetida
varios cientos de veces) pueden comprimirse de modo extraordinariamente lento.
La versión 0.9.5 y posteriores mejoran mucho este aspecto. El tiempo
empleado entre el caso más desfavorable y un caso promedio está
entorno a 10:1 cuando en versiones anteriores estaba entorno a 100:1. Puede
monitorizar con gran precisión la ejecución con la opción
-vvvv.
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.
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.
Julian Seward,
[email protected].
https://sourceware.org/bzip2/
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.
La traducción al español de esta página del manual fue
creada por Salvador Gimeno Zanón <
[email protected]> y Marcos Fouces
<
[email protected]>
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
[email protected]