Provided by:
manpages-it_0.3.4-5_all 
NOME
bzip2, bunzip2 - compressore di file a ordinamento di blocco, v0.9.5
bzcat - decomprime i file nello stdout
bzip2recover - recupera dati da un file bzip2 danneggiato
SINTASSI
bzip2 [ -cdfkqstvzVL123456789 ] [ nomifile ... ]
bunzip2 [ -fkvsVL ] [ nomifile ... ]
bzcat [ -s ] [ nomifile ... ]
bzip2recover nomefile
DESCRIZIONE
bzip2 comprime i file usando l’algoritmo di compressione a ordinamento
di blocco (block sorting) di Burrows-Wheeler e la codifica Huffman. La
compressione è, in generale, notevolmente migliore di quella ottenuta
dai più convenzionali compressori basati su LZ77/LZ78 e si avvicina
alle prestazioni dei compressori statistici della famiglia PPM.
Le opzioni della linea di comando sono deliberatamente molto simili a
quelle del gzip GNU, ma non sono identiche.
bzip2 accetta una lista di nomi di file affiancata da opzioni. Ogni
file è rimpiazzato dalla propria versione compressa, con il nome
"nome_originale.bz2". Ogni file compresso ha la stessa data di
modifica, gli stessi permessi e, quando possibile, lo stesso
proprietario dell’originale corrispondente, in modo che queste
proprietà possano essere correttamente ripristinate al momento della
decompressione. La gestione dei nomi di file è banale, visto che non
ci sono meccanismi per preservare nomi originali dei file, permessi o
date in filesystem che non hanno questi concetti o che hanno serie
restrizioni sulla lunghezza dei nomi di file, alla MS-DOS.
bzip2 e bunzip2 normalmente non sovrascrivono i file; per fare questo
si specifichi l’opzione -f.
Se sono stati dati nomi di file, bzip2 comprime dallo standard input
nello standard output. In questo caso, bzip2 si rifiuta di scrivere
l’output compresso, che sarebbe completamente incomprensibile e quindi
inutile, sul terminale.
bunzip2 (o bzip2 -d ) decomprime tutti i file dati. I file non creati
da bzip2 saranno individuati e ignorati, mostrando un messaggio di
attenzione. bzip2 cerca di dare un nome al file decompresso creandolo
da quello compresso nel modo seguente:
nomefile.bz2 diventa nomefile
nomefile.bz diventa nomefile
nomefile.tbz2 diventa nomefile.tar
nomefile.tbz diventa nomefile.tar
qualunquenome diventa qualunquenome.out
Se il nome del file non termina in uno dei modi riconusciuti, cioè
.bz2, .bz, .tbz2 o .tbz, bzip2 si lamenta che è impossibile ricavare il
nome originale del file e quindi usa quello dato sulla linea di comando
con l’aggiunta dell’estensione .out. Come per la compressione
l’assenza dei nomi di file causa la decompressione da standard input a
standard output.
bunzip2 decomprime correttamente un file che è la concatenazione di due
o più file compressi ottenendo la concatenazione dei corrispondenti
file non compressi. È supportato anche il test di integrità (-t) dei
file compressi concatenati.
Passando l’opzione -c, si può anche comprimere o decomprimere file
nello standard output. Con questo sistema più file possono essere
compressi o decompressi e gli output risultanti sono mandati in
sequenza nello stdout. La compressione di più file in questo modo
genera uno stream contenente la rappresentazione di più file compressi.
Questo stream può essere decompresso correttamente solo dalla versione
0.9.0 o successiva di bzip2, mentre le versioni precedenti di bzip2
terminano dopo la decompressione del primo file nello stream.
bzcat (o bzip2 -dc ) decomprime tutti i file specificati nello standard
output.
bzip2 legge gli argomenti dalle variabili di ambiente BZIP2 e BZIP, in
questo ordine, e le elabora prima di qualsiasi argomento della riga di
comando; in questo modo si possono convenientemente assegnare degli
argomenti predefiniti.
La compressione è sempre effettuata, anche quando il file compresso è
leggermente più grande dell’originale. File con dimensioni inferiori a
circa un centinaio di byte tendono a diventare più grandi, visto che il
metodo di compressione tende ad utilizzare una cinquantina di byte
extra. Dati aleatori (incluso l’output di molti compressori di file)
sono codificati a circa 8.05 bit per byte, dando quindi un espansione
di circa 0.5%.
Come controllo interno di protezione, bzip2 usa CRC a 32-bit per
assicurarsi che la versione decompressa di un file sia identica
all’originale. Questo protegge contro la corruzione dei dati
compressi, e contro i bachi, non ancora scoperti, in bzip2 (si spera
rarissimi). La possibilità che non ci si accorga della corruzione di
dati è microscopica: circa una su quattro miliardi per ogni file
elaborato. Comunque, questo controllo viene fatto dopo la
decompressione, quindi può solo rivelare un errore; non può aiutare a
recuperare i dati originali non compressi. Si può usare bzip2recover
per provare a recuperare i dati da un file danneggiato.
Valori restituiti: 0 per un’uscita normale, 1 per problemi
nell’ambiente (file non trovato, opzioni non valide, errori di I/O,
ecc.), 2 per indicare un file compresso corrotto, 3 per un’incoerenza
interna (baco) che manda bzip2 in allarme.
OPZIONI
-c --stdout
Comprime o decomprime nello standard output.
-d --decompress
Forza la decompressione. bzip2, bunzip2 e bzcat sono in realtà
lo stesso programma, e la decisione su quale azione
intraprendere è fatta sulla base del nome utilizzato. Questa
opzione si sovrappone a questo meccanismo, e forza bzip2 alla
decompressione.
-z --compress
Il contrario di -d: forza la compressione, ignorando il nome con
cui è chiamato.
-t --test
Controlla l’integrità del file specificato, ma non decomprime.
In realtà viene fatta una decompressione di prova e il risultato
gettato via.
-f --force
Forza la sovrascrittura dei file di output. Normalmente, bzip2
non sovrascrive i file di output esistenti. Obbliga bzip2 a
interrompere i collegamenti fisici (hard link) ai file.
-k --keep
Mantiene (non cancella) i file di input durante la compressione
o la decompressione.
-s --small
Riduce l’uso della memoria, per la compressione, la
decompressione e il test. I file sono decompressi e testati
usando un algoritmo modificato che richiede solo 2,5 byte per
blocco di byte. Questo significa che qualsiasi file può essere
decompresso in 2300K di memoria, ma solamente alla metà della
velocità normale.
Durante la compressione, -s seleziona una dimensione di blocco
di 200K, che limita l’uso della memoria a circa la stessa cifra,
limitando il rapporto di compressione. In breve, se la macchina
ha poca memoria (8 megabyte o meno), si usi sempre -s. Vedere
sotto GESTIONE DELLA MEMORIA.
-q --quiet
Sopprime i messaggi di avvertimento non essenziali, mentre i
messaggi riguardanti gli errori di I/O e altri eventi critici
non saranno eliminati.
-v --verbose
Modo verboso: mostra il rapporto di compressione per ogni file
elaborato. Ulteriori -v incrementano il livello di verbosità,
mostrando molte informazione usate principalmente a scopi
diagnostici.
-L --license -V --version
Mostrano la versione del software, i termini e le condizioni di
licenza.
-1 a -9
Modificano la dimensione di blocco a 100 K, 200 K, .. 900 K
quando comprime, mentre non hanno effetti sulla decompressione.
Vedere sotto GESTIONE DELLA MEMORIA
-- Tratta tutti gli argomenti seguenti come nomi di file, anche se
questi iniziano con un "-". Con questo è possibile elaborare
file con nomi che iniziano con "-", per esempio: bzip2 --
-nomefile
--repetitive-fast --repetitive-best
Questi parametri sono ridondanti nelle versioni 0.9.5 e
successive, mentre precedentemente controllavano alcuni
comportamenti nell’algoritmo di ordinamento, che talvolta erano
utili. Le versioni 0.9.5 e successive hanno un algoritmo
migliorato che rende questi parametri irrilevanti.
GESTIONE DELLA MEMORIA
bzip2 comprime i grandi file in blocchi. La dimensione di blocco
influenza sia il rapporto di compressione ottenuto che la quantità di
memoria necessaria per la compressione e la decompressione. Le opzioni
da -1 a -9 specificano che la dimensione di blocco sarà rispettivamente
da 100.000 byte a 900.000 byte (il default). Al momento della
decompressione la dimensione di blocco usata per la compressione viene
letta dall’intestazione del file compresso, quindi bunzip2 alloca la
memoria necessaria per decomprimere il file. Dal fatto che la
dimensione del blocco è inserita nei file compressi, ne consegue che le
opzioni da -1 a -9 sono irrilevanti e quindi ignorate durante la
decompressione. La richiesta di memoria, in byte, per la compressione
e la decompressione può essere stimata in:
Compressione: 400K + ( 8 x dimensione blocco )
Decompressione: 100K + ( 4 x dimensione blocco ), o
100K + ( 2.5 x dimensione blocco )
Incrementi nella dimensione di blocco portano a rapide diminuizioni dei
margini di guadagno. Molta compressione viene dalla prime due o tre
centinaia di K della dimensione di blocco, un fatto da tenere presente
quando si usa bzip2 su piccole macchine. Quindi è importante notare
che la richiesta di memoria per la decompressione è fatta al momento
della compressione con la scelta della dimensione di blocco.
Per i file compressi con la dimensione di blocco predefinita di 900K,
bunzip2 richiede circa 3700 Kbyte per la decompressione. Per poter
decomprimere qualsiasi file su macchine da 4 megabyte, bunzip2 ha un
opzione per decomprimere usando approssimativamente la metà di questa
quantità di memoria, cioè 2300 Kbyte. Essendo la velocità di
decompressione dimezzata, questa opzione va usata solo in caso di
necessità. L’opzione in questione è -s.
In generale, si provi a usare la maggiore dimensione di blocco
possibile, così da massimizzare la compressione ottenuta. La velocità
di compressione e decompressione non è, teoricamente, influenzata dalla
dimensione di blocco.
Un altro punto significativo si applica ai file che sono contenuti in
un singolo blocco -- il ché, usando una grande dimensione di blocco, si
applica a molti file. La quantità di memoria reale usata è
proporzionale alla dimensione del file, quando il file è più piccolo di
un blocco. Per esempio, la compressione di un file di 20.000 byte con
l’opzione -9 causa l’allocazione da parte del compressore di circa
7600K di memoria, ma usa solamente 400K + 20000 * 8 = 560. Similmente,
il decompressore alloca 3700K ma usa solamente 100K + 20000 * 4 = 180
Kbyte.
Ecco una tabella che riassume l’uso massimo di memoria per le varie
dimensioni di blocco. Registra anche la dimensione compressa totale di
14 file del "Calgary text compression corpus" totalizzante 3.141.622
byte. Questa colonna dà alcune indicazioni di come varia la
compressione con le dimensioni di blocco evidenziando il vantaggio
della grande dimensione di blocco per grandi file, mentre il Corpus ha
soprattutto piccoli file.
Compres- Decompres- Decompres- Dimensione
Opzione sione sione ione con -s 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
RECUPERARE DATI DA FILE DANNEGGIATI
bzip2 comprime i file in blocchi, di solito lunghi 900 Kbyte. Visto che
ciascun blocco è modificato separatamente, se il supporto fisico o un
errore di trasmissione causano un danneggiamento in un file .bz2 multi-
blocco, può essere possibile recuperare i dati dai blocchi non
danneggiati nel file.
La rappresentazione compressa di ogni blocco è delimitata da un modello
a 48-bit, che dà la possibilità di trovare il limite del blocco con
ragionevole certezza. Ogni blocco contiene il proprio CRC a 32-bit,
così i blocchi danneggiati possono distinguersi da quelli non
danneggiati.
bzip2recover è un semplice programma il cui scopo è di cercare i
blocchi in un file .bz2. Si può usare bzip2 -t per controllare
l’integrità dei file risultanti e decomprimere quelli non danneggiati.
bzip2recover prende un singolo argomento, cioè il nome del file
danneggiato, e scrive alcuni file del tipo "rec0001file.bz2",
"rec0002file.bz2", ecc., contenenti i blocchi estratti. I nomi dei file
di output sono fatti in modo da poter usare metacaratteri nelle
elaborazioni sucessive -- per esempio, "bzip2 -dc rec*file.bz2 >
dati_recuperati" forma la lista dei file nell’ordine corretto.
bzip2recover è utile se usato con file .bz2 grandi, visto che questi
contengono molti blocchi. È ovviamente inutile usarlo con un file
contenente un solo blocco, a causa dell’impossibilità di recuperare un
blocco danneggiato. Quindi, se si vuole minimizzare le potenziali
perdite di dati causate dai supporti fisici o dagli errori di
trasmissione, si può comprimere con una piccola dimensione di blocco.
NOTE SULLE PRESTAZIONI
La fase di ordinamento nella compressione riunisce le stringhe simili
nel file, perciò i file contenenti simboli ripetuti in grande quantità,
come "aabaabaabaab ..." (ripetuto molte centinaia di volte) possono
essere compressi in modo più lento della norma. Le versioni 0.9.5 e
successive si comportano meglio delle precedenti versioni in questo
caso. Il rapporto tra il tempo di compressione del caso peggiore e del
caso medio è nella regione dei 10:1. Per le precedenti versioni, questo
valore era vicino a 100:1. Si può usare l’opzione -vvvvv per
monitorare i progressi con maggior dettaglio.
La velocità di decompressione non è influenzata da questo fenomeno.
bzip2 normalmente alloca alcuni megabyte di memoria per operare e
successivamente ci carica tutto sopra in un modo abbastanza casuale.
Perciò le prestazioni, sia in compressione che in decompressione, sono
largamente influenzate dalla velocità con cui la macchina serve i
"cache miss". A causa di questo, piccoli cambiamenti al codice per
ridurre il "miss rate" hanno fatto osservare sproporzionati
miglioramenti nelle prestazioni. Immagino che bzip2 funzioni meglio
sulle macchine con cache molto grandi.
AVVERTENZE
I messaggi di errore di I/O non aiutano quanto dovrebbero. bzip2 tenta
duramente di individuare gli errori di I/O e uscirne bene, ma i
dettagli sul problema verificatosi spesso non ci sono.
Questa pagina di manuale descrive la versione 0.9.5 di bzip2.
I dati compressi da questa versione sono interamente compatibili con i
precedenti rilasci pubblici, versioni 0.1pl2 e 0.9.0, con la seguente
eccezione: 0.9.0 e successive possono correttamente decomprimere file
compressi concatenati multipli. Invece 0.1pl2 non lo può fare: termina
dopo la decompressione del primo file nello stream.
L’espansione dei metacaratteri in Windows 95 e NT non funziona molto
bene.
bzip2recover usa interi a 32 bit per rappresentare la posizione dei bit
nei file compressi, perciò non si possono manipolare file più lunghi di
512 megabyte. Ciò potrebbe essere facilmente sistemato.
AUTORI
Julian Seward, jseward@acm.org.
http://www.muraroa.demon.co.uk
Le idee utilizzate da bzip2 sono merito delle seguenti persone
(almeno): Michael Burrows e David Wheeler (per la trasformazione a
ordinamento di blocco), David Wheeler (ancora, per il coder Huffman),
Peter Fenwick (per il modello di codifica strutturato nell’originale
bzip, e molti raffinamenti) e Alistair Moffat, Radford Neal e Ian
Witten (per il codificatore aritmetico nel bzip originale). Sono in
debito per il loro aiuto, supporto e consigli. Si veda il manuale
nella distribuzione dei sorgenti per collegamenti alla documentazione
dei sorgenti. Christian von Roques mi incoraggia a cercare un
algoritmo di ordinamento veloce, in modo da velocizzare la
compressione. Bela Lubkin mi incoraggia a migliorare le prestazioni
del caso-peggiore durante la compressione. Molte persone hanno mandato
pezze, aiutato con i problemi di portabilità, macchine prestate,
consigli dati e loro aiuti in generale.
bzip2(1)