BZIP2(1)

İSİM
bzip2 - küme sıralamalı dosya sıkıştırıcı
bunzip2 - sıkıştırılmış dosyaları açar
bzcat - sıkıştırılmış 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
    dosya

AÇIKLAMA
bzip2, Burrows-Wheeler küme 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 başarımı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ğildir.

bzip2, komut satırı seçeneklerine eşlik edecek dosya isimlerinin listesini ister. Her dosya sıkıştırılmış sürümü ile değiştirilir ve ismi "özgün_dosya.bz2" şekline dönüştürülür. Her sıkıştırılmış dosya, özgün 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 özgün dosya elde edilmiş olur. Dosya isimlerinin yönetimi, özgün 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. Bunu yapmak isterseniz -f seçeneğini kullanmanız gerekir.

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ı uçbirime 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ın sıkıştırmasını açar. bzip2 tarafından sıkıştırılmamış dosyalar saptanıp yok sayılır, ardından bir uyarı verilir. bzip2, sıkıştırılmış dosyadan açılacak dosyaya aktarılacak dosya ismini şu şekilde saptamaya çalışır:

    dosyaismi.bz2   =>    dosyaismi
    dosyaismi.bz    =>    dosyaismi
    dosyaismi.tbz2  =>    dosyaismi.tar
    dosyaismi.tbz   =>    dosyaismi.tar
    başkabirisim    =>    başkabirisim.out

Dosya .bz2, .bz, .tbz2, .tbz veya .bzip2 soneklerinden birine sahip değilse, bzip2 özgün dosya ismini saptayamamaktan yakınır ve özgün 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ış dosyalarda 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çlar standart çıktıya peşpeşe gönderilir. Bu şekilde çoklu dosya sıkıştırma çok sayıda sıkıştırılmış dosya tanıtıcısının bulunduğu bir akım üretir. Bu tür bir akım sadece bzip2 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 durur.

bzcat (veya bzip2 -dc) belirtilen bütün dosyaları standart çıktıya açar.

bzip2, girdileri sırayla BZIP2 ve BZIP ortam değişkenlerinden okur ve bu girdileri komut satırı girdilerini okumadan önce uygular. Bu, öntanımlı girdilerin uygulanması için elverişli bir yol sağlar.

Sıkıştırma işlemi, sıkıştırılmış dosya özgün dosyadan biraz büyük olsa bile, mutlaka yapılır. Yüz bayttan 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 yaklaşık binde 5 genişlemeye sebep olur.

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ığına bakar. Bu tedbir sıkıştırılmış dosyada oluşabilecek bozulmalar ve bzip2’de olması olası yazılım hatalarına karşı güvenlik sağlar. Elden geçirilen her dosya için saptanamayabilecek hata oranı mikroskobiktir ve 4 milyarda birin altındadır. Bununla birlikte uyanık olmakta fayda vardır, sınama sıkıştırma açılırken yapılır ve sadece bir takım şeylerin yanlış olduğunu söyler. Sıkıştırılmamış özgün verileri kurtarmanıza yardımı olmaz. Bu durumda, verileri kurtarmak için bzip2recover kullanmalısınız.

  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
-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 komut 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 seçeneğini zıddı: hangi komut isminin kullanıldığına bakmaksızı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ü sınar, 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. -f seçeneği kullanılırsa, 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 özgün dosyaları silmez, saklar.

-s, --small
    Sıkıştırma, açma ve sınama işlemleri için bellek ihtiyacını azaltır. Dosyalar küme baytı 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 küme 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/Ç hataları ve diğer önemli hata iletileri gizlenmez.

-v, --verbose
    Ayrıntı kipi: İşlenen her 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)’e kadar
    Sıkıştırma yaparken küme 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 girdileri dosya isimleri olarak kabul eder. Bu girdilerin 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 sıanamaların yapılmasını sağlamaya yönelik seçeneklerdir. Bazen faydalı olabiliyordu. 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ı kümeler halinde sıkıştırır. Küme 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 kadar olan seçenekler ile istenen küme boyutlarının 100.000 bayttan 900.000 bayta (varsayılan değer budur) kadar tanımlanması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 küme 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 küme 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. Bu seçenekleri belirtirseniz, bunlar yok sayılacaktır.

Sıkıştırma ve açma gereksinimleri, bayt cinsinden, yaklaşık olarak:

    Sıkıştırma:   400k + ( 8 x küme boyu )

          Açma:   100k + ( 4 x küme boyu ) veya
                  100k + ( 2.5 x küme boyu )

Daha büyük küme boyutları hızlı bir şekilde azalan sınıra yakın dönüşler verir. Sıkıştırmanın pek çoğu, küme 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 akıldan çıkarılmaması gereken diğer bir nokta da, açma sırasındaki bellek gereksinimlerinin, sıkıştırma sırasında kullanılan küme boyutları ile birebir alakalı olduğudur.

900k’lık öntanımlı küme boyutu ile sıkıştırılan dosyalar için, bunzip2 açma işlemi sırasında 3700 kB belleğe ihtiyaç duyacaktır. 4 MB 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 seçeneğe sahiptir. Bu seçeneğin 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.

Genel kural olarak, bellek sınırlarınız elverdiği sürece, mümkün olan en büyük kümeleri 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 küme boyutu ile bir ilgisi yoktur.

Diğer bir önemli nokta da tek bir kümeye sığacak dosyalara yapılan işlemdir. Aslında karşılaşılan pek çok dosya bir kümeden küçüktür. Dosya bir kümeden 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ınan 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 küme 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, küme boyutu ile sıkıştırma arasındaki ilgi hakkında bir fikir verecektir. Büyük dosyalar için büyük küme boyutlarını kullanmak daha iyidir. Çü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 kümeler halinde sıkıştırır. Her bir küme birbirinden bağımsız olarak ele alınır. Bir aygıt ya da aktarım hatası pek çok .bz2 kümesinin hasar görmesine sebep olursa, zarar görmemiş kümelerdeki verileri kurtarmak mümkün olabilir.

Sıkıştırılmış her bir küme 48 bitlik bir şablon ile temsil edilir. Böylece küme sınırlarını kesin olarak bulmak mümkün olabilir. Ayrıca her bir küme kendi 32 bitlik CRC’sini bulundurur, böylece bozuk kümeler sağlam olanlardan ayırt edilebilir.

bzip2recover, basitçe, .bz2 dosyaların içindeki kümeleri tarayan bir yazılımdır. Buradaki taranmış her küme kendi .bz2 dosyasına aktarılır. Sonuçların bütünlüğünü sınamak için bzip2 -t komutunu kullanabilirsiniz. Ardından bozulmamış verileri açabilirsiniz.

bzip2recover girdi olarak sadece hasarlı dosya ismini alır ve kurtardığı kümeleri "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 küme içerirler. Tek kümeden oluşmuş hasarlı bir dosya ile bu yazılımı kullanmanın hiçbir anlamı yoktur, çünkü bozuk küme kurtarılamaz. Şayet herhangi bir hasar durumunda zararınızı en azda tutmak istiyorsanız, daha küçük küme 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 simgelerden oluşmuş dosyaların sıkıştırması (aabaabaabaab ... gibi) daha uzun sürebilir. 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 başarımları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 başarım 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ğildir. 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.8 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, 1.0.1, 1.0.2 ve üstü ile). İstisnalar: 0.9.0 ve üzeri sürümler çoklu dosya sıkıştırmalarını düzgünce açabilir, 0.1p12 bunu yapamaz, ilk dosyayı açtıktan sonra duracak ve akımın gerisini getirmeyecektir.

bzip2recover 1.0.2’den önceki sürümler sıkıştırılmış dosya içindeki bit konumlarını belirtmek için 32 bitlik tamsayılar kullanır ve bu yüzden 512 MB’den daha büyük sıkıştırılmış dosyalar elde edilemez. Sürüm 1.0.2 ve üzeri 64 bitlik tamsayılar kullanır ve GNU ile Windows platformlarını desteklerler. Böyle bir sınır ile kurulup kurulmadığını anlamak için bzip2recover’ı komut satırı girdileri olmadan çalıştırılır. Yine de, bu sınırı ortadan kaldırmak mümkündür. 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 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 (küme sıralamalı dönüşüm için), David Wheeler (tekrar, Huffman kodlayıcısı), Peter Fenwick (özgün bzip’teki yapısal kodlama modeli ve pek çok tasfiye için) ve Alistair Moffat, Radford Neal ve Ian Witten (özgün 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. Dona Robinson belgeleri XML’e dönüştürdü. 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
© 2004 Yalçın Kolukısa
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri yapmak için https://github.com/TLBP/manpages-tr/issues adresinde "New Issue" düğmesine tıklayıp yeni bir konu açınız ve isteğinizi belirtiniz.