Özet
compress [-fv] [-b bitler] [dosya ...]
compress -c [-b bitler] [dosya]
uncompress [-fv] [dosya ...]
uncompress -c [dosya ...]
Açıklama
compress aracı, 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ılacaktır. Sıkıştırma işlemi bir dosyanın boyutunu küçültmüyorsa, dosya yoksayılır.
uncompress aracı, 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çılmayacaktır ve diğer argümanlar işlendikten sonra hatalı çıkışa neden olacaktır.
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ı (modification time), erişim zamanı (access time), 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 aşağıdaki gibidir:
-b bitler: Kod boyutu (aşağıya bakın) 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'dır.-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ı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-cseçeneği de kullanılıyorsa yoksayılır.
compress aracı, 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. Eğer bu oran artıyorsa, compress mevcut kod sözlüğünü kullanmaya devam eder. Ancak sıkıştırma oranı düşerse, compress 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 %50-60 oranında küçülür. Sıkıştırma genel olarak Huffman kodlamasından (tarihi pack komutunda kullanıldığı gibi) veya uyarlamalı Huffman kodlamasından (tarihi compact komutunda kullanıldığı gibi) çok daha iyidir ve hesaplanması daha az zaman alır.
Dosya bir sembolik (soft) veya sabit (hard) bağlantı (link) ise, compress bunu bağlantının işaret ettiği dosyanın sıkıştırılmış bir kopyasıyla değiştirecektir. 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 aracı, 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şturun:
echo "This is a test" > test_file
10 bitlik bir kod kullanarak dosyanın boyutunu küçültmeyi deneyin ve çıkış durumunu gösterin:
$ compress -b 10 test_file
$ echo $?
2
Dosyayı sıkıştırmayı deneyin ve sıkıştırma yüzdesini gösterin:
$ compress -v test_file
test_file: file would grow; left unmodified
Yukarıdaki ile aynı ancak sıkıştırmaya zorlayarak:
$ compress -f -v test_file
test_file.Z: 79% expansion
'hello' dizesini anında sıkıştırın ve açın:
$ echo "hello" | compress | uncompress
hello
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ı (links) iyi yönetemez ve bağlantı yönetimi seçeneklerine sahip değildir.
Bunlardan bazıları belgelenmemiş özellikler olarak kabul edilebilir.
compress: Eğer 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 yukarıda belirtildiği gibi gerçekten yoksayılmaz; 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 harcayacaktır. Bunun yerine, önce mevcut dosyanın üzerine yazmak için onay ister ve ardından üzerine yazmaz.
macOS 26.4 4 Mart 2021 macOS 26.4