man/archiving_and_compression
man · Arşivleme & Sıkıştırma

$ compress

Bölüm 1 · Arşivleme & Sıkıştırma

verileri sıkıştırma ve açma

Özet

compress [-fv] [-b bitler] [dosya ...]
compress -c [-b bitler] [dosya]
uncompress [-fv] [dosya ...]
uncompress -c [dosya ...]

Açıklama

compress, uyarlamalı Lempel-Ziv kodlamasını kullanarak dosyaların boyutunu küçültür. Her dosya, sonuna .Z uzantısı eklenerek yeniden adlandırılır. .Z uzantılı bir dosya argümanı, diğer argümanlar işlendikten sonra hatalı çıkışa neden olması dışında yoksayılır. Sıkıştırma işlemi bir dosyanın boyutunu küçültmüyorsa, dosya yoksayılır.

uncompress, sıkıştırılmış dosyaları orijinal hallerine geri yükler ve .Z uzantılarını silerek dosyaları yeniden adlandırır. Bir dosya belirtiminin dosyanın .Z uzantısını içermesi gerekmez. Bir dosyanın dosya sistemindeki adında .Z uzantısı yoksa, bu dosya açılmaz ve diğer argümanlar işlendikten sonra hatalı çıkışa neden olur.

Dosyaları yeniden adlandırmak dosyaların üzerine yazılmasına neden olacaksa ve standart girdi aygıtı bir terminal ise, kullanıcıdan standart hata çıktısı üzerinde onay istenir. Onay istemek mümkün değilse veya onay alınmazsa dosyaların üzerine yazılmaz.

İzinlerin elverdiği ölçüde değiştirilme zamanı, erişim zamanı, dosya bayrakları, dosya modu, kullanıcı kimliği (UID) ve grup kimliği (GID) yeni dosyada korunur.

Hiçbir dosya belirtilmemişse veya bir dosya argümanı tek bir tire (-) ise, standart girdi sıkıştırılır veya standart çıktıya açılır. Girdi ve çıktı dosyalarından herhangi biri normal dosya değilse, boyut küçültme ve dosya üzerine yazma denetimleri yapılmaz, girdi dosyası kaldırılmaz ve girdi dosyasının öznitelikleri çıktı dosyasında korunmaz.

Seçenekler

  • -b bitler
    Kod boyutu belirtilen bit değeri ile sınırlandırılır. Bu değer 9..16 aralığında olmalıdır. Varsayılan değer 16 değeridir.

  • -c
    Sıkıştırılmış veya açılmış çıktı standart çıktıya yazılır. Hiçbir dosya değiştirilmez. -v seçeneği yoksayılır. Sonuçlar orijinalden daha büyük olacak olsa bile sıkıştırma denenir.

  • -f
    Dosyalar onay istenmeden üzerine yazılır. Ayrıca compress için, boyutları fiilen küçülmese bile dosyalar sıkıştırılır.

  • -v
    Her dosyanın yüzde kaç küçüldüğünü yazdırır. uncompress tarafından veya -c seçeneği de kullanılıyorsa yoksayılır.

Algoritma

compress, değiştirilmiş bir Lempel-Ziv algoritması kullanır. Dosyadaki ortak alt dizeler ilk olarak 257 ve üzerindeki 9 bitlik kodlarla değiştirilir. 512 koduna ulaşıldığında algoritma 10 bitlik kodlara geçer ve -b seçeneği ile belirtilen sınıra veya varsayılan sınıra ulaşılana kadar daha fazla bit kullanmaya devam eder.

Sınıra ulaşıldıktan sonra compress periyodik olarak sıkıştırma oranını denetler. Oran artıyorsa, mevcut kod sözlüğünü kullanmaya devam eder. Sıkıştırma oranı düşerse, alt dizeler tablosunu atar ve sıfırdan yeniden oluşturur. Bu, algoritmanın dosyanın bir sonraki bloğuna uyum sağlamasına olanak tanır.

