Ö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ğer9..16aralığında olmalıdır. Varsayılan değer16değeridir.-c
Sıkıştırılmış veya açılmış çıktı standart çıktıya yazılır. Hiçbir dosya değiştirilmez.-vseç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ıcacompressiç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.uncompresstarafından veya-cseç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.