Kullanım
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename
Açıklama
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, genellikle daha geleneksel LZ77/LZ78 tabanlı
sıkıştırıcılar tarafından elde edilenden önemli ölçüde daha iyidir ve istatistiksel sıkıştırıcıların
PPM ailesinin performansına yaklaşır.
Komut satırı seçenekleri kasıtlı olarak GNU gzip seçeneklerine çok benzer, ancak tamamen aynı
değildir.
bzip2, komut satırı bayraklarına eşlik edecek bir dosya adı listesi bekler. Her dosya,
orijinal_adi.bz2 adını alarak kendisinin sıkıştırılmış bir versiyonuyla değiştirilir. Sıkıştırılmış
her dosya, karşılık gelen orijinal dosya ile aynı değişiklik tarihine, izinlere ve mümkün olduğunda
sahipliğe sahip olur; böylece dosya açma sırasında bu özellikler doğru bir şekilde geri yüklenebilir.
Dosya adı işleme, MS-DOS gibi bu kavramlardan yoksun olan veya ciddi dosya adı uzunluğu
kısıtlamalarına sahip olan dosya sistemlerinde orijinal dosya adlarını, izinlerini, sahipliklerini
veya tarihlerini korumak için bir mekanizma bulunmaması anlamında basittir.
bzip2 ve bunzip2, varsayılan olarak mevcut dosyaların üzerine yazmaz. Bunun gerçekleşmesini
istiyorsanız -f bayrağını belirtin.
Herhangi bir dosya adı belirtilmezse, bzip2 standart girdiden standart çıktıya sıkıştırma yapar. Bu
durumda bzip2, tamamen anlaşılamaz ve dolayısıyla anlamsız olacağı için sıkıştırılmış çıktıyı bir
terminale yazmayı reddeder.
bunzip2 veya bzip2 -d, belirtilen tüm dosyaların sıkıştırmasını açar. bzip2 tarafından
oluşturulmamış dosyalar tespit edilip yok sayılır ve bir uyarı verilir. bzip2, sıkıştırılmış
dosyanın adına bakarak açılacak dosyanın adını şu şekilde tahmin etmeye çalışır:
filename.bz2 filename olur
filename.bz filename olur
filename.tbz2 filename.tar olur
filename.tbz filename.tar olur
anyothername anyothername.out olur
Eğer dosya tanınan uzantılardan (.bz2, .bz, .tbz2 veya .tbz) biriyle bitmiyorsa, bzip2
orijinal dosyanın adını tahmin edemediğinden şikayet eder ve orijinal adın sonuna .out ekleyerek
kullanır.
Sıkıştırmada olduğu gibi, hiçbir dosya adı belirtilmemesi standart girdiden standart çıktıya açma işleminin yapılmasına neden olur.
bunzip2, iki veya daha fazla sıkıştırılmış dosyanın birleşiminden oluşan bir dosyayı doğru bir
şekilde açacaktır. Sonuç, karşılık gelen sıkıştırılmamış dosyaların birleşimi olur. Birleştirilmiş
sıkıştırılmış dosyaların bütünlük testi (-t) de desteklenmektedir.
Dosyaları -c bayrağını vererek standart çıktıya da sıkıştırabilir veya açabilirsiniz. Birden fazla
dosya bu şekilde sıkıştırılabilir ve açılabilir. Elde edilen çıktılar sırayla stdout'a beslenir.
Birden fazla dosyanın bu şekilde sıkıştırılması, birden fazla sıkıştırılmış dosya temsili içeren bir
akış oluşturur. Böyle bir akış, yalnızca bzip2 sürüm 0.9.0 veya sonrası tarafından doğru bir şekilde
açılabilir. bzip2'nin önceki sürümleri, akıştaki ilk dosyayı açtıktan sonra duracaktır.
bzcat veya bzip2 -dc, belirtilen tüm dosyaların sıkıştırmasını standart çıktıya açar.
bzip2, argümanları sırasıyla BZIP2 ve BZIP ortam değişkenlerinden okuyacak ve bunları komut
satırından okunan tüm argümanlardan önce işleyecektir. Bu, varsayılan argümanları sağlamak için
kullanışlı bir yol sunar.
Sıkıştırılmış dosya orijinalinden biraz daha büyük olsa bile sıkıştırma her zaman gerçekleştirilir. Yaklaşık yüz bayttan daha küçük dosyalar, sıkıştırma mekanizmasının 50 bayt civarında sabit bir ek yükü olması nedeniyle büyüme eğilimindedir. Rastgele veriler (çoğu dosya sıkıştırıcısının çıktısı dahil) bayt başına yaklaşık 8.05 bit ile kodlanır ve bu da yaklaşık %0.5'lik bir genişlemeye neden olur.
Korumak amacıyla bir oto-kontrol olarak bzip2, bir dosyanın açılmış sürümünün orijinaliyle aynı
olduğundan emin olmak için 32-bit CRC'ler kullanır. Bu, sıkıştırılmış verilerin bozulmasına ve
bzip2'deki tespit edilemeyen hatalara karşı (umarız çok düşük bir ihtimal) koruma sağlar. Veri
bozulmasının tespit edilememe olasılığı mikroskobiktir; işlenen her dosya için yaklaşık dört
milyarda bir ihtimaldir.
Ancak kontrolün sıkıştırma açılırken gerçekleştiğini unutmayın; bu nedenle size yalnızca bir şeylerin
ters gittiğini söyleyebilir. Orijinal sıkıştırılmamış verileri kurtarmanıza yardımcı olamaz. Hasarlı
dosyalardan veri kurtarmayı denemek için bzip2recover aracını kullanabilirsiniz.
Dönüş değerleri: normal bir çıkış için 0, ortamsal sorunlar için 1 (dosya bulunamadı, geçersiz
bayraklar, G/Ç hataları vb.), bozuk bir sıkıştırılmış dosyayı belirtmek için 2, bzip2'nin
paniklemesine neden olan dahili bir tutarlılık hatası (örneğin yazılım hatası) için 3.
Seçenekler
-c,--stdout
Standart çıktıya sıkıştırın veya açın.-d,--decompress
Sıkıştırma açmayı zorla.bzip2,bunzip2vebzcataslında aynı programdır ve hangi eylemlerin gerçekleştirileceğine dair karar, hangi adın kullanıldığına bağlı olarak verilir. Bu bayrak bu mekanizmayı geçersiz kılar vebzip2'yi sıkıştırmayı açmaya zorlar.-z,--compress-dseçeneğinin tamamlayıcısıdır: çağrı adından bağımsız olarak sıkıştırmayı zorlar.-t,--test
Belirtilen dosyaların bütünlüğünü kontrol et, ancak sıkıştırmalarını açma. Bu işlem aslında deneme amaçlı bir sıkıştırma açma işlemi gerçekleştirir ve sonucu çöpe atar.-f,--force
Çıktı dosyalarının üzerine yazılmasını zorla. Normaldebzip2mevcut çıktı dosyalarının üzerine yazmaz. Ayrıcabzip2'yi dosyalara olan sabit bağlantıları (hard link) koparmaya zorlar; aksi takdirde bunu yapmaz.bzip2normalde doğru sihirli başlık baytlarına sahip olmayan dosyaların sıkıştırmasını açmayı reddeder. Ancak zorlanırsa (-f), bu tür dosyaları değiştirmeden doğrudan geçirir. GNUgzipde bu şekilde davranır.-k,--keep
Sıkıştırma veya açma sırasında girdi dosyalarını tutar, yani silmez.-s,--small
Sıkıştırma, açma ve test işlemleri için bellek kullanımını azaltır. Dosyalar, blok baytı başına yalnızca 2.5 bayt gerektiren değiştirilmiş bir algoritma kullanılarak açılır ve test edilir. Bu, normal hızın yaklaşık yarısında olsa da herhangi bir dosyanın 2300k bellekte açılabileceği anlamına gelir.Sıkıştırma sırasında
-s, sıkıştırma oranınız pahasına bellek kullanımını yaklaşık aynı miktarla sınırlayan 200k'lık bir blok boyutu seçer. Kısacası, makinenizin belleği düşükse (8 megabayt veya daha az), her şey için-skullanın. Aşağıdaki Bellek Yönetimi bölümüne bakın.-q,--quiet
Gerekli olmayan uyarı mesajlarını bastır. G/Ç hataları ve diğer kritik olaylarla ilgili mesajlar bastırılmayacaktır.-v,--verbose
Ayrıntılı mod. İşlenen her dosya için sıkıştırma oranını gösterir. Daha fazla-vkullanımı ayrıntı düzeyini artırır ve esas olarak teşhis amaçlı olan birçok bilgiyi ortaya döker.-L,--license,-V,--version
Yazılım sürümünü, lisans hüküm ve koşullarını görüntüler.-1(--fast) ile-9(--best) arası
Sıkıştırma yaparken blok boyutunu 100 k, 200 k .. 900 k olarak ayarlar. Sıkıştırma açarken hiçbir etkisi yoktur. Aşağıdaki Bellek Yönetimi bölümüne bakın.--fastve--besttakma adları öncelikle GNUgzipuyumluluğu içindir. Özellikle--fastişlemleri önemli ölçüde hızlandırmaz.--bestise yalnızca varsayılan davranışı seçer.--
Sonraki tüm argümanları tire işaretiyle başlasalar bile dosya adı olarak kabul eder. Bu, adları tire ile başlayan dosyaları işlemenizi sağlar:bzip2 -- -myfilename--repetitive-fast,--repetitive-best
Bu bayraklar 0.9.5 ve üzeri sürümlerde gereksizdir. Önceki sürümlerde sıralama algoritmasının davranışı üzerinde bazen yararlı olan bazı kaba kontroller sağlıyorlardı. 0.9.5 ve üzeri sürümler, bu bayrakları işlevsiz kılan geliştirilmiş bir algoritmaya sahiptir.
Bellek Yönetimi
bzip2 büyük dosyaları bloklar halinde sıkıştırır. Blok boyutu hem elde edilen sıkıştırma oranını hem
de sıkıştırma ve açma için gereken bellek miktarını etkiler. -1'den -9'a kadar olan bayraklar,
blok boyutunu sırasıyla 100.000 bayttan 900.000 bayta (varsayılan) kadar belirtir.
Sıkıştırma açma sırasında, sıkıştırma için kullanılan blok boyutu sıkıştırılmış dosyanın başlığından
okunur ve bunzip2 ardından dosyayı açmak için kendisine tam olarak yetecek kadar bellek ayırır. Blok
boyutları sıkıştırılmış dosyalarda saklandığından, -1 ile -9 arasındaki bayraklar sıkıştırma açma
işlemiyle ilgisizdir ve bu işlem sırasında göz ardı edilir.
Bayt cinsinden sıkıştırma ve açma gereksinimleri şu şekilde tahmin edilebilir:
Sıkıştırma: 400k + (8 x blok boyutu)
Sıkıştırma açma: 100k + (4 x blok boyutu)
100k + (2.5 x blok boyutu)
Daha büyük blok boyutları hızla azalan marjinal fayda sağlar. Sıkıştırmanın büyük kısmı blok
boyutunun ilk iki veya üç yüz k'lık kısmından gelir; bu durum bzip2'yi küçük makinelerde kullanırken
akılda tutulmaya değer bir gerçektir. Sıkıştırma açma bellek gereksiniminin, sıkıştırma sırasında blok
boyutu seçimiyle belirlendiğini anlamak da önemlidir.
Varsayılan 900k blok boyutuyla sıkıştırılmış dosyalar için bunzip2, açmak için yaklaşık 3700
kilobayta ihtiyaç duyacaktır. 4 megabaytlık bir makinede herhangi bir dosyanın açılmasını desteklemek
için bunzip2, bu bellek miktarının yaklaşık yarısını, yani yaklaşık 2300 kilobayı kullanarak açma
seçeneğine sahiptir. Sıkıştırma açma hızı da yarıya iner, bu nedenle bu seçeneği yalnızca gerektiğinde
kullanmalısınız. İlgili bayrak -s'tir.
Genel olarak, elde edilen sıkıştırmayı en üst düzeye çıkardığı için bellek kısıtlamalarının izin verdiği en büyük blok boyutunu kullanmaya çalışın. Sıkıştırma ve açma hızı blok boyutundan neredeyse hiç etkilenmez.
Diğer bir önemli nokta tek bir bloğa sığan dosyalar için geçerlidir; bu, büyük bir blok boyutu kullanırken karşılaşacağınız çoğu dosya anlamına gelir. Dosya bir bloktan küçük olduğu için dokunulan gerçek bellek miktarı dosya boyutuyla orantılıdır.
Örneğin, 20.000 bayt uzunluğundaki bir dosyayı -9 bayrağıyla sıkıştırmak, sıkıştırıcının yaklaşık
7600k bellek ayırmasına neden olur, ancak bunun yalnızca 400k + 20000 * 8 = 560 kilobaytına dokunur.
Benzer şekilde, sıkıştırma açıcı 3700k bellek ayırır ancak bunun yalnızca
100k + 20000 * 4 = 180 kilobaytına dokunur.
Aşağıda farklı blok boyutları için maksimum bellek kullanımını özetleyen bir tablo bulunmaktadır. Ayrıca, toplam 3.141.622 bayt olan Calgary Text Compression Corpus'a ait 14 dosyanın toplam sıkıştırılmış boyutu da kaydedilmiştir. Bu sütun, sıkıştırmanın blok boyutuna göre nasıl değiştiği hakkında bir fikir verir. Bu rakamlar, Corpus daha küçük dosyaların ağırlığında olduğu için daha büyük dosyalar için daha büyük blok boyutlarının avantajını olduğundan az gösterme eğilimindedir.
Sıkıştırma Sıkıştırma Açma Sıkıştırma Açma Corpus
Bayrağı Kullanımı -s 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
Hasar Görmüş Dosyalardan Veri Kurtarma
bzip2 dosyaları genellikle 900 kilobayt uzunluğundaki bloklar halinde sıkıştırır. Her blok bağımsız
olarak ele alınır. Bir ortam veya iletim hatası çok bloklu bir .bz2 dosyasının hasar görmesine neden
olursa, dosyadaki hasar görmemiş bloklardan veri kurtarmak mümkün olabilir.
Her bloğun sıkıştırılmış temsili 48 bitlik bir desenle sınırlandırılmıştır; bu da blok sınırlarını makul bir kesinlikle bulmayı mümkün kılar. Her blok aynı zamanda kendi 32 bitlik CRC'sini taşır, böylece hasarlı bloklar hasarsız olanlardan ayırt edilebilir.
bzip2recover, amacı .bz2 dosyalarındaki blokları aramak ve her bir bloğu kendi .bz2 dosyasına
yazmak olan basit bir programdır. Daha sonra elde edilen dosyaların bütünlüğünü test etmek için
bzip2 -t kullanabilir ve hasarsız olanları açabilirsiniz.
bzip2recover, hasarlı dosyanın adı olan tek bir argüman alır ve çıkartılan blokları içeren
rec00001file.bz2, rec00002file.bz2 vb. şeklinde bir dizi dosya yazar. Çıktı dosya adları, sonraki
işlemlerde joker karakter kullanımının dosyaları doğru sırada işlemesini sağlayacak şekilde
tasarlanmıştır:
bzip2 -dc rec*file.bz2 > kurtarilmis_veri
bzip2recover, birçok blok içereceklerinden büyük .bz2 dosyalarıyla çalışırken son derece yararlı
olacaktır. Hasarlı tek bloklu dosyalar üzerinde kullanılması açıkça beyhudedir, çünkü hasarlı bir blok
kurtarılamaz. Ortam veya iletim hataları nedeniyle olası veri kayıplarını en aza indirmek
istiyorsanız, daha küçük bir blok boyutuyla sıkıştırmayı düşünebilirsiniz.
Performans Notları
Sıkıştırmanın sıralama aşaması, dosyadaki benzer dizgileri bir araya getirir. Bu nedenle,
aabaabaabaab ... gibi (birkaç yüz kez tekrarlanan) çok uzun tekrarlanan sembol dizileri içeren
dosyalar normalden daha yavaş sıkışabilir. 0.9.5 ve üzeri sürümler bu açıdan önceki sürümlere göre çok
daha iyi durumdadır.
En kötü durum ile ortalama sıkıştırma süresi arasındaki oran 10:1 civarındadır. Önceki sürümler için
bu rakam daha çok 100:1 civarındaydı. İsterseniz ilerlemeyi çok ayrıntılı bir şekilde izlemek için
-vvvv seçeneğini kullanabilirsiniz.
Sıkıştırma açma hızı bu durumlardan etkilenmez.
bzip2 genellikle çalışmak için birkaç megabayt bellek ayırır ve ardından oldukça rastgele bir şekilde
bu belleğin her yerine yayılır. Bu, hem sıkıştırma hem de açma için performansın büyük ölçüde
makinenizin önbellek kaçırma (cache miss) durumlarına ne kadar hızlı hizmet verebildiğiyle
belirlendiği anlamına gelir.
Bu nedenle, kaçırma oranını azaltmak için kodda yapılan küçük değişikliklerin orantısız derecede büyük
performans artışları sağladığı gözlemlenmiştir. bzip2'nin en iyi performansı çok büyük önbelleklere
sahip makinelerde göstereceğini tahmin ediyorum.
Uyarılar
G/Ç hata mesajları olabilecekleri kadar yardımcı değildir. bzip2, G/Ç hatalarını tespit etmek ve
temiz bir şekilde çıkış yapmak için çok çalışır, ancak sorunun ne olduğuna dair ayrıntılar bazen
oldukça yanıltıcı görünebilir.
Bu kılavuz sayfası bzip2'nin 1.0.8 sürümü için geçerlidir. Bu sürüm tarafından oluşturulan
sıkıştırılmış veriler; 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 ve üzeri önceki genel sürümlerle
tamamen ileri ve geri uyumludur, ancak şu istisna hariçtir: 0.9.0 ve üzeri sürümler, birleştirilmiş
birden fazla sıkıştırılmış dosyayı doğru bir şekilde açabilir. 0.1pl2 bunu yapamaz; akıştaki yalnızca
ilk dosyayı açtıktan sonra duracaktır.
1.0.2'den önceki bzip2recover sürümleri, sıkıştırılmış dosyalardaki bit konumlarını temsil etmek
için 32 bitlik tam sayılar kullanıyordu; bu nedenle 512 megabayttan daha uzun sıkıştırılmış dosyaları
işleyemiyorlardı. Sürüm 1.0.2 ve üzeri, bunları destekleyen bazı platformlarda (GNU tarafından
desteklenen hedefler ve Windows) 64 bitlik tam sayılar kullanır. bzip2recover'ın böyle bir
sınırlamayla derlenip derlenmediğini belirlemek için argümansız çalıştırın.
Her halükarda, MaybeUInt64'ü işaretsiz 64 bitlik bir tam sayı olacak şekilde yeniden
derleyebilirseniz, kendiniz için sınırsız bir sürüm oluşturabilirsiniz.
Yazar
Julian Seward, jseward@acm.org.
bzip2'de somutlaşan fikirler (en azından) şu kişilere aittir: Michael Burrows ve David Wheeler
(blok sıralama dönüşümü için), David Wheeler (tekrar, Huffman kodlayıcı için), Peter Fenwick (orijinal
bzip'teki yapılandırılmış kodlama modeli ve birçok iyileştirme için) ve Alistair Moffat, Radford
Neal ve Ian Witten (orijinal bzip'teki aritmetik kodlayıcı için).
Yardımları, destekleri ve tavsiyeleri için onlara çok borçluyum. Belgelendirme kaynaklarına yönelik
işaretçiler için kaynak dağıtımındaki kılavuza bakın. Christian von Roques, sıkıştırmayı hızlandırmak
amacıyla beni daha hızlı sıralama algoritmaları aramaya teşvik etti. Bela Lubkin, beni en kötü durum
sıkıştırma performansını iyileştirmeye teşvik etti. Donna Robinson belgeleri XML formatına dönüştürdü.
bz* betikleri, GNU gzip betiklerinden türetilmiştir. Birçok kişi yama gönderdi, taşınabilirlik
sorunlarına yardımcı oldu, makine ödünç verdi, tavsiyelerde bulundu ve genel olarak yardımcı oldu.
bzip2(1)