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ı reddedecektir.
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, bunzip2 ve bzcat aslı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 ve bzip2'yi sıkıştırmayı açmaya zorlar.
-z --compress -d'nin tamamlayıcısı: ç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. Normalde bzip2 mevcut çıktı dosyalarının üzerine yazmaz. Ayrıca bzip2'yi dosyalara olan sabit bağlantıları (hard link) koparmaya zorlar, aksi takdirde bunu yapmaz.
bzip2 normalde 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. GNU gzip de bu şekilde davranır.
-k --keep Sıkıştırma veya açma sırasında girdi dosyalarını tut (silme).
-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 -s kullanın. Aşağıdaki BELLEK YÖNETİMİ 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 -- işlenen her dosya için sıkıştırma oranını göster. Daha fazla -v kullanı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 (veya --fast) ile -9 (veya --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ÖNETİMİ bölümüne bakın. --fast ve --best takma adları öncelikle GNU gzip uyumluluğu içindir. Özellikle, --fast işlemleri önemli ölçüde hızlandırmaz. --best ise 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, örneğin: 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 ), veya 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 ise 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 VERİ 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 -- örneğin "bzip2 -dc rec*file.bz2 > kurtarilmis_veri" -- dosyaları doğru sırada işlemesini sağlayacak şekilde tasarlanmıştır.
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)