Sıkıştırma sırasında belirtilen bit parametresi çıktı içinde kodlandığından ve rastgele verilerin açılması ya da sıkıştırılmış verilerin yeniden sıkıştırılması girişimlerinin önlenmesini sağlamak için sihirli bir sayı (magic number) içerdiğinden, -b seçeneği uncompress için kullanılamaz.

Elde edilen sıkıştırma miktarı; girdinin boyutuna, kod başına bit sayısına ve ortak alt dizelerin dağılımına bağlıdır. Tipik olarak, kaynak kod veya İngilizce metin gibi veriler yüzde 50-60 oranında küçülür. Sıkıştırma genel olarak Huffman kodlamasından veya uyarlamalı Huffman kodlamasından çok daha iyidir ve hesaplanması daha az zaman alır.

Dosya bir sembolik veya sabit bağlantı ise, compress bunu bağlantının işaret ettiği dosyanın sıkıştırılmış bir kopyasıyla değiştirir. Bağlantının hedef dosyası sıkıştırılmadan bırakılır.

Çıkış Durumu

compress ve uncompress araçları başarı durumunda 0, bir hata oluştuğunda ise >0 değeriyle çıkar.

compress, bir dosyayı sıkıştırma girişimi boyutunu küçültmeyecekse, -f seçeneği belirtilmemişse ve başka bir hata oluşmamışsa 2 değeriyle çıkar.

Örnekler

Tek satırlık metin içeren bir test_file dosyası oluşturur:

echo "This is a test" > test_file

10 bitlik bir kod kullanarak dosyanın boyutunu küçültmeyi dener ve çıkış durumunu gösterir:

compress -b 10 test_file
echo $?

Dosyayı sıkıştırmayı dener ve sıkıştırma yüzdesini gösterir:

compress -v test_file

Yukarıdakiyle aynı işlemi sıkıştırmaya zorlayarak yapar:

compress -f -v test_file

hello dizesini anında sıkıştırır ve açar:

echo "hello" | compress | uncompress

Ayrıca Bakınız

gunzip(1), gzexe(1), gzip(1), zcat(1), zmore(1), znew(1)

Welch, Terry A., "A Technique for High Performance Data Compression", IEEE Computer, 17:6, s. 8-19, Haziran 1984.

Standartlar

compress ve uncompress araçları IEEE Std 1003.1-2001 ("POSIX.1") standardına uygundur.

Tarihçe

compress komutu 4.3BSD ile ortaya çıkmıştır.

Hatalar

Program bağlantıları iyi yönetemez ve bağlantı yönetimi seçeneklerine sahip değildir.

Bunlardan bazıları belgelenmemiş özellikler olarak kabul edilebilir.

compress: Araç bir dosyayı boyutu küçülmeyeceği için sıkıştırmazsa ve aynı ada sahip ancak .Z uzantılı bir dosya zaten mevcutsa, belirtilen dosya gerçekten yoksayılmaz. Bunun yerine uzantılı dosyanın üzerine yazılmasını onaylamak için bir uyarıya neden olur. İşlem onaylanırsa o dosya silinir.

uncompress: Boş bir dosya sıkıştırılırsa (-f kullanılarak), ortaya çıkan .Z dosyası da boş olur. Bu doğru görünmektedir, ancak daha sonra bu dosya üzerinde uncompress kullanılırsa bir hata oluşur.

Her iki araç için de: Bir - argümanı kullanılırsa ve araç kullanıcıdan onay isterse, standart girdi kullanıcının bu onay talebine yanıtı olarak kabul edilir.

Her iki araç için de: Belirtilen dosya mevcut değilse, ancak compress için .Z uzantılı veya uncompress için uzantısız benzer adlı bir dosya mevcutsa, araç eksik dosya hakkında hemen bir hata mesajı vermeyip devam ederek kullanıcının zamanını boşa harcar. Bunun yerine, önce mevcut dosyanın üzerine yazmak için onay ister ve ardından üzerine yazmaz.