Mengapa orang menggunakan tarball?

91

Sebagai pengembang Windows, mungkin saya melewatkan sesuatu yang berbau budaya di komunitas Linux, tetapi itu selalu membuat saya bingung.

Saat mengunduh sesuatu, file tersebut pertama kali dimasukkan ke dalam .tararsip kemudian di- zip . Mengapa proses dua langkah? Tidak zipping mencapai file pengelompokan? Apakah ada manfaat lain yang tidak saya sadari?

Brian Sullivan
sumber
3
Biasanya Anda hanya menggabungkan kompresi dan pengelompokan file menjadi satu perintah. tar -zcf file.tar.gz beberapa nama file
Juha Syrjälä
1
Tidak ada yang menyebutkan bahwa mentransfer 1000000 file dengan ukuran 1 byte lebih mahal daripada mentransfer 1 file dengan ukuran 1000000 byte.
Milo LaMar

Jawaban:

137

bzipdan gzipmengerjakan satu file, bukan grup file. Biasa tua zip(dan pkzip) beroperasi pada kelompok file dan memiliki konsep arsip built-in.

Filosofi * nix adalah salah satu alat kecil yang melakukan pekerjaan tertentu dengan sangat baik dan dapat digabungkan bersama. Itulah mengapa ada dua alat di sini yang memiliki tugas khusus, dan dirancang agar cocok satu sama lain. Hal ini juga berarti Anda dapat menggunakan tar ke file kelompok dan kemudian Anda memiliki pilihan alat kompresi ( bzip, gzip, dll).

Stewart Johnson
sumber
2
Menjawab lebih cepat, dan sedikit lebih baik daripada yang saya lakukan - kira saya akan kembali bekerja!
Harper Shelby
9
Saya mengalahkan Anda dengan 4 menit, dan itu adalah keabadian dalam waktu stack overflow. :-)
Stewart Johnson
1
Perlu dicatat bahwa tar dan gzip berguna masing-masing karena itulah mereka dipisahkan. Dengan beberapa penggunaan pipa yang cerdik, saya pernah memindahkan folder dari satu komputer ke komputer lain dengan memasang tar, zip, dan piping melalui SSH, lalu membuka ritsleting dan melepaskannya ke tujuan. Satu perintah, tidak ada file temp.
pemimpin
1
Anda juga bisa mengatakan bahwa mereka tetap dengan apa yang telah terbukti bekerja dengan baik, daripada mengubah hal-hal dan merusak kompatibilitas. .tar.gz dapat dilakukan dalam satu langkah apa pun seperti yang disebut alat dan teknik modern (Harap Daftar WinZip).
JeeBee
2
Saya tidak percaya bahwa tidak ada yang mengedit pertanyaan, atau meninggalkan komentar yang menyebutkan (imo) inti dari penggunaan tararsip: Dukungan izin sistem file Linux . Apa yang akan terjadi jika Anda mengunduh paket Debian, manajer paket Anda menginstalnya, tetapi tidak ada file yang dapat dieksekusi yang dapat dieksekusi? Itulah alasan sebenarnya mengapa semua orang menggunakan tarball ...;)
JamesTheAwesomeDude
29

Perbedaan penting terletak pada sifat kedua jenis arsip tersebut.

File TAR lebih dari sekadar rangkaian konten file dengan beberapa header, sedangkan gzip dan bzip2 adalah kompresor aliran yang, dalam tarball, diterapkan ke seluruh penggabungan.

File ZIP adalah rangkaian file yang dikompresi secara individual, dengan beberapa header. Sebenarnya, algoritme DEFLATE digunakan oleh zip dan gzip, dan dengan penyesuaian biner yang sesuai, Anda dapat mengambil muatan aliran gzip dan memasukkannya ke dalam file zip dengan entri header dan kamus yang sesuai.

Ini berarti bahwa dua jenis arsip yang berbeda memiliki keuntungan yang berbeda. Untuk koleksi besar file kecil, TAR yang diikuti oleh kompresor aliran biasanya akan menghasilkan rasio kompresi yang lebih tinggi daripada ZIP karena kompresor aliran akan memiliki lebih banyak data untuk membangun frekuensi kamusnya, dan dengan demikian dapat memeras informasi yang lebih berlebihan. Di sisi lain, kesalahan (file-length-melestarikan) dalam file ZIP hanya akan merusak file-file yang data terkompresnya terpengaruh. Biasanya, kompresor aliran tidak dapat memulihkan kesalahan di tengah aliran. Dengan demikian, file ZIP lebih tahan terhadap korupsi, karena bagian dari arsip masih dapat diakses.

Barry Kelly
sumber
Terima kasih atas perbedaan antara zip dan tar + gzip!
Lukas
1
1 untuk perbedaan antara "mengompresi file agregat" dan "menggabungkan file terkompresi".
Jesse Chisholm
Alasan tar memungkinkan rasio kompresi yang lebih baik dan zip menjadi lebih tangguh di sisi lain dijelaskan oleh fakta bahwa tar adalah sejenis kompresi padat sedangkan zip tidak solid.
gaborous
@ Barry, Jadi kesimpulannya siapa yang menang? (dengan asumsi kami menggunakan OS modern)
Pacerier
@Pacerier Saya tidak berpikir ada kemenangan. Zip lebih baik untuk akses acak dan untuk digunakan oleh orang-orang di Windows. Tarball memiliki kompatibilitas out of the box yang lebih tinggi di Linux dan Unix. Tarball memiliki kompresi yang sedikit lebih tinggi tetapi Anda perlu mendekompresi semuanya untuk mengakses apa pun. Keduanya mendukung algoritme kompresi arbitrer, tetapi jauh lebih mudah untuk mencampur dan mencocokkan dengan tarball. Tergantung pada tujuannya, salah satunya bisa lebih baik.
Barry Kelly
26

Aneh bahwa tidak ada orang lain yang menyebutkan bahwa versi GNU modern tarmemungkinkan Anda mengompres saat Anda membundel:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Anda juga dapat menggunakan kompresor pilihan Anda asalkan mendukung opsi ' -c' (ke stdout, atau dari stdin) dan ' -d' (dekompresi):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Ini akan memungkinkan Anda untuk menentukan kompresor alternatif.

[ Ditambahkan : Jika Anda mengekstrak dari gzipatau bzip2memampatkan file, GNU secara tarotomatis mendeteksi ini dan menjalankan program yang sesuai. Artinya, Anda dapat menggunakan:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

dan ini akan ditangani dengan benar. Jika Anda menggunakan kompresor non-standar, maka Anda perlu menentukannya saat Anda melakukan ekstraksi.]

Alasan pemisahan, seperti dalam jawaban yang dipilih, pemisahan tugas. Antara lain, itu berarti bahwa orang dapat menggunakan program ' cpio' untuk mengemas file (bukan tar) dan kemudian menggunakan kompresor pilihan (pada suatu waktu, kompresor yang disukai adalah pack, kemudian compress(yang jauh lebih efektif daripada pack), dan kemudian gzipyang berputar mengelilingi kedua pendahulunya, dan sepenuhnya kompetitif zip(yang telah di-porting ke Unix, tetapi tidak asli di sana), dan sekarang bzip2yang, menurut pengalaman saya, biasanya memiliki keunggulan 10-20% gzip.

[ Ditambahkan : seseorang mencatat dalam jawaban mereka yang cpiomemiliki konvensi lucu. Itu benar, tetapi sampai GNU tarmendapatkan opsi yang relevan (' -T -'), cpioadalah perintah yang lebih baik ketika Anda tidak ingin mengarsipkan semua yang ada di bawah direktori tertentu - Anda sebenarnya dapat memilih dengan tepat file mana yang diarsipkan. Sisi negatifnya cpioadalah Anda tidak hanya dapat memilih file - Anda harus memilihnya. Masih ada satu tempat di mana cpioskor; itu dapat melakukan salinan in-situ dari satu hierarki direktori ke yang lain tanpa penyimpanan perantara:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Kebetulan, opsi ' -depth' aktif findpenting dalam konteks ini - opsi ini menyalin konten direktori sebelum mengatur izin pada direktori itu sendiri. Ketika saya memeriksa perintah sebelum memasukkan penambahan pada jawaban ini, saya menyalin beberapa direktori read-only (izin 555); ketika saya pergi untuk menghapus salinan tersebut, saya harus melonggarkan izin pada direktori sebelum ' rm -fr /new/place' dapat selesai. Tanpa -depthopsi tersebut, cpioperintah tersebut akan gagal. Saya hanya mengingat kembali ini ketika saya pergi untuk melakukan pembersihan - rumus yang dikutip otomatis bagi saya (terutama karena banyak pengulangan selama bertahun-tahun). ]

Jonathan Leffler
sumber
Format ZIP yang diperluas dapat mengakomodasi kompresor aliran plug-in sebanyak TAR, tetapi tanpa protokol IPC yang sesuai, format tersebut kemungkinan akan lebih lambat karena pelaksanaan subproses yang berlebihan.
Barry Kelly
perintah goto saya: tar -xfvz tarpkg.tar.gz (ganti z dengan aj untuk arsip terkompresi bz2)
Bryan Rehbein
1
@Redbeard: tar otomatis mendeteksi gzip dan bzip2 saat mengekstrak - untuk membuat, Anda harus memberi tahu apa yang harus dilakukan, tetapi saya hanya menggunakan -xf (atau -xvf) dan nama file tar.
Jonathan Leffler
15

Lucunya, Anda bisa mendapatkan perilaku yang tidak diantisipasi oleh pencipta tardan gzip. Sebagai contoh, Anda tidak hanya dapat meng-gzip sebuah file tar, Anda juga dapat meng-gzip file tar, untuk menghasilkan sebuah files.gz.tar(ini secara teknis akan lebih mendekati cara pkzipkerjanya). Atau Anda dapat memasukkan program lain ke dalam pipeline, misalnya beberapa kriptografi, dan Anda dapat memilih urutan tarring, gzipping, dan enkripsi sewenang-wenang. Siapa pun yang menulis program kriptografi tidak harus memiliki ide sedikit pun bagaimana programnya akan digunakan, yang perlu dia lakukan hanyalah membaca dari input standar dan menulis ke output standar.

Svante
sumber
Saat membuat file, ingatlah untuk mengenkripsi setelah mengompresi, bukan sebelumnya, karena keluaran enkripsi terlihat acak dan sulit untuk dikompres.
Jonathan Leffler
8

Di dunia Unix, sebagian besar aplikasi dirancang untuk melakukan satu hal, dan melakukannya dengan baik. Utilitas zip paling populer di Unix, gzip dan bzip2, hanya melakukan kompresi file. tar melakukan penggabungan file. Menyalurkan keluaran tar ke dalam utilitas kompresi akan melakukan apa yang diperlukan, tanpa menambahkan kerumitan yang berlebihan pada perangkat lunak mana pun.

Harper Shelby
sumber
7

Alasan lain mengapa ini sangat umum adalah bahwa tar dan gzip ada di hampir seluruh basis instalasi * NIX di luar sana. Saya yakin ini mungkin satu-satunya alasan terbesar. Itu juga mengapa file zip sangat lazim di Windows, karena dukungan sudah ada di dalamnya, terlepas dari rutinitas superior di RAR atau 7z.

GNU tar juga memungkinkan Anda untuk membuat / mengekstrak file-file ini dari satu perintah (satu langkah):

  • Buat Arsip:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Ekstrak Arsip: (bagian -C adalah opsional, defaultnya ke direktori saat ini)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

Ini adalah apa yang saya telah berkomitmen untuk mengingat selama bertahun-tahun saya di Linux dan baru-baru ini di Nexenta (OpenSolaris).

Bryan Rehbein
sumber
3
Sebenarnya, sebaliknya: zip dibangun di Windows sekarang karena itu lazim di DOS dan versi awal Windows.
Christian Lescuyer
Saya suka menggunakan RAR di Windows, tar.bz2 di Linux
Osama Al-Maadeed
Anda mungkin memperhatikan penguraian opsi aneh (tidak kompatibel dengan getopt ()), dan tanda hubung bersifat opsional karena tar telah mempre-tanggal konvensi standar opsi perintah Unix.
Jonathan Leffler
5

Saya pikir Anda mencari lebih banyak konteks sejarah untuk ini. Zip asli untuk satu file. Tar digunakan untuk menempatkan banyak file ke dalam satu file. Oleh karena itu tarring dan zipping adalah proses dua langkah. Mengapa masih begitu dominan saat ini adalah dugaan siapa pun.

Dari wikipedia untuk Tar_ (file_format)

Dalam komputasi, tar (berasal dari arsip tape) adalah format file (dalam bentuk sejenis arsip bitstream) dan nama program yang digunakan untuk menangani file tersebut. Formatnya distandarisasi oleh POSIX.1-1988 dan kemudian POSIX.1-2001. Awalnya dikembangkan sebagai format mentah, digunakan untuk backup tape dan perangkat akses sekuensial lainnya untuk tujuan backup, sekarang umumnya digunakan untuk menyusun koleksi file menjadi satu file yang lebih besar, untuk distribusi atau pengarsipan, sambil menjaga informasi sistem file seperti pengguna dan grup izin, tanggal, dan struktur direktori.

martinatime.dll
sumber
4

tar adalah UNIX karena UNIX adalah tar

Menurut pendapat saya, alasan masih menggunakan tarhari ini adalah karena itu adalah salah satu kasus (mungkin jarang) di mana pendekatan UNIX membuatnya sempurna sejak awal.

Melihat lebih dekat pada tahapan yang terlibat dalam pembuatan arsip Saya harap Anda setuju bahwa cara pemisahan tugas yang berbeda terjadi di sini adalah filosofi UNIX yang terbaik:

  • salah satu alat ( taruntuk memberikan nama di sini) khusus dalam mentransformasikan setiap pemilihan file, direktori dan link simbolik termasuk semua meta-data yang relevan seperti cap waktu, pemilik dan hak akses ke dalam satu aliran byte.

  • dan hanya alat lain secara sewenang-wenang dipertukarkan ( gzip bz2 xzuntuk nama hanya beberapa pilihan) yang transformasi setiap input stream byte ke lain (mudah-mudahan) output stream yang lebih kecil.

Menggunakan ini dan pendekatan memberikan beberapa manfaat bagi pengguna serta pengembang:

  • diperpanjang Membiarkan pasangan tardengan setiap algoritma kompresi yang sudah ada atau setiap algoritma kompresi namun masih dikembangkan tanpa harus perubahan apapun pada inner tarsama sekali.

    Segera setelah alat kompresi "hyper-zip-utra" atau yang lebih baru keluar, Anda sudah siap untuk menggunakannya dengan merangkul pelayan baru Anda dengan seluruh kekuatan tar.

  • stabilitas tar telah banyak digunakan sejak awal tahun 80-an diuji dan dijalankan pada banyak sistem operasi dan mesin.

    Mencegah kebutuhan untuk menemukan kembali roda dalam mengimplementasikan kepemilikan penyimpanan, izin, cap waktu dan sejenisnya berulang kali untuk setiap alat pengarsipan baru tidak hanya menghemat banyak waktu (jika tidak dihabiskan) dalam pengembangan, tetapi juga menjamin keandalan yang sama untuk setiap aplikasi baru.

  • konsistensi Antarmuka pengguna tetap sama sepanjang waktu.

    Tidak perlu diingat bahwa untuk memulihkan izin menggunakan alat A, Anda harus memberikan opsi --i-hope-you-rember-this-one dan menggunakan alat B yang harus Anda gunakan --this-time-its-another-one saat menggunakan alat C itu `--hope-you-didnt-try-with-tool-as-switch.

    Sedangkan dalam menggunakan alat D Anda akan benar-benar mengacaukannya jika Anda tidak menggunakannya --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

mikyra
sumber
3

tar sangat populer karena alasan sejarah. Ada beberapa alternatif yang tersedia. Beberapa dari mereka ada hampir sepanjang tar, tetapi tidak bisa melampaui tar dalam popularitas karena beberapa alasan.

  • cpio (sintaks alien; secara teoritis lebih konsisten, tetapi orang-orang menyukai apa yang mereka ketahui, tar menang)
  • ar (populer dahulu kala, sekarang digunakan untuk mengemas file perpustakaan)
  • shar (skrip shell yang mengekstraksi sendiri, memiliki segala macam masalah; dulu populer tidak pernah kurang)
  • zip (karena masalah lisensi, ini tidak tersedia di banyak Unices)

Keuntungan utama (dan sisi negatif) dari tar adalah ia tidak memiliki header file, atau direktori pusat konten. Oleh karena itu, selama bertahun-tahun tidak pernah mengalami keterbatasan dalam ukuran file (hingga dekade ini di mana batas 8 Gb pada file di dalam arsip menjadi masalah, diselesaikan bertahun-tahun yang lalu).

Jelas satu kelemahan tar.gz (atau ar.Z dalam hal ini), yaitu Anda harus membuka kompresi seluruh arsip untuk mengekstrak satu file dan mendaftar isi arsip, tidak pernah menyakiti orang cukup untuk membuat mereka cacat dari tar dalam jumlah yang signifikan .

edgar.holleis
sumber
Tar versi lama tidak memiliki informasi header; tar versi baru (kompatibel dengan POSIX, USTAR) (mis. tar GNU) lakukan. Perintah 'file' memahami ini.
Jonathan Leffler
2

gzip dan bzip2 hanyalah sebuah kompresor, bukan perangkat lunak pengarsipan. Makanya, kombinasinya. Anda membutuhkan perangkat lunak tar untuk menggabungkan semua file.

ZIP itu sendiri, dan RAR juga merupakan kombinasi dari dua proses tersebut.

jishi
sumber
2

Biasanya di dunia * nux, kumpulan file didistribusikan sebagai tarball dan kemudian di-gzip secara opsional. Gzip adalah program kompresi file sederhana yang tidak melakukan bundling file seperti yang dilakukan tar atau zip.

Pada suatu waktu, zip tidak menangani dengan baik beberapa hal yang dianggap normal oleh sistem file tar dan unix Unix, seperti symlink, file kasus campuran, dll. Saya tidak tahu apakah itu berubah, tapi itulah mengapa kami menggunakan tar.

Paul Tomblin
sumber
1
* nux - Linux, Unux, Solarnux?
mackenir
1
@mackenir - jangan lupa POSUX. :-)
Paul Tomblin
1
@mackenir - Atau haruskah itu POSNUX?
Paul Tomblin
1

Tar = Mengelompokkan file dalam 1 file

GZip = Zip file

Mereka membagi proses menjadi 2. Itu saja.

Di lingkungan Windows mungkin Anda lebih terbiasa menggunakan WinZip atau WinRar yang melakukan Zip. Proses Zip dari perangkat lunak ini mengelompokkan file dan zip tetapi Anda tidak melihat proses itu.

Patrick Desjardins
sumber
3
Ini bukan penjelasan terbaik, mengingat bahwa file "zip" yang digunakan OP di Windows, sudah termasuk pengelompokan.
Gareth
1

Untuk alasan yang sama mengapa pengguna mac menyukai gambar disk: Mereka adalah cara yang sangat nyaman untuk mengarsipkan barang dan kemudian menyebarkannya, naik- / unduh atau email dll.

Dan lebih mudah digunakan dan lebih portabel daripada ritsleting IMHO.

Tobias
sumber
1

Pada masa Altos-XENIX saya (1982) kami mulai menggunakan tar (pengarsip pita) untuk mengekstrak file dari 5 1/4 disket atau pita streaming serta menyalinnya ke media ini. Fungsinya sangat mirip dengan perintah BACKUP.EXE dan RESTORE.EXE di DOS 5.0 dan 6.22 sebagai suplemen, memungkinkan Anda untuk menjangkau banyak media jika tidak bisa muat hanya di satu. Kekurangannya adalah jika salah satu dari beberapa media mengalami masalah, semuanya tidak berharga. tar dan dd berasal dari UNIX SYstem III dan tetap menjadi utilitas rilis standar dengan OS mirip UNIX mungkin karena alasan kompatibilitas mundur.

Frank R.
sumber
0

Tar bukan hanya format file, tetapi juga format kaset. Kaset menyimpan data sedikit demi sedikit. Setiap implementasi penyimpanan bersifat khusus. Tar adalah metode yang Anda gunakan untuk mengambil data dari disk, dan menyimpannya ke tape dengan cara yang dapat diambil orang lain tanpa program kustom Anda.

Kemudian, program kompresi datang, dan * nix masih hanya memiliki satu metode untuk membuat satu file yang berisi banyak file.

Saya percaya itu hanya inersia yang melanjutkan tren tar.gz. Pkzip dimulai dengan kompresi dan pengarsipan dalam satu gerakan, tetapi kemudian sistem DOS biasanya tidak memiliki tape drive yang terpasang!

Dari wikipedia untuk Tar_ (file_format)

Dalam komputasi, tar (berasal dari arsip tape) adalah format file (dalam bentuk sejenis arsip bitstream) dan nama program yang digunakan untuk menangani file tersebut. Formatnya distandarisasi oleh POSIX.1-1988 dan kemudian POSIX.1-2001. Awalnya dikembangkan sebagai format mentah, digunakan untuk backup tape dan perangkat akses sekuensial lainnya untuk tujuan backup, sekarang umumnya digunakan untuk menyusun koleksi file menjadi satu file yang lebih besar, untuk distribusi atau pengarsipan, sambil menjaga informasi sistem file seperti pengguna dan grup izin, tanggal, dan struktur direktori.

Kieveli
sumber
Sebenarnya tar adalah format file - hanya saja pada kaset unix hanyalah file lain.
Martin Beckett
Sebenarnya, tar bukanlah format file untuk memulai. Kaset tidak memiliki sistem file, jadi tar dibuat sebagai tambalan karena tidak memiliki sistem file.
Kieveli
0

Sebagai Pengembang Windows, dapat dimengerti bagaimana tarball tampak aneh. Katatar singkatan dari Tape Archive. Pikirkan perekam pita gulungan-ke-gulungan.

Di dunia Windows, program biasanya diinstal dengan setup.exeatau install.exeyang menjalankan semua jenis sihir di registri, membuat direktori dan menginstal.dll file (Dynamic Link Library).

Di Linux, Ubuntu khususnya dari pengalaman saya sendiri, manajer paket menangani penggunaan aplikasi dan menginstalnya hampir sepanjang waktu . Di Ubuntu, pengembang membuat paket yang diakhiri dengan .deb(Debian, yang menjadi dasar Ubuntu). Sintaks dasar untuk menginstal .debadalah:

sudo apt install <package_name>

Meskipun ini relatif mudah bagi pengguna, banyak pekerjaan bagi pengembang untuk membuat file .deb paket dan mengasosiasikan PPA.

Metode yang lebih mudah bagi pengembang adalah dengan membuat tarball. Kemudian beban instalasi dibagikan oleh pengguna akhir. Mereka harus:

  • unduh tarball (biasanya diakhiri dengan .tar.gz ).
  • mendekompresi kode sumber ke direktori.
  • mengkompilasi kode sumber (tidak pernah terdengar di Windows for Profit world).
  • mudah-mudahan menuliskan apa yang telah mereka lakukan seandainya mereka perlu mengulang di masa depan karena tidak ada apt database (pikirkan daftar program yang diinstal Windows) yang dapat dicadangkan.

Karena jawaban lain sudah menyatakan untuk pertanyaan lain yang Anda ajukan, Anda BISA membuat tarball dan mengompres data pada saat yang bersamaan. Proses dua lulus TIDAK diperlukan.

WinEunuuchs2Unix
sumber