bzip2 , bunzip2 - blok sıralayan dosya sıkıştırıcı, v1.0.8
bzcat - dosyaları stdout'a açar
bzip2recover - hasarlı bzip2 dosyalarından veri kurtarır
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename
bzip2, Burrows-Wheeler blok sıralama 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ı kompresörlerin elde ettiğinden önemli ölçüde daha iyidir ve PPM istatistiksel kompresör ailesinin performansına yaklaşır.
Komut satırı seçenekleri kasıtlı olarak GNU gzip'inkilere çok benzer, ancak aynı değillerdir.
bzip2, komut satırı işaretlerine eşlik edecek bir dosya adları listesi bekler. Her dosya, kendisinin "orijinal_adı.bz2" adlı sıkıştırılmış bir sürümüyle değiştirilir. Her sıkıştırılmış dosya, karşılık gelen orijinal dosyayla aynı değiştirme tarihine, izinlere ve mümkünse sahipliğe sahiptir, böylece bu özellikler sıkıştırmayı açma zamanında doğru şekilde geri yüklenebilir. Dosya adı işleme, bu kavramlardan yoksun veya MS-DOS gibi ciddi dosya adı uzunluğu kısıtlamaları olan dosya sistemlerinde orijinal dosya adlarını, izinleri, mülkiyetleri veya tarihleri korumak için hiçbir mekanizma olmaması anlamında saftır.
bzip2 ve bunzip2 varsayılan olarak mevcut dosyaların üzerine yazmaz. Bunun olmasını istiyorsanız, -f bayrağını belirtin.
Hiçbir dosya adı belirtilmezse, bzip2 standart girdiden standart çıktıya sıkıştırır. Bu durumda, bzip2 sıkıştırılmış çıktıyı bir uçbirime yazmayı reddedecektir, çünkü bu tamamen anlaşılmaz ve dolayısıyla anlamsız olacaktır.
bunzip2 (veya bzip2 -d) belirtilen tüm dosyaları açar. bzip2 tarafından oluşturulmayan dosyalar algılanacak, yoksayılacak ve bir uyarı verilecektir. bzip2, sıkıştırılmış dosyanınkinden sıkıştırılmış dosyanın dosya adını şu şekilde tahmin etmeye çalışır:
dosyaadı.bz2, dosyaadı olur dosyaadı.bz, dosyaadı olur dosyaadı.tbz2, dosyaadı.tar olur dosyaadı.tbz, dosyaadı.tar olur, başka bir ad, herhangi bir başkaadı.out olur
Dosya tanınan sonlardan birinde bitmiyorsa, .bz2, .bz, .tbz2 veya .tbz, bzip2 orijinal dosyanın adını tahmin edemediğinden şikayet eder ve orijinal adı .out ekleyerek kullanır.
Sıkıştırmada olduğu gibi, dosya adı verilmemesi, standart girdiden standart çıktıya sıkıştırmanın açılmasına neden olur.
bunzip2, iki veya daha fazla sıkıştırılmış dosyanın birleşimi olan bir dosyayı doğru bir şekilde açacaktır. Sonuç, karşılık gelen sıkıştırılmamış dosyaların birleştirilmesidir. Birleştirilmiş sıkıştırılmış dosyaların bütünlük testi (-t) de desteklenir.
Ayrıca, -c bayrağını vererek dosyaları standart çıktıya sıkıştırabilir veya açabilirsiniz. Birden fazla dosya bu şekilde sıkıştırılabilir ve açılabilir. Ortaya çıkan çıktılar sırayla stdout'a beslenir. Birden çok dosyanın bu şekilde sıkıştırılması, birden çok sıkıştırılmış dosya gösterimi içeren bir akış oluşturur. Böyle bir akış, yalnızca bzip2 sürüm 0.9.0 veya üzeri tarafından doğru şekilde açılabilir. bzip2'nin önceki sürümleri, akıştaki ilk dosyanın sıkıştırması açıldıktan sonra duracak.
bzcat (veya bzip2 -dc) belirtilen tüm dosyaları standart çıktıya açar.
bzip2, BZIP2 ve BZIP ortam değişkenlerinden bağımsız değişkenleri bu sırayla okuyacak ve bunları komut satırından okunan herhangi bir bağımsız değişkenden önce işleyecektir. Bu, varsayılan bağımsız değişkenleri sağlamak için uygun bir yol sağlar.
Sıkıştırılmış dosya orijinalinden biraz daha büyük olsa bile sıkıştırma her zaman gerçekleştirilir. Sıkıştırma mekanizması 50 bayt civarında sabit bir ek yüke sahip olduğundan, yaklaşık yüz bayttan küçük dosyalar daha büyük olma eğilimindedir. Rastgele veriler (çoğu dosya sıkıştırıcının çıktısı dahil), bayt başına yaklaşık 8,05 bit olarak kodlanır ve yaklaşık %0,5'lik bir genişleme sağlar.
bzip2, korumanız için bir öz denetim olarak, bir dosyanın sıkıştırı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'de tespit edilemeyen hatalara karşı koruma sağlar (umarız pek olası değildir). Veri bozulmasının tespit edilmeme olasılığı mikroskobiktir ve işlenen her dosya için yaklaşık dört milyarda bir ihtimaldir. Bununla birlikte, kontrolün dekompresyon üzerine gerçekleştiğini unutmayın, bu nedenle size yalnızca bir şeylerin yanlış olduğunu söyleyebilir. Orijinal sıkıştırılmamış verileri kurtarmanıza yardımcı olamaz. Zarar görmüş dosyalardan veri kurtarmayı denemek için bzip2recover'ı kullanabilirsiniz.
Dönüş değerleri: 0 normal çıkış için, 1 çevresel sorunlar için (dosya bulunamadı, geçersiz bayraklar, G/Ç hataları, &c), 2 bozuk sıkıştırılmış dosyayı belirtmek için, 3 bzip2'nin paniğe kapılmasına neden olan dahili tutarlılık hatası için (ör. böcek).
Standart çıktıya sıkıştırın veya açın.
Zorla dekompresyon. bzip2, bunzip2 ve bzcat gerçekten aynı programdır ve hangi işlemlerin yapılacağına hangi ismin kullanıldığına göre karar verilir. . Bu işaret, söz konusu mekanizmayı geçersiz kılar ve bzip2 dosyasını sıkıştırmasını açmaya zorlar.
-d'nin tamamlayıcısı: çağrı adından bağımsız olarak sıkıştırmayı zorlar.
Belirtilen dosyaların bütünlüğünü kontrol edin, ancak sıkıştırılmış dosyaları açmayın. Bu gerçekten bir deneme dekompresyonu gerçekleştirir ve sonucu çöpe atar.
Çıktı dosyalarının üzerine yazmaya zorla. Normalde, bzip2 mevcut çıktı dosyalarının üzerine yazmaz. Ayrıca, bzip2'yi, başka türlü yapmayacağı sabit bağlantıları dosyalara ayırmaya zorlar.
bzip2 normalde doğru sihirli başlık baytlarına sahip olmayan dosyaları açmayı reddeder. Zorlanırsa (-f), ancak bu tür dosyaları değiştirilmeden geçirecektir. GNU gzip bu şekilde davranır.
Sıkıştırma veya açma sırasında girdi dosyalarını saklayın (silmeyin).
Sıkıştırma, açma ve test için bellek kullanımını azaltın. Dosyalar, blok bayt başına yalnızca 2,5 bayt gerektiren değiştirilmiş bir algoritma kullanılarak sıkıştırılmış halden çıkarılır ve test edilir. Bu, herhangi bir dosyanın, normal hızın yaklaşık yarısında da olsa, 2300k bellekte açılabileceği anlamına gelir.
Sıkıştırma sırasında -s, 200k'lik bir blok boyutu seçer, bu da sıkıştırma oranınız pahasına bellek kullanımını yaklaşık aynı rakamla sınırlar. Kısacası, makinenizin belleği azsa (8 megabayt veya daha az), her şey için -s kullanın. Aşağıdaki BELLEK YÖNETİMİNE bakın.
Gerekli olmayan uyarı mesajlarını bastırın. G/Ç hataları ve diğer kritik olaylarla ilgili mesajlar gizlenmeyecektir.
Ayrıntılı mod -- işlenen her dosya için sıkıştırma oranını gösterir. Ayrıca -v'ler ayrıntı düzeyini artırır ve birincil olarak teşhis amaçlarıyla ilgili olan pek çok bilgiyi yayar.
Yazılım sürümünü, lisans hüküm ve koşullarını görüntüleyin.
Sıkıştırırken blok boyutunu 100 k, 200 k .. 900 k olarak ayarlayın. Açılırken etkisi yoktur. Aşağıdaki BELLEK YÖNETİMİNE bakın. --fast ve --best takma adları öncelikle GNU gzip uyumluluğu içindir. Özellikle --fast, işleri önemli ölçüde hızlandırmaz. Ve --best yalnızca varsayılan davranışı seçer.
Bir tire ile başlasalar bile sonraki tüm bağımsız değişkenleri dosya adları olarak ele alır. Bu, kısa çizgi ile başlayan adlara sahip dosyaları işleyebilmeniz içindir, örneğin: bzip2 -- -myfilename.
Bu bayraklar, 0.9.5 ve sonraki sürümlerde gereksizdir. Önceki sürümlerde sıralama algoritmasının davranışı üzerinde bazı kaba kontroller sağladılar ve bu bazen yararlı oldu. 0.9.5 ve üzeri, bu işaretleri alakasız hale getiren geliştirilmiş bir algoritmaya sahiptir.
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 boyutunun sırasıyla 100.000 bayt ila 900.000 bayt (varsayılan) olduğunu belirtir. Açma zamanında, sıkıştırma için kullanılan blok boyutu, sıkıştırılmış dosyanın başlığından okunur ve ardından bunzip2, dosyanın sıkıştırmasını açmaya yetecek kadar belleği kendine ayırır. Blok boyutları sıkıştırılmış dosyalarda saklandığından, -1'den -9'a kadar olan bayrakların alakasız olduğu ve bu nedenle dekompresyon sırasında göz ardı edildiği sonucu çıkar.
Bayt cinsinden sıkıştırma ve açma gereksinimleri şu şekilde tahmin edilebilir:
Sıkıştırma: 400k + (8 x blok boyutu)
Dekompresyon: 100k + (4 x blok boyutu) veya 100k + (2,5 x blok boyutu)
Daha büyük blok boyutları, hızla azalan marjinal getiriler sağlar. Sıkıştırmanın çoğu, küçük makinelerde bzip2 kullanırken akılda tutulması gereken bir gerçek olan ilk iki veya üç yüz k blok boyutundan gelir. Sıkıştırma açma belleği gereksiniminin, blok boyutu seçimi ile sıkıştırma zamanında ayarlandığını takdir etmek de önemlidir.
Varsayılan 900k blok boyutuyla sıkıştırılmış dosyalar için, bunzip2'nin sıkıştırmasını açmak için yaklaşık 3700 kbyte gerekir. bunzip2, 4 megabaytlık bir makinedeki herhangi bir dosyanın sıkıştırmasını açmayı desteklemek için bu belleğin yaklaşık yarısını, yani yaklaşık 2300 kbaytı kullanarak sıkıştırmayı açma seçeneğine sahiptir. Dekompresyon hızı da yarıya düşer, bu nedenle bu seçeneği yalnızca gerekli olduğunda kullanmalısınız. İlgili bayrak -s'dir.
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 deneyin ve kullanın. Sıkıştırma ve açma hızı, blok boyutundan neredeyse etkilenmez.
Bir başka önemli nokta, tek bir bloğa sığan dosyalar için geçerlidir - bu, büyük bir blok boyutu kullanarak karşılaşacağınız çoğu dosya anlamına gelir. Dosya bir bloktan daha küçük olduğundan, dokunulan gerçek bellek miktarı dosyanın boyutuyla orantılıdır. Örneğin, -9 bayrağıyla 20.000 bayt uzunluğundaki bir dosyayı 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 kbyte'ına dokunur. Benzer şekilde, sıkıştırıcı 3700k tahsis edecek, ancak yalnızca 100k + 20000 * 4=180 kbyte'a dokunacak.
İşte farklı blok boyutları için maksimum bellek kullanımını özetleyen bir tablo. Ayrıca Calgary Text Compression Corpus'un 14 dosyası için toplam 3.141.622 baytlık toplam sıkıştırılmış boyut da kaydedilmiştir. Bu sütun, sıkıştırmanın blok boyutuna göre nasıl değiştiğine dair bir fikir verir. Corpus'a daha küçük dosyalar hakim olduğundan, bu rakamlar daha büyük dosyalar için daha büyük blok boyutlarının avantajını hafife alma eğilimindedir.
Sıkıştır Sıkıştır Sıkıştır Aç Sıkıştır Corpus Flag kullanım kullanım -s kullanım Boyut
-1 1200k 500k 350k 914704 -2 2000k 900k 600k 877703 -3 2800k 1300k 850k 860338 -4 3600k 1700k 1100k 846899 -5 4400k 2100k 1350 k 845160 -6 5200k 2500k 1600k 838626 -7 6100k 2900k 1850k 834096 -8 6800k 3300k 2100k 828642 -9 7600 bin 3700 bin 2350 bin 828642
bzip2, dosyaları genellikle 900kbayt uzunluğunda bloklar halinde sıkıştırır. Her blok bağımsız olarak işlenir. Bir ortam veya iletim hatası, çoklu blok .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ış gösterimi, blok sınırlarını makul bir kesinlikle bulmayı mümkün kılan 48 bitlik bir modelle sınırlandırılmıştır. Her blok ayrıca kendi 32-bit CRC'sini taşır, böylece hasarlı bloklar hasarsız olanlardan ayırt edilebilir.
bzip2recover, amacı .bz2 dosyalarındaki blokları aramak ve her bloğu kendi .bz2 dosyasına yazmak olan basit bir programdır. Daha sonra bzip2 -t kullanarak ortaya çıkan dosyaların bütünlüğünü test edebilir ve hasar görmemiş dosyaları açabilirsiniz.
bzip2recover, hasarlı dosyanın adı olan tek bir bağımsız değişken alır ve çıkarılan blokları içeren "rec00001file.bz2", "rec00002file.bz2", vb. bir dizi dosyaya yazar. Çıktı dosya adları, sonraki işlemlerde joker karakterlerin kullanılması -- örneğin, "bzip2 -dc rec*file.bz2 > recovery_data" -- dosyaları doğru sırada işleyecek şekilde tasarlanmıştır.
bzip2recover büyük .bz2 dosyalarıyla uğraşırken çok işe yarar çünkü bunlar birçok blok içerecektir. Hasarlı bir blok kurtarılamadığından, onu hasarlı tek bloklu dosyalarda kullanmak açıkça beyhudedir. Ortam veya aktarım hatalarından kaynaklanan olası veri kaybını en aza indirmek istiyorsanız, daha küçük bir blok boyutuyla sıkıştırmayı düşünebilirsiniz.
Sıkıştırmanın sıralama aşaması, dosyadaki benzer dizileri bir araya toplar. Bu nedenle, "aabaabaabaab ..." (birkaç yüz kez tekrarlanan) gibi çok uzun tekrarlanan simgeler içeren dosyalar normalden daha yavaş sıkıştırılabilir. 0.9.5 ve üzeri sürümler, bu açıdan önceki sürümlerden çok daha iyidir. En kötü durum ve ortalama durum 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 gibiydi. İsterseniz, ilerlemeyi çok ayrıntılı bir şekilde izlemek için -vvvv seçeneğini kullanabilirsiniz.
Dekompresyon hızı bu olaylardan etkilenmez.
bzip2 genellikle çalışmak için birkaç megabaytlık bellek ayırır ve ardından oldukça rastgele bir şekilde tüm belleği doldurur. Bu, hem sıkıştırma hem de sıkıştırmayı açma performansının büyük ölçüde makinenizin önbellek eksikliklerini giderebildiği hız tarafından belirlendiği anlamına gelir. Bu nedenle, hata oranını azaltmak için kodda yapılan küçük değişikliklerin orantısız şekilde büyük performans iyileştirmeleri sağladığı gözlemlenmiştir. bzip2'nin çok büyük önbelleğe sahip makinelerde en iyi performansı göstereceğini düşünüyorum.
G/Ç hata mesajları, olabilecekleri kadar yararlı değildir. bzip2, G/Ç hatalarını tespit etmek ve temiz bir şekilde çıkmak için çok uğraşır, ancak sorunun ne olduğunun ayrıntıları bazen oldukça yanıltıcı görünebilir.
Bu kılavuz sayfası, bzip2'nin 1.0.8 sürümüyle ilgilidir. Bu sürüm tarafından oluşturulan sıkıştırılmış veriler, önceki genel sürümler olan 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 ve sonraki sürümlerle tamamen ileri ve geri uyumludur, ancak şu sıkıştırılmış istisna dışında: 0.9.0 ve üzeri, sıkıştırılmış birden çok birleştirilmiş dosyayı doğru ş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 tamsayılar kullanıyordu, dolayısıyla 512 megabayttan uzun sıkıştırılmış dosyaları işleyemezlerdi. 1.0.2 ve üzeri sürümler, onları destekleyen bazı platformlarda (GNU destekli hedefler ve Windows) 64 bitlik girişler kullanır. bzip2recover'in böyle bir sınırlamayla yapılıp yapılmadığını belirlemek için onu bağımsız değişkenler olmadan çalıştırın. Her halükarda, MaybeUInt64'ü işaretsiz bir 64-bit tamsayı olarak ayarlayarak yeniden derleyebilirseniz, kendinize sınırsız bir sürüm oluşturabilirsiniz.
Julian Seward, jseward@acm.org.
https://sourceware.org/bzip2/
bzip2'de yer alan fikirler (en azından) şu kişilere aittir: Michael Burrows ve David Wheeler (blok sıralama dönüşümü için), David Wheeler (yine Huffman kodlayıcı için), Peter Fenwick ( orijinal bzip'deki 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). I yardımları, destekleri ve tavsiyeleri için çok minnettarım. Dokümantasyon 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 için 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'e dönüştürdü. bz* betikleri, GNU gzip'inkilerden türetilmiştir. Pek çok kişi yamalar gönderdi, taşınabilirlik sorunlarına yardımcı oldu, makineler ödünç verdi, tavsiyelerde bulundu ve genel olarak yardımcı oldu.