Manakah yang lebih efisien - kompresi tar atau zip? Apa perbedaan antara tar dan zip?

68

Saya bekerja di lingkungan Linux dan ingin tahu tentang perintah tar dan zip.

Mana yang lebih efisien - tar atau zip? Saya juga perlu tahu perbedaan antara perintah tar dan zip. Adakah yang bisa menjelaskannya kepada saya?

rekha_sri
sumber

Jawaban:

77

tarhanya membuat satu file dari banyak file, itu tidak melakukan kompresi kecuali jika menggabungkan program kompresi seperti gzipatau bzip2(yang dapat Anda panggil dari dalam tardengan menggunakan opsi -zatau -j, masing-masing). zipmenggabungkan pengarsipan dan kompresi dalam satu program.

Wim
sumber
60

ter

  • Diasumsikan Anda akan membaca dari satu ujung ke ujung lainnya - "Tape ARchive". (Usia perintah menunjukkan ...)
  • Tidak melakukan kompresi, tetapi Anda dapat mengompres seluruh aliran yang dihasilkan dengan memipangnya melalui mis. Gzip dan bzip2 (dilakukan secara internal dengan -z atau -j)
  • Menyimpan atribut file unix : uid, gid, izin (terutama yang dapat dieksekusi). Standarnya mungkin tergantung pada distribusi Anda, dan dapat diaktifkan dengan opsi.

zip

  • Menyimpan atribut MSDOS . (Arsip, Hanya Baca, Tersembunyi, Sistem)
  • Kompres setiap file, lalu tambahkan ke arsip
  • Termasuk tabel file di akhir file
  • dan sebagai hasil dari dua yang sebelumnya, memungkinkan hanya membaca bagian yang tepat tentang file yang Anda butuhkan.

Fakta bahwa zip mengkompres file secara terpisah akan berdampak pada rasio kompresi, terutama pada banyak file kecil yang serupa.

(Setidaknya ini benar tepat satu dekade yang lalu.)

MaHuJa
sumber
22

Tar mempertahankan lebih banyak metadata daripada Zip, lihat perbandingan saya (sedikit ketinggalan jaman):

masukkan deskripsi gambar di sini

(Klik untuk memperbesar)

Tar lulus 65% dari tes, di mana Zip hanya melewati 17%. Saya telah membuat test suite tersedia di github di bawah lisensi BSD sehingga Anda dapat mencoba sendiri jika Anda memiliki Mac. Untuk linux di sana saya tidak yakin apakah ada metadata, jadi tes ini mungkin tidak relevan.

neoneye
sumber
Menarik! +1 untuk ini. Tetapi sekali lagi, itu adalah program besar. Apakah Anda menulis ini untuk tujuan lain? Hanya penasaran.
CppLearner
Saya menulis tes untuk manajer file yang saya kerjakan beberapa tahun yang lalu. Namun tidak pernah dirilis.
neoneye
1
Linux juga memiliki metadata, jadi harus bekerja untuk itu.
zeitue
14

Efisiensi dapat diukur dengan berbagai cara:

  1. Berapa lama prosesnya?
  2. Berapa besar file yang dihasilkan?

Ada juga pertanyaan lain, seperti "Seberapa umum alat untuk memanipulasi arsip yang dihasilkan?"

Jadi, misalnya, bzip2membuat file lebih kecil daripada gzip, tetapi bisa memakan waktu lebih lama. Juga, dalam pengalaman saya gzipbersifat universal pada sistem mirip Unix, tetapi bzip2masih belum (meskipun sangat umum dan biasanya mudah didapat).

Telemakus
sumber
3
7zip ( 7-zip.org ) adalah pilihan lain yang baik untuk mendapatkan kompresi yang sangat baik dengan mengorbankan waktu CPU. Kurang umum daripada bzip2 (tidak diinstal secara default di mana saja yang saya tahu) tetapi mudah untuk menginstal di sebagian besar tempat (itu dalam repositori standar untuk sebagian besar distribusi Linux dan ada paket installer sederhana untuk Windows. Seperti tar + gzip ia membawa jendela kompresi di seluruh file input sehingga mendapatkan penghematan yang lebih besar dibandingkan zip saat memasukkan banyak file kecil
David Spillett
3
Efisiensi juga dapat diukur dengan seberapa baik data disimpan, lihat jawaban saya untuk pertanyaan ini. Tar jauh lebih baik daripada zip dalam menjaga data.
neoneye
1
satu lagi pengukuran dapat kompatibilitas di luar UNIX. Windows baik-baik saja dengan zip (bawaan Windows), biasanya dapat dengan mudah memproses tar.gz dengan shareware, tetapi bzip2 jarang ditemukan. Sayangnya, Pertanyaan Asli tidak menyebutkan kriteria ini, jadi tidak dapat melihat apakah kriteria tersebut relevan.
Rich Homolka
1
Saya pernah melakukan tinjauan menyeluruh dari rasio kompresi terhadap waktu yang diperlukan untuk beberapa kompresor umum, dan mana yang akan paling efisien tergantung pada bagaimana Anda menilai ruang versus waktu: blog.grandtrunk.net/2004/07/praktis-compressor-test
Wim
9

Seperti yang dicatat Wim, tar itu sendiri tidak bisa dikompres. Jika Anda menambahkan kompres tar (mis. Untuk mendapatkan .tar.gz atau .tar.bz2), Anda mengompres seluruh file tar sekaligus. Sebaliknya, zip mengkompres setiap file secara individual.

Efisiensi tergantung pada beban kerja. Secara khusus, zip memungkinkan Anda untuk mengakses file individual secara langsung. Dengan tar, Anda harus mencari terlebih dahulu melalui file yang tidak diinginkan (dikompresi) sebelumnya. Kinerja kompresi tergantung pada apa yang Anda kompres. tardengan bzip2sering lebih baik untuk sejumlah besar file yang serupa (misalnya direktori sumber). zipbisa lebih baik jika setiap file memiliki konten yang sangat berbeda.

Matthew Flaschen
sumber
4
... di sisi lain, Anda harus mendapatkan seluruh file zip sebelum Anda dapat mengakses konten, karena toc ditempatkan di akhir. sebaliknya, Anda dapat menguraikan tar secepat byte tiba ...
akira
6

Arsip Zip berisi direktori pusat dari isinya di akhir (kemungkinan besar untuk menghindari harus membuat direktori sebelumnya, di mana Anda belum tahu apa yang akan ada di dalamnya). Ini memungkinkan untuk mengekstrak file tunggal dengan cepat tanpa harus membongkar seluruh arsip: Cukup baca direktori arsip dan ekstrak hanya yang diperlukan. Namun, ini mengharuskan seluruh arsip dapat diakses, dan memerlukan akses acak yang hanya tersedia pada perangkat blok (floppy disk, hard drive). Selain itu, direktori arsip rentan: Jika arsip terpotong karena beberapa alasan, itu membutuhkan sihir yang giat untuk mengekstrak apa pun yang berguna dari arsip.

Arsip zip dibuat untuk penggunaan BBS, di mana penting untuk dapat menggabungkan isi direktori menjadi satu file tunggal (dan terkompresi) --- daripada harus mengunduh kemungkinan ribuan file tunggal. Sama seperti sebagian besar situs web menggabungkan unduhan mereka bahkan hari ini, untuk alasan yang sama.

Arsip tar dirancang untuk membundelkan cadangan yang akan digunakan untuk drive tape, karenanya untuk akses berurutan . Tidak ada direktori pusat; alih-alih, arsip berisi blok tajuk secara berkala yang menunjukkan file mana yang akan mengikuti dalam beberapa blok berikutnya. Arsip tar dimaksudkan untuk dibaca dalam satu gerakan; jika hanya satu file yang akan diekstraksi, arsip dibaca secara berurutan, mulai dari awal sampai file yang diminta ditemukan (yang mungkin juga di bagian paling akhir). Kompresi diterapkan di atas itu; masing-masing dari berbagai program kompresi yang diterapkan untuk arsip tar ( compress, gzip,bzip2dll.) adalah kompresor aliran dan tidak mengubah sifat berurutan arsip dalam masalah apa pun. Dalam kasus terburuk, Anda perlu sedikit lebih banyak blok sampai Anda dapat mulai mengekstraksi.

Ini mungkin terdengar seperti perbedaan sepele, tetapi pada kenyataannya merupakan kebalikan dari filosofi. Dengan arsip zip, selalu ada kebutuhan untuk memiliki seluruh file yang ada untuk melakukan sesuatu yang berguna dengannya, sedangkan arsip tar dapat dialirkan ke saluran pipa. Saya dapat mengunduh arsip tar besar dan mulai mengekstraknya langsung dari awal, segera setelah beberapa blok pertama masuk (dan mungkin mengganggu pengunduhan segera setelah saya mendapatkan file yang saya cari). Untuk arsip Zip, saya harus menunggu sampai direktori arsip muncul, yang muncul di bagian paling akhir arsip. Tapi setelah saya lakukan memiliki seluruh file pada tangan, penggalian sebagian isi dari itu akan lebih cepat dari file tar.

Kedua format memiliki satu titik yang sangat kuat untuk mereka, tergantung di mana dan bagaimana mereka digunakan. Karena jaringan pipa (dan dengan demikian gagasan streaming data dari satu proses ke proses lainnya) hanya benar-benar ada di dunia Unix, keuntungan utama arsip tar hilang pada sistem lain, itulah sebabnya arsip Zip jauh lebih populer di sana. Tetapi arsip tar lebih fleksibel, itulah sebabnya saya lebih suka mereka kapan pun saya punya pilihan.

Vucar Timnärakrul
sumber
5

Seperti yang sudah dikatakan, tar membuat "blok" besar dari semua file yang dapat dikompres dengan stream comrpessor seperti gzip atau bzip2.

Kerugiannya adalah Anda harus mendekompres seluruh file untuk mengakses satu file di dalam arsip.

Keuntungan dari ini adalah bahwa rasio kompres biasanya lebih tinggi, terutama ketika file terkompresi sangat mirip.

Packer lain seperti "rar" memiliki "mode blok" (atau serupa) untuk memiliki efek yang sama.

IanH
sumber