İSİM¶
bzip2 - blok sıralamalı dosya
sıkıştırıcı v1.0.2
bunzip2 - sıkıştırılmış dosyaları
açar
bzcat - dosyaları standart çıktıda açar
bzip2recover - zarar görmüş bzip2 dosyalarındaki verileri
kurtarır
KULLANIM¶
bzip2 [ -cdfkqstvzVL123456789 ] [ dosyalar ... ]
bunzip2 [ -fkvsVL ] [ dosyalar ... ]
bzcat [ -s ] [ dosyalar ... ]
bzip2recover dosyaismi
AÇIKLAMA¶
bzip2, Burrows-Wheeler blok sıralamalı metin
sıkıştırma algoritmasını ve Huffman
kodlamasını kullanarak dosyaları
sıkıştırır. Sıkıştırma oranı
geleneksel LZ77/LZ78 tabanlı sıkıştırma
araçlarından çok daha iyidir. PPM ailesi istatistiksel
sıkıştırıcıların performansına
oldukça yakındır.
Komut satırı seçenekleri kasıtlı olarak GNU
gzip'e oldukça benzer şekilde
yapılmıştır, fakat birebir aynı değillerdir.
bzip2, komut satırı seçeneklerine eşlik edecek dosya
isimlerinin listesini ister. Her bir dosya
sıkıştırılmış sürümü ile
değiştirilir ve ismi "orjinal_dosya.bz2" şekline
dönüştürülür. Her bir
sıkıştırılmış dosya, orjinal dosya ile
aynı izinlere, aynı düzenlenme tarihlerine ve mümkün
ise aynı iyeliklere sahiptir. Bu sayede
sıkıştırılmış dosya
açıldığı zaman orjinal dosya elde edilmiş olur.
Dosya isimlerini yönetmek işi, orjinal dosya ismini koruyamayacak,
izinler ve iyelikleri veya tarihleri kendi dosya sistemi içinde
bulunduramayacak dosya sistemlerinin (mesela MS-DOS) olduğu
düşüncesi ile yürütülmektedir. Muhtemel dosya
ismi uzunluğu kısıtlamalarını da unutmamak gerekir.
bzip2 ve
bunzip2 öntanımlı olarak, varolan
dosyanın üzerine yazmazlar. Şayet bunu yapmak isterseniz
-f seçeneğini kullanmanız gerekir.
Şayet dosya ismi belirtilmezse,
bzip2 standart girdiden standart
çıktıya sıkıştırma işlemi yapar. Bu
durumda,
bzip2 sıkıştırılmış
çıktıyı bir terminale yazmayı reddedecektir, bu
nedenle böyle bir şey yapmak tamamen anlamsız ve
amaçsız olacaktır.
bunzip2 (veya
bzip2 -d) belirtilen bütün dosyaları
açar.
bzip2 tarafından
sıkıştırılmamış dosyalar tespit edilir ve
yok sayılır, ardından bir uyarı mesajı verilir.
bzip2, sıkıştırılmış dosyadan
açılacak dosyaya aktarılacak dosya ismini şu şekilde
tespit etmeye çalışır:
dosyaismi.bz2 => dosyaismi
dosyaismi.bz => dosyaismi
dosyaismi.tbz2 => dosyaismi.tar
dosyaismi.tbz => dosyaismi.tar
başkabirisim => başkabirisim.out
Şayet dosya yukarıda belirtilen soneklerden birisine sahip
değilse,
bzip2 mızmızlanır ve orijinal dosya ismini
sonuna .out ekleyerek kullanır.
Sıkıştırma işleminde olduğu gibi, dosya ismi
belirtmeden yapılan açma işleminde standart girdiden standart
çıktıya açma işlemi yapılır.
bunzip2, iki ya da daha fazla
sıkıştırılmış dosyadan oluşan
birleşik bir dosyayı doğru bir şekilde
açacaktır. Sonuçta açılmış dosyalar
birleşik olarak elde edilir. Birleşik
sıkıştırılmış dosyaların
bütünlük sınaması yapılması (
-t)
özelliği de desteklenmektedir.
Ayrıca
-c seçeneğini belirterek standart
çıktıda dosyaları sıkıştırabilir veya
açabilirsiniz. Çoklu dosyalar bu şekilde
sıkıştırılabilir veya açılabilir.
Sonuç çıktıları standart çıktıya
peşpeşe gönderilir. Bu şekilde çoklu dosya
sıkıştırma çoklu
sıkıştırılmış dosya temsilcilerinin
bulunduğu bir akım üretir. Bu tür bir akım sadece
bzip 0.9.0 veya daha sonraki bir sürümle düzgün bir
şekilde açılabilir. Daha eski sürümler ilk
dosyayı açtıktan sonra dururlar.
bzcat (veya
bzip2 -dc) belirtilen bütün dosyaları
standart çıktıya açar.
bzip2, argümanları sırayla BZIP2 ve BZIP ortam
değişkenlerinden okurlar ve bu argümanları komut
satırı argümanlarını okumadan önce uygularlar.
Bu, öntanımlı argümanların uygulanması için
elverişli bir yol sağlar.
Sıkıştırma işlemi,
sıkıştırılmış dosya orijinalinden biraz
büyük olsa bile, mutlaka yapılır. Yüz bayttan daha
küçük dosyalar şişmanlamaya meyillidir.
Çünkü sıkıştırma algoritması ilk 50
bayta yazılacak bir sabite sahiptir. Rasgele veri (pek çok dosya
sıkıştırıcısının
çıktısı dahil) bayt başına 8.05 bitlik bir oran
ile kodlanır. Bu da %0.5lik bir genişlemeye sebep verir.
Bir özdenetim mekanizması olarak,
bzip2 32 bitlik CRC
kullanır ve açılan dosya ile orijinal
sıkıştırılmış dosyanın aynı olup
olmadığını kontrol eder. Bu tedbir
sıkıştırılmış dosyada meydana gelebilecek
bozulmalar ve
bzip2'de olması muhtemel yazılım
hatalarına karşı güvenlik sağlar. Elden
geçirilen her bir dosya için tespit edilemeyecek hata oranı 4
milyarda bir değişiklik oranının altındadır. Bu
orandan daha küçük değişiklikler mikroskobiktir ve
tespit edilemeyebilir. Bununla birlikte uyanık olmakta fayda vardır,
kontrol açma işlemi esnasında yapılır ve sadece bir
takım şeylerin yanlış olduğunu söyler. Orijinal
açılmış verileri kurtarmanıza yardımcı
olmaz. Bu durumda, verileri kurtarmak için
bzip2recover
kullanmalısınız.
Geri dönen değerler¶
Normal çıktı için 0, çevresel sorunlar için 1
(dosya bulunamaması, geçersiz seçenekler, G/Ç
hataları, vs..), sıkıştırılmış dosyada
bozukluk için 2, bzip2'nin paniklemesine sebep olan dahili bir
tutarlılık hatası için 3 (yazılım hatası).
SEÇENEKLER¶
- -a, --ascii
- Ascii metin kipi: satır sonlarını yerel
ayarlara göre dönüştürür. Bu seçenek,
sadece Unix dışı birkaç sistemde desteklenir.
Örneğin MSDOS'da sıkıştırma esnasında
CRLF'ler LF'ye çevrilir ve açma işleminde LF'ler CRLF'ye
dönüştürülür.
- -c, --stdout
- Standart çıktıda
sıkıştırılır veya açar.
- -d, --decompress
- Mutlaka açma işlemi yapılır.
bzip2, bunzip2 ve bzcat aslında aynı
yazılımdır ve yapılması gereken işlem,
kullanılan yazılım ismine göre
kararlaştırılır. Bu seçenek, bu yöntemi
yoksayar ve bzip2'yi açma işlemine zorlar.
- -z, --compress
- -d nin zıddı: hangi isim ile
çağrılırsa çağrılsın mutlaka
sıkıştırma yapılır (örneğin,
bunzip2 komutuna bu seçeneği vererek
sıkıştırma yapmasını
sağlayabilirsiniz).
- -t, --test
- Belirtilen dosya veya dosyaların
bütünlüğünü kontrol eder, gerçekte
açma işlemi yapmaz. Bu seçenek ile bir deneme
açılımı yapılmış olur ve sonuçlar
belirtilir.
- -f, --force
- Çıktı dosyasının üzerine
yazmaya zorlar. Normal olarak, bzip2 varolan bir dosyanın
üzerine yazmayacaktır. Ayrıca bu seçenek
bzip2'yi dosyalara olan sabit bağları kırmaya
zorlar, böylece bu bağlarda üzerine yazma yapılmaz.
bzip2 normalde doğru sihirli başlık baytlarına
sahip olmayan dosyaları açmayı rededecektir. Şayet
-f kullanılır ise, bu dosyaları
değiştirilmeden geçecektir. GNU gzip de bu
şekilde davranır.
- -k, --keep
- Sıkıştırma veya açma işlemi
esnasında orjinal dosyaları silmez, saklar.
- -s, --small
- Sıkıştırma, açma ve sınama
işlemleri için bellek ihtiyacını azaltır.
Dosyalar bayt bloğu başına 2.5 bayt gerektiren
değişiklik yapılmış bir algoritma ile
açılır ve sınanır. Bunun anlamı, herhangi
bir dosyanın 2300k lık bir bellek alanı içinde
açılabileceğidir ancak başarım, normal
hızın yarısına kadar düşer.
Sıkıştırma esnasında, -s seçeneği
ile 200k lık blok boyutu seçilir, bu belleği de aynı
şekilde sınırlar ve sıkıştırma
oranını artırır. Uzun lafın kısası,
makinenizin belleği 8MB'dan daha az ise -s
seçeneğini her şeyde kullanın.
Aşağıdaki BELLEK YÖNETİMİ
bölümüne bakınız.
- -q, --quiet
- Gerekli olmayan uyarılar verilmez. G/Ç ve
diğer önemli hata iletileri gizlenmez.
- -v, --verbose
- Ayrıntı kipi: işlenen her bir dosya
için sıkıştırma oranlarını
gösterir. Daha fazla -v ayrıntı oranını
artıracaktır. Teşhis amaçlı kullanıma uygun
olarak pek çok bilgi yazılım tarafından
bildirilecektir.
- -L, --license, -V,
--version
- Yazılımın sürüm, lisans,
koşul ve kurallarını görüntüler.
- -1 (veya --fast) den -9 (veya
--best) a kadar
- Sıkıştırma yaparken blok
boyutlarını 100k, 200k, .., 900k şeklinde ayarlar.
Çözme işleminde bir etkisi yoktur. Aşağıdaki
BELLEK YÖNETİMİ bölümüne
bakınız. --fast ve --best seçenek isimleri
GNU gzip uyumluluğunu sağlamak içindir.
Açıkçası, --fast gözle
görülür bir hız artışı sağlamaz ve
--best sadece öntanımlı değerlerin
seçilmesini sağlar.
- --
- Ardından belirtilen bütün
argümanları dosya isimleri olarak kabul eder. Bu
argümanların tek çizgi ile başlamış
olmaları bile önemli değildir. Böylece tek çizgi
ile başlayan dosya isimlerini kullanabilirsiniz. Örneğin:
bzip2 -- -benim_dosyam.
- --repetitive-fast, --repetitive-best
- Bu seçenekler sürüm 0.9.5 ve üzerinde
gereksizdir. Daha eski sürümlerde, bazı kaba kontrollerin
yapılmasını sağlamaya yönelik seçeneklerdir.
Bazen faydalı olabilmekte idi. 0.9.5 ve üstü
sürümler bu ayarların yapılmasına gerek
bırakmayan daha iyi algoritmalar kullanmaktadırlar.
BELLEK YÖNETİMݶ
bzip2 büyük dosyaları bloklar halinde
sıkıştırır. Blok boyutları, hem
sıkıştırma oranını, hem de
sıkıştırma/açma için gereken bellek
miktarını etkiler.
-1 den
-9 a kadarki seçenekler
ile istenen blok boyutlarını 100.000 bayttan 900.000 bayta
(varsayılan değer budur) kadar tanımlamasını
sağlar. Açma işlemi sırasında,
sıkıştırılmış dosyanın baş
kısmından sıkıştırma esnasında
kullanılan blok boyutu okunur ve daha sonra
bunzip2 kendisi
için gerekli olan bellek alanını ayırır ve oraya
yerleşir. Sıkıştırma blok boyutları
sıkıştırılmış dosya içinde
saklandığı için,
-1 den
-9 a kadar olan
seçenekler açma işlemi esnasında geçersizdir.
Şayet bu seçenekleri belirtirseniz, program bunları
gözardı edecektir.
Sıkıştırma ve açma gereksinimleri, bayt cinsinden,
yaklaşık olarak:
Sıkıştırma: 400k + ( 8 x blok boyu )
Açma: 100k + ( 4 x blok boyu ) veya
100k + ( 2.5 x blok boyu )
Daha büyük blok boyutları hızlı bir şekilde azalan
sınıra yakın dönüşler verir.
Sıkıştırmanın pek çoğu, blok boyutunun ilk
iki veya üç yüz k lık kısmından elde edilir. Bu
kuralı, küçük makinelerde
bzip2 kullanırken
aklınızdan çıkarmayın. Ayrıca
aklınızdan çıkarmamanız gereken diğer bir
noktada, açma sırasındaki bellek gereksinimlerinizin,
sıkıştırma sırasında
kullandığınız blok boyutları ile birebir alakalı
olduğudur.
900k lık öntanımlı blok boyutu ile
sıkıştırılan dosyalar için,
bunzip2
açma işlemi sırasında 3700 kB lık belleğe
ihtiyaç duyacaktır. 4 MB lık belleğe sahip bir makinede
herhangi bir dosyayı açmak için,
bunzip2, ihtiyaç
duyulan bellek miktarının yarısı ile (takriben 2300KB)
açma işlemini gerçekleştirecek bir argümana sahiptir.
Bu argümanın kullanılması açma hızını
da yarı yarıya düşürecektir. Çok gerekli
olmadıkça bu seçeneği (
-s) kullanmayın.
(*Ç.N: günümüzde kullanılan makineler için bu
seçenek oldukça nostaljik görünebilir ama test ve
eğitim amaçlı oldukça düşük özeliklere
sahip ikinci veya üçüncü makineleri olanlar bu
seçeneğin değerini anlayacaktır. P233 makinede 16 MB
edoram ile harikalar :-) yaratıyor.)
Genel kural olarak, bellek sınırlarınız elverdiği
sürece, mümkün olan en büyük blokları
kullanın. Böylece azami sıkıştırma elde edilir.
Sıkıştırma ya da açma hızının
aslında blok boyutu ile bir ilgisi yoktur.
Diğer bir önemli nokta da dosyalara tek bir bloğa
sığacak dosyalara yapılan işlemdir. Aslında
karşılaşılan pek çok dosya bir bloktan
küçüktür. Dosya bir bloktan küçük
olduğundan, gerçekte kullanılan bellek miktarı normalde
gerekenden küçük olur. Örneğin: 20.000 baytlık
bir dosyayı
-9 seçeneği ile
sıkıştırmak,
sıkıştırıcının 7600k belleğe
ihtiyaç duymasına sebep olacaktır ama gerçekte sadece
400k+20000*8=560kB bellek kullanılacaktır. Aynı şekilde
açma işlemi de 3700k lık bir bellek ayıracak ama sadece
100k+20000*4=180kB lık bir alanı kullanacaktır.
Aşağıda değişik blok boyutlarının bellek
kullanımını gösteren bir tablo bulacaksınız.
Ayrıca Calgary Text Compression Corpus'da (Calgary Metin
Sıkıştırma Külliyatı) 14 dosyalık
sıkıştırılmış toplam boyut olarak 3.141.622
bayt kayıtlıdır. Aşağıdaki sütunlar, blok
boyutu ile sıkıştırma arasındaki ilgi hakkında
bir fikir verecektir. Büyük dosyalar için büyük blok
boyutlarını kullanmak daha avantajlıdır.
Çünkü Külliyat daha küçük dosyalar
üzerine kuruludur.
Sıkıştırma Açma -s ile açma Külliyat
Seçenek kullanımı kullanımı kullanımı boyutu
-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
HASARLI DOSYADAN VERİ KURTARMA¶
bzip2 dosyaları genellikle 900k lık bloklar halinde
sıkıştırır. Her bir blok birbirinden
bağımsız olarak ele alınır. Bir aygıt ya da
aktarım hatası pek çok
.bz2 bloğunun hasar
görmesine sebep olursa, zarar görmemiş bloklardaki verileri
kurtarmak mümkün olabilir.
Sıkıştırılmış her bir blok 48 bitlik bir
şablon ile temsil edilir. Böylece blok
sınırlarını kesin olarak bulmak mümkün olabilir.
Ayrıca her bir blok kendi 32 bitlik CRC'sini bulundurur, böylece
bozuk bloklar sağlam olanlardan ayırt edilebilir.
bzip2recover, basitçe,
.bz2 dosyaların içindeki
blokları tarayan bir yazılımdır. Buradaki her bir
taranmış bloğu kendi
.bz2 dosyasına aktarır.
Sonuçların bütünlüğünü kontrol etmek
için
bzip2 -t komutunu kullanabilirsiniz. Ardından
bozulmamış verileri açabilirsiniz.
bzip2recover sadece hasarlı dosya ismini argüman olarak
alır ve kurtardığı blokları
"rec00001file.bz2", "rec00002file.bz2" şeklinde
yazar. Bu isim numaralandırması sonradan yapılacak
işlemlerdeki simgelemlerin kullanımı içindir.
Örneğin,
bzip2 -dc rec*file.bz2 > kurtarılan_veri
komutu dosyaları doğru sıralama ile üretir.
bzip2recover daha çok büyük
.bz2 dosyaları
için faydalıdır çünkü bunlar daha çok blok
içerirler. Tek bloktan oluşmuş hasarlı bir dosya ile bu
yazılımı kullanmanın hiçbir anlamı yoktur,
çünkü bozuk blok kurtarılamaz. Şayet herhangi bir
hasar durumunda zararınızı en azda tutmak istiyorsanız,
daha küçük blok boyutları kullanmanız
akıllıca olacaktır.
BAŞARIM HAKKINDA¶
Sıkıştırmanın sınıflandırma
aşaması, birbirine benzer dizgeleri bir araya getirmektir. Bu
nedenle tekrarlanan sembollerden oluşmuş dosyaların
sıkıştırması (aabaabaabaab ... gibi) daha uzun
tutabilir. Sürüm 0.9.5 ve üzerindekilerde başarım
daha iyidir. En kötü durum ile ortalama durum
sıkıştırma zamanı arasındaki oran 10:1
civarıdır. Daha önceki sürümlerde bu durum 100:1
gibiydi. İsterseniz sürecin bütün
ayrıntılarını görebilmek için
-vvv
seçeneğini kullanabilirsiniz.
Açma hızı bu durumdan bağımsızdır.
bzip2 genellikle işlem yapmak için, çok MB lı bellek
alanları ayırır ve daha sonra tarafsız ve rasgele bir
şekilde saldırır. Bunun anlamı, açma ve
sıkıştırma performanslarının makinenizin
önbelleğine erişim süresi ile alakalı olduğudur.
Önbelleğe erişim kayıplarını
düşürecek küçük kod değişiklikleri
büyük performans artışları getirebilir. Çok
büyük önbelleklere sahip makinelerde
bzip2 çok
yüksek başarım göstermektedir.
YETERSİZLİKLER¶
G/Ç hata iletileri olmaları gerektiği kadar faydalı
değildiler.
bzip2 G/Ç hatalarını tespit etmek ve
temiz bir şekilde çıkmak için oldukça ter döker
ama bazen sorunun ayrıntıları gözden kaçabilmektedir.
Bu kılavuz sayfası
bzip2'nin 1.0.2 sürümüne
aittir. Bu sürüm ile
sıkıştırılmış veriler geçmiş
sürümler ile tamamen uyumludur (sürüm 0.1pl2, 0.9.0,
0.9.5, 1.0.0 ve 1.0.1 ile), tek istisna 0.9.0 ve üzeri sürümler
çoklu dosya sıkıştırmaları düzgünce
açabilirler, 0.1p12 bunu yapamaz, ilk dosyayı açtıktan
sonra duracak ve akımın gerisini getirmeyecektir.
bzip2recover sürümleri 1.0.2 den önceki
sürümlere göredir.
Sıkıştırılmış dosya içindeki bit
konumlarını belirtmek için 32 bitlik tamsayılar
kullanırlar ve bu yüzden 512 MB'den daha büyük
sıkıştırılmış dosyalar elde edilemezler.
Sürüm 1.0.2 ve üzeri 64 bitlik tam sayılar
kullanırlar ve GNU ile Windows platformlarını desteklerler. Bu
tip bir sınır ile kurulup kurulmadığını anlamak
için
bzip2recover'ı argümansız
çalıştırın. Her halükarda, bu
sınırı ortadan kaldırmak mümkündür.
Şayet yazılımı MaybeUInt64 ile yeniden derleyebilirseniz,
işaretsiz 64 bitlik tamsayı ayarlanmış
olacağından bu sınır ortadan kalkmış olur.
YAZAN¶
Julian Seward, <jseward (at) acm.org> tarafından
yazılmıştır.
http://sources.redhat.com/bzip2
bzip2'deki fikirlerin sahipleri şunlardır (en azından):
Michael Burrows ve David Wheeler (blok sıralamalı
dönüşüm için), David Wheeler (tekrar, Huffman
kodlayıcısı), Peter Fenwick (orijinal bzip'teki yapısal
kodlama modeli ve pek çok tasfiye için) ve Alistair Moffat, Radford
Neal ve Ian Witten (orijinal bzip'teki aritmetik kodlayıcı
için). Onlara yardımları, destek ve tavsiyeleri için
şükran borçluyum. Belgeler için kaynak kod paketine
bakınız. Christian von Roques, daha hızlı sıralama
algoritması için beni cesaretlendirdi ve böylece daha
hızlı bir sıkıştırma elde edebildik. Bela
Lubkin, en kötü durum sıkıştırması
için cesaret verdi.
bz* betikleri GNU
gzip'inkilerden
türetildi. Bir çok kimse de, yamalar gönderdi,
taşınabilirlik sorunlarında yardımcı oldu,
tavsiyelerde bulundu; bunlar çoğunlukla faydalı oldu.
ÇEVİREN¶
Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004