gzip tanpa tar? Mengapa mereka digunakan bersama?

60

Mengapa tar dan gzip hampir selalu digunakan bersama, dan bukan hanya gzip? Apakah ada manfaat dari metode itu?

Mehrdad
sumber

Jawaban:

72

TAR membuat satu file yang diarsipkan dari banyak file, tetapi tidak memampatkannya.

Detail Format

File tar adalah gabungan dari satu atau lebih file. Setiap file didahului oleh catatan header 512-byte. Data file ditulis tidak berubah kecuali bahwa panjangnya dibulatkan ke kelipatan 512 byte dan ruang ekstra diisi nol. Akhir dari arsip ditandai oleh setidaknya dua catatan tanpa diisi berurutan.

GZIP memampatkan satu file ke file tunggal lainnya, tetapi tidak membuat arsip.

Format File

... Meskipun format file-nya juga memungkinkan penggabungan beberapa aliran seperti itu (file zip hanya didekompresiasikan menjadi dua file), gzip biasanya digunakan untuk mengkompres hanya satu file. [4] Arsip terkompresi biasanya dibuat dengan mengumpulkan koleksi file ke dalam arsip tar tunggal, dan kemudian mengompresi arsip itu dengan gzip.

Matt Ball
sumber
12
Tidak ada yang namanya file "tgz". Itu adalah tar.gz. Tugas gzip adalah meng-zip atau meng-unzip kontennya (dalam hal ini, arsip tar.) Kemudian Anda membatalkan pengarsipan dengan tar. Ini adalah filosofi perpipaan Unix yang khas, dan karenanya hampir tidak unik.
luis.espinal
5
Tidak, .tar.gz tidak unik: .tar.bz2, .cpio.gz, dll. Berfungsi dengan cara yang sama.
user46971
3
@ user36310 Saya tahu apa yang Anda maksud pada prinsipnya, tetapi dalam praktiknya alat memungkinkan Anda mengekstrak satu file. tar -xzvf tarball.tar.gz single/file.txt. Di belakang layar itu perlu melakukan beberapa pekerjaan ekstra tetapi untuk penampilan itu mengekstrak satu file.
Rich Homolka
4
Jadikan "banyak pekerjaan ekstra" jika file tersebut di akhir arsip besar. Jelas, jika Anda memerlukan akses acak, zip / rar / xar / 7z / lzh / arj / cab / sit dll adalah format superior.
LaC
3
Lebih tepatnya, .tar.*arsip terkompresi selalu "solid", yaitu. terdiri dari satu aliran terkompresi. Sebuah .ziparsip di sisi lain tidak padat sekali, algoritma kompresi dimulai lagi untuk setiap file. Ini mengorbankan efisiensi kompresi untuk mempercepat akses acak. .7zarsip dapat berupa solid, non-solid atau memiliki blok padat.
Daniel B
17

Gzip / Bzip2 adalah kompresor aliran. Mereka memampatkan aliran data menjadi sesuatu yang lebih kecil. Mereka dapat digunakan pada file individual, tetapi tidak pada kelompok file sendiri.

Tar di sisi lain memiliki kemampuan untuk mengubah daftar file, dengan jalur, izin, dan informasi kepemilikan, menjadi satu aliran kontinu - dan sebaliknya.

Itu sebabnya, untuk mengarsipkan file (dan jika seseorang perlu kompresi juga), biasanya menggunakan tar + beberapa metode kompresi.

Dan
sumber
12

Tar bertugas melakukan satu dan hanya satu hal dengan baik: (tidak) pengarsipan ke dalam (dari) file arsip tunggal. Dari apa? Satu dan hanya satu hal: satu set file.

Gzip bertugas melakukan satu dan hanya satu hal dengan baik: (tidak) mengompres. Dari apa? Satu hal dan satu hal saja: satu file jenis apa pun ... dan itu termasuk file yang dibuat dengan tar.

Ini kembali ke filosofi UNIX tentang perpipaan, arsitektur "pipa dan filter" yang mendasarinya; perawatan segala sesuatu sebagai file dan tujuan arsitektur suara dari "satu-hal-tidak-satu-hal-saja-dan-tidak-itu-baik" (yang menghasilkan plug-n-play yang sangat elegan dan sederhana macam .)

Dalam kesederhanaannya, ini hampir bersifat aljabar (tujuan yang lumayan dalam desain sistem). Dan itu bukan prestasi yang mudah.

Dalam banyak hal (dan bukan tanpa kekurangannya), ini hampir merupakan puncak dalam kompabilitas, modularitas, kopling longgar, dan kohesi tinggi. Jika Anda memahami keempat ini (dan maksud saya benar - benar mengerti ), Anda mengerti, akan jelas mengapa tar dan gzip bekerja seperti itu berpasangan.

luis.espinal
sumber
1
Filosofi UNIX ini indah sekali, tapi saya amati bahwa itu gagal, menciptakan arsip yang tidak solid. (Mengekstrak satu file dari tar.gz 1-GB seharusnya tidak merepotkan, dan dari apa yang saya mengerti di sini, ZIP jauh lebih unggul daripada tar.gz ... kan?)
Mehrdad
@Mehrad - Pertama , apa itu arsip yang tidak solid? Sebagaimana dikaitkan dengan Voltaire, "Jika Anda akan berbicara dengan saya, pertama-tama Anda harus menentukan persyaratan Anda." . Kedua , ya arsitektur pipa dan filter gagal dalam kasus-kasus tertentu, sama seperti arsitektur lainnya, terlepas dari keindahannya. Itu diberikan dengan sedikit teknik, dan bukan argumen yang dibuat. Ketiga , zip lebih unggul daripada gzip dan tar, tapi bukan itu yang Anda tanyakan. Anda bertanya mengapa cara kerja zip dan tar seperti yang mereka lakukan dan jika ada keuntungan, dan Anda diberi jawaban teknis.
luis.espinal
@Mehrad - juga, saya tidak tahu masalah apa yang Anda temui ketika membuka ritsleting | untar file tar.gz 1gig. Saya sudah melakukannya berkali-kali, hingga 2GB dengan pemasangan gzip yang lebih lama (dan hingga 4GB dengan versi gzip yang lebih baru.) Jika Anda melakukannya melalui kabel atau pada NFS mount, maka ya! Anda akan mengalami masalah kinerja yang serupa seolah-olah dilakukan dengan zip biasa. Heck, saya bahkan belum diarsipkan dari pipa ke proses jarak jauh meludah input gzip ke soket. Coba itu dengan zip. Untuk setiap masalah, gunakan alat yang sesuai (baik itu tar | gz atau zip.)
luis.espinal
8

Pertama-tama, TAR tidak dibuat untuk membuat arsip file . Itu Tape ARchiver . Tugasnya adalah menulis atau memuat arsip ke / dari kaset.

The -f pilihan membuatnya menggunakan file sebagai "virtual tape", yang kemudian dapat dikompres oleh program lain. Bahkan, kompresi seperti itu juga terjadi pada tapedrives dunia nyata.

Tentu saja, filosofi menggunakan satu program untuk melakukannya dengan baik juga diperhitungkan dalam kasus ini, tetapi orang mungkin kehilangan alasan mengapa arsip TAR disusun sebagai aliran alih-alih direktori isi + konten.

p_l
sumber
3
Benar ... file ZIP meletakkan semua informasi file dalam header yang disatukan, maka semua konten file ... yang membuatnya tidak mungkin untuk menambahkan lebih banyak file ke file ZIP ... Anda harus menulis ulang seluruh file ... dengan Format TAR, tajuk untuk setiap file terpisah, sehingga Anda dapat dengan mudah menambahkan lebih banyak file tanpa menulis ulang seluruh rekaman
JoelFan
5

Secara tradisional, sistem Unix digunakan satu program untuk melakukan satu tugas per filosofi Unix : tarhanya sarana untuk paket beberapa file ke dalam satu file, awalnya untuk tape backup (maka tar, t ape ar lokio). tartidak memberikan kompresi; arsip terkompresi yang dihasilkan biasanya dikompresi dengan beberapa program lain seperti gzip, bzip2, atau xz. Di masa lalu, mereka akan menggunakan compressperintah untuk melakukan ini; algoritma kompresi yang lebih baru jauh lebih efektif daripada ini.

Pendekatan yang sangat termodulasi yang ditentukan oleh filosofi Unix berarti bahwa setiap program dapat digunakan secara individual sebagaimana mestinya, atau digabungkan untuk melakukan tugas yang lebih kompleks, termasuk pembuatan arsip terkompresi seperti dijelaskan di sini. Untuk tugas-tugas semacam ini, juga memudahkan untuk menukar alat individual sesuai kebutuhan; Anda hanya perlu mengubah program kompresi untuk menggunakan algoritma kompresi yang berbeda, tanpa harus mengganti tarutilitas itu sendiri.

Pendekatan modular ini bukannya tanpa kelemahan. Seperti disebutkan dalam komentar untuk jawaban lain, format arsip terkompresi khusus seperti .ziplebih mampu menangani ekstraksi file individu; tarball terkompresi perlu didekompresi hampir secara keseluruhan untuk mengekstraksi file di dekat akhir arsip, sementara .ziparsip memungkinkan akses acak ke isinya. (Beberapa format yang lebih baru, seperti .7z, mendukung arsip padat dan non-padat, serta blok padat dengan ukuran bervariasi dalam arsip yang lebih besar.) Penggunaan berkelanjutan tarbersama dengan utilitas kompresi terpisah adalah masalah tradisi dan kompatibilitas; juga, .7zdan .ziptidak mendukung metadata sistem file Unix seperti izin.

bwDraco
sumber