BZIP2(1) | Kullanıcı Komutları | 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
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
* Özgün Belgenin Lisans ve Telif Hakkı bilgileri: * * This program, "bzip2", the associated library "libbzip2", and all * documentation, are copyright (C) 1996-2019 Julian R Seward. All * rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. The origin of this software must not be misrepresented; you must * not claim that you wrote the original software. If you use this * software in a product, an acknowledgment in the product * documentation would be appreciated but is not required. * * 3. Altered source versions must be plainly marked as such, and must * not be misrepresented as being the original software. * * 4. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Julian Seward, jseward@acm.org * bzip2/libbzip2 version 1.0.8 of 13 July 2019