Hangisi daha verimli - tar veya zip sıkıştırma? Tar ve zip arasındaki fark nedir?


68

Linux ortamında çalışıyorum ve tar ve zip komutları hakkında bilgi istiyorum.

Hangisi daha verimli - tar veya zip? Ayrıca tar ve zip komutları arasındaki farkları da bilmem gerekiyor. Biri bana bunları açıklayabilir mi?

Yanıtlar:


77

tarsadece tek bir dosyayı birden fazla dosyadan çıkarır, gzipveya gibi bir sıkıştırma programını bir araya getirmedikçe sıkıştırma yapmaz bzip2( sırasıyla veya seçeneklerini tarkullanarak içinden arayabileceğiniz ). hem arşivlemeyi hem de sıkıştırmayı tek bir programda birleştirir.-z-jzip


60

katran

  • "Bir uçtan diğerine -" Tape ARchive "yazacağınızı varsayalım. (Emir yaşını gösterir ...)
  • Sıkıştırma işlemi yapmaz, ancak sonuçta elde edilen tüm akışı örneğin gzip ve bzip2'den (dahili olarak -z veya -j ile yapılır) geçirerek sıkıştırabilirsiniz.
  • Unix dosya özniteliklerini depolar : uid, gid, izinler (en çok çalıştırılabilir). Varsayılan, dağıtımınıza bağlı olabilir ve seçeneklerle değiştirilebilir.

zip

  • MSDOS niteliklerini saklar . (Arşiv, Salt Okunur, Gizli, Sistem)
  • Her dosyayı sıkıştırır, sonra arşive ekler
  • Dosyanın sonuna bir dosya tablosu ekler
  • ve önceki ikisinin bir sonucu olarak, sadece ihtiyacınız olan dosyayla ilgili kısımların okunmasına izin verir.

Zip'in dosyaları ayrı ayrı sıkıştırması, özellikle küçük birçok benzer dosyadaki sıkıştırma oranlarını etkileyecektir.

(En azından bu on yıl önce tam olarak doğruydu.)


22

Tar, Zip’den çok daha fazla meta veri korur, karşılaştırmamı görün (biraz modası geçmiş):

görüntü tanımını buraya girin

(Yakınlaştırmak için tıklayın)

Tar, testlerin% 65'ini geçtiğinde, Zip yalnızca% 17'yi geçer. Test setini github'da BSD lisansı altında hazırladım, böylece Mac'iniz varsa kendiniz deneyebilirsiniz. Linux için orada herhangi bir meta veri olup olmadığından emin değilim, bu nedenle bu testler alakalı olmayabilir.


İlginç! Bunun için +1. Ama sonra tekrar, bu büyük bir programdı. Bunu başka bir amaç için mi yazdın? Sadece merak.
CppLearner

Birkaç yıl önce üzerinde çalıştığım bir dosya yöneticisi için testler yazdım. Asla yayınlanmadı.
neoneye

1
Linux'un da meta verileri var, bunun için çalışmalı.
zeitue

14

Verimlilik farklı şekillerde ölçülebilir:

  1. İşlem ne kadar sürüyor?
  2. Ortaya çıkan dosyalar ne kadar büyük?

"Sonuçta ortaya çıkan arşivleri işlemek için araçlar ne kadar yaygın?" Gibi başka sorular da var.

Bu nedenle, örneğin, bzip2dosyalardan daha küçük dosyalar oluşturur gzip, ancak çok daha uzun sürebilir. Ayrıca, benim deneyimlerime göre gzipUnix benzeri sistemler üzerinde evrensel, ancak bzip2hala değil (çok yaygın ve genellikle kolay elde edilmekle birlikte).


3
7zip ( 7-zip.org ), CPU zamanı pahasına mükemmel sıkıştırma elde etmek için iyi bir seçenektir. Bzip2'den daha az yaygındır (bildiğim herhangi bir yere varsayılan olarak yüklenmez) ancak çoğu yere kurulumu kolaydır (çoğu Linux dağıtımı için standart depolarda bulunur ve Windows için basit bir yükleyici paketi vardır. Tar + gzip gibi - Giriş dosyalarının karşısındaki sıkıştırma penceresi, birçok küçük dosya dahil edildiğinde, zip üzerinde daha da fazla tasarruf sağlar
David Spillett

3
Verimlilik, verileri ne kadar iyi koruduğuyla da ölçülebilir, bu soruya cevabımı görün. Tar, verileri korumada zip işleminden çok daha iyidir.
neoneye

1
bir başka ölçüm kodu UNIX dışında uyumluluk olabilir. Windows zip ile gayet iyi (Windows'da yerleşik), genellikle tar.gz dosyasını shareware ile kolayca işleyebilir, ancak bzip2'nin bulunması nadirdir. Ne yazık ki Orijinal Soru bu kriterlerden bahsetmedi, bu yüzden alakalı olup olmadıklarını göremiyorum.
Rich Homolka

1
Bir zamanlar sık ​​kullanılan bazı kompresörler için gereken zamana karşı sıkıştırma oranının kapsamlı bir incelemesini yaptım ve bu zamana karşı zamana nasıl değer verdiğinize bağlı olarak en verimli olacaktı: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim

9

Wim'in belirttiği gibi, katran kendini sıkıştırmaz. Eğer tar ekleyerek sıkıştırırsanız (örneğin bir .tar.gz veya .tar.bz2 elde etmek için), tüm tar dosyasını bir seferde sıkıştırıyorsunuzdur. Buna karşılık, zip, her dosyayı ayrı ayrı sıkıştırır.

Verimlilik iş yüküne bağlıdır. Özellikle, zip tek tek dosyalara doğrudan erişmenizi sağlar. Tar ile, önce istenmeyen (sıkıştırılmış) dosyaları araştırmanız gerekir. Sıkıştırma performansı, sıkıştırdığınız şeye bağlıdır. tarile bzip2benzer dosyaların çok sayıda (örneğin bir kaynak dizin) için sık sık daha iyidir. zipHer dosya çok farklı içeriğe sahipse daha iyi olabilir.


4
... diğer yandan, içeriğe erişmeden önce tüm zip dosyasını almanız gerekir, çünkü toc en sonunda yerleştirilir. Buna karşılık, bayt geldiği kadar hızlı bir katran kaldırabilirsiniz ...
akira

6

Zip arşivleri sonunda içeriklerinin merkezi bir dizinini içerir (önceden dizini oluşturmak zorunda kalmamaktan kaçının, muhtemelen içinde ne olacağını bilmiyorsunuz). Bu, tüm arşivin paketini açmak zorunda kalmadan tek tek dosyaları hızlıca çıkarmanıza olanak tanır: Sadece arşiv dizinini okuyun ve yalnızca gerekenleri çıkarın. Bununla birlikte, bu, tüm arşivin erişilebilir olmasını ve sadece blok cihazlarda (disketler, sabit sürücüler) kullanılabilen rasgele erişim gerektirir . Ek olarak, arşiv dizini savunmasızdır: Arşiv bir nedenden dolayı kesilirse , arşivden yararlı bir şey çıkarmak için ağır sihirbazlık gerektirir .

BBS kullanımı için zip arşivleri oluşturuldu; bir dizinin içeriğini tek bir (ve sıkıştırılmış) dosyaya bir araya getirebilmek önemliydi - muhtemelen binlerce tek dosya indirmek zorunda kalmadı. Çoğu web sitesi gibi, aynı nedenlerle bugün bile indirmelerini bir araya getiriyor.

Teyp arşivleri, teyp sürücülerinde kullanılacak yedeklemeleri bir araya getirmek için tasarlandı, bu nedenle sıralı erişim için . Merkezi bir dizin yok; bunun yerine, arşiv, bir kaç blokta hangi dosyaların takip edeceğini gösteren düzenli aralıklarla başlık blokları içerir. Katran arşivleri bir baskın düştü; Eğer sadece tek bir dosya çıkarılacaksa, arşiv en baştan başlayarak istenen dosya bulunana kadar (ki en sonunda olabilir) sırayla okunur. Bunun üzerine sıkıştırma uygulanır; tar arşivleri uygulanan çeşitli sıkıştırma programlarından biri ( compress, gzip,bzip2vb.) akış kompresörleridir ve arşivin sıralı yapısını hiçbir şekilde değiştirmez. En kötü durumda, çıkartmaya başlayana kadar biraz daha fazla bloğa ihtiyacınız olacak.

Bu önemsiz bir fark gibi görünebilir, ancak aslında felsefede bir kutupsal zıttı temsil eder. Zip arşivleriyle, her zaman dosyayla faydalı bir şey yapmak için tüm dosyanın el altında bulundurulması gerekir, oysa katran arşivi bir boru hattına aktarılabilir. Büyük bir tar arşivi indirebilir ve ilk birkaç blok gelir gelmez en baştan çıkarmaya başlayabilirim (ve aradığım dosyayı alır almaz indirmeyi kesebilirim). Zip arşivi için, arşivin en sonunda yer alan arşiv dizini görünene kadar beklemem gerekiyor. Ama bir kere yapmak çok daha hızlı bir tar dosyasından olacak ondan kısmi içerikleri ayıklanması, el altında tüm dosya var.

Her iki formatın da, nerede ve nasıl kullanıldıklarına bağlı olarak, onlar için güçlü bir nokta vardır. Boru hatları (ve böylece bir işlemden diğerine veri akışı kavramı) yalnızca Unix dünyasında gerçekten var olduğu için, tar arşivlerinin ana avantajı diğer sistemlerde kayboluyor, bu yüzden Zip arşivleri burada daha popüler. Ancak katran arşivleri daha esnektir, bu yüzden ne zaman bir seçeneğim olsa onları tercih ederim.


5

Diğerinin daha önce de söylediği gibi, tar, gzip veya bzip2 gibi bir akış yorumlayıcısı ile sıkıştırılabilecek tüm dosyaların büyük bir “bloğunu” oluşturur.

Bunun dezavantajı, arşiv içindeki bir dosyaya erişmek için dosyanın tamamını açmanız gerekmesidir.

Bunun avantajı, özellikle sıkıştırılmış dosyalar çok benzer olduğunda, sıkıştırma oranının genellikle daha yüksek olmasıdır.

"Rar" gibi diğer paketleyicilerin de aynı etkiye sahip olması için "blok modu" (veya benzeri) vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.