Cái nào hiệu quả hơn - nén tar hay zip? Sự khác biệt giữa tar và zip là gì?


68

Tôi đang làm việc trong môi trường Linux và muốn biết về các lệnh tar và zip.

Cái nào hiệu quả hơn - tar hay zip? Tôi cũng cần biết sự khác biệt giữa các lệnh tar và zip. Bất cứ ai có thể giải thích chúng cho tôi?

Câu trả lời:


77

tarchỉ tạo một tệp duy nhất trong số nhiều tệp, nó không thực hiện nén trừ khi kết hợp một chương trình nén như gziphoặc bzip2(mà bạn có thể gọi từ bên trong tarbằng cách sử dụng -zhoặc -jtùy chọn tương ứng). zipkết hợp cả lưu trữ và nén trong một chương trình.


60

hắc ín

  • Giả sử bạn sẽ đọc từ đầu này sang đầu kia - "Băng ARchive". (Tuổi của lệnh hiển thị ...)
  • Không thực hiện nén, nhưng bạn có thể nén toàn bộ luồng kết quả bằng cách chuyển nó qua ví dụ gzip và bzip2 (được thực hiện bên trong với -z hoặc -j)
  • Lưu trữ các thuộc tính tệp unix : uid, gid, quyền (đáng chú ý nhất là thực thi). Mặc định có thể phụ thuộc vào phân phối của bạn và có thể được bật với các tùy chọn.

khóa kéo

  • Lưu trữ các thuộc tính MSDOS . (Lưu trữ, chỉ đọc, ẩn, hệ thống)
  • Nén từng tệp, sau đó thêm chúng vào kho lưu trữ
  • Bao gồm một bảng tập tin ở cuối tập tin
  • và là kết quả của hai phần trước, chỉ cho phép đọc các phần chính xác về tệp bạn cần.

Thực tế là zip nén các tệp riêng biệt sẽ ảnh hưởng đến tỷ lệ nén, đặc biệt là trên nhiều tệp nhỏ tương tự.

(Ít nhất điều này đã chính xác một thập kỷ trước.)


22

Tar bảo tồn siêu dữ liệu nhiều hơn so với Zip, xem phần so sánh của tôi (nó hơi lỗi thời):

nhập mô tả hình ảnh ở đây

(Bấm để phóng to)

Tar vượt qua 65% bài kiểm tra, trong đó Zip chỉ vượt qua 17%. Tôi đã cung cấp bộ thử nghiệm có sẵn trên github theo giấy phép BSD để bạn có thể tự thử nếu có Mac. Đối với linux, tôi không chắc có siêu dữ liệu nào không, vì vậy những thử nghiệm này có thể không liên quan.


Hấp dẫn! +1 cho điều này. Nhưng sau đó, một lần nữa, đó là một chương trình lớn. Bạn đã viết điều này cho mục đích khác? Chỉ tò mò thôi.
CppLearner

Tôi đã viết các bài kiểm tra cho một trình quản lý tập tin mà tôi đã làm việc vài năm trước. Không bao giờ phát hành nó mặc dù.
neoneye

1
Linux cũng có siêu dữ liệu, vì vậy nên hoạt động cho nó.
zeitue

14

Hiệu quả có thể được đo lường theo những cách khác nhau:

  1. Quá trình này mất bao lâu?
  2. Làm thế nào lớn là các tập tin kết quả?

Cũng có những câu hỏi khác, như "Mức độ phổ biến của các công cụ để thao túng tài liệu lưu trữ kết quả?"

Vì vậy, ví dụ, bzip2tạo các tệp nhỏ hơn gzip, nhưng có thể mất nhiều thời gian hơn. Ngoài ra, theo kinh nghiệm của tôi gziplà phổ biến trên các hệ thống giống Unix, nhưng bzip2vẫn không (mặc dù nó rất phổ biến và thường dễ lấy).


3
7zip ( 7-zip.org ) là một tùy chọn tốt khác để có được khả năng nén tuyệt vời với chi phí thời gian của CPU. Ít phổ biến hơn bzip2 (không được cài đặt theo mặc định ở bất kỳ nơi nào tôi biết) nhưng dễ cài đặt ở hầu hết mọi nơi (nó nằm trong kho lưu trữ tiêu chuẩn cho hầu hết các bản phân phối Linux và có gói cài đặt đơn giản cho Windows. Giống như tar + gzip, nó mang cửa sổ nén trên các tệp đầu vào để có được mức tiết kiệm lớn hơn so với zip khi bao gồm nhiều tệp nhỏ.
David Spillett

3
Hiệu quả cũng có thể được đo lường bằng cách nó bảo quản dữ liệu tốt như thế nào, hãy xem câu trả lời của tôi cho câu hỏi này. Tar tốt hơn nhiều so với zip trong việc bảo quản dữ liệu.
neoneye

1
thêm một phép đo nữa là khả năng tương thích bên ngoài UNIX. Windows vẫn ổn với zip (tích hợp sẵn trong Windows), thường có thể dễ dàng xử lý tar.gz bằng phần mềm chia sẻ, nhưng bzip2 rất hiếm khi tìm thấy. Thật không may, Câu hỏi gốc không đề cập đến các tiêu chí này, vì vậy không thể xem chúng có liên quan hay không.
Rich Homolka

1
Tôi đã từng xem xét kỹ lưỡng tỷ lệ nén so với thời gian cần thiết cho một số máy nén thông thường và sẽ hiệu quả nhất tùy thuộc vào cách bạn định giá không gian theo thời gian: blog.grandtrunk.net/2004/07/prreal-compressor-test
Wim

9

Như Wim đã lưu ý, tar tự nó không nén. Nếu bạn thêm nén tar (ví dụ: để lấy .tar.gz hoặc .tar.bz2), bạn sẽ nén toàn bộ tệp tar cùng một lúc. Ngược lại, zip nén từng tệp riêng lẻ.

Hiệu quả phụ thuộc vào khối lượng công việc. Cụ thể, zip cho phép bạn truy cập các tệp riêng lẻ trực tiếp. Với tar, trước tiên bạn phải tìm kiếm thông qua các tệp không mong muốn (đã nén) trước đó. Hiệu suất nén phụ thuộc vào những gì bạn đang nén. tarvới bzip2thường tốt hơn cho một số lượng lớn các tệp tương tự (ví dụ: thư mục nguồn). zipcó thể tốt hơn nếu mỗi tệp có nội dung rất khác nhau.


4
... mặt khác, bạn phải lấy toàn bộ tệp zip trước khi bạn có thể truy cập nội dung, vì mã thông báo được đặt ở cuối. ngược lại, bạn có thể gỡ một tar nhanh như các byte đến ...
akira

6

Lưu trữ zip chứa một thư mục trung tâm của nội dung của chúng ở cuối (rất có thể tránh phải tạo thư mục trước, nơi bạn chưa biết những gì sẽ có bên trong). Điều này cho phép trích xuất nhanh các tệp đơn lẻ mà không phải giải nén toàn bộ kho lưu trữ: Chỉ cần đọc thư mục lưu trữ và chỉ trích xuất những gì cần thiết. Tuy nhiên, điều này đòi hỏi toàn bộ kho lưu trữ có thể truy cập được và yêu cầu truy cập ngẫu nhiên chỉ có trên các thiết bị khối (đĩa mềm, ổ cứng). Ngoài ra, thư mục lưu trữ dễ bị tổn thương: Nếu kho lưu trữ bị cắt ngắn vì một số lý do, nó yêu cầu thuật sĩ nặng để trích xuất bất cứ điều gì hữu ích từ kho lưu trữ.

Lưu trữ zip đã được tạo để sử dụng BBS, trong đó điều quan trọng là có thể bó nội dung của một thư mục vào một tệp (và được nén) --- thay vì phải tải xuống hàng ngàn tệp đơn lẻ. Giống như hầu hết các trang web đóng gói tải xuống của họ ngay cả ngày hôm nay, vì những lý do tương tự.

Các tài liệu lưu trữ Tar đã được tạo ra để sao lưu bó được sử dụng cho các ổ đĩa băng, do đó để truy cập tuần tự . Không có thư mục trung tâm; thay vào đó, kho lưu trữ chứa các khối tiêu đề theo các khoảng thời gian đều đặn cho biết các tệp nào sẽ theo sau trong một số khối tiếp theo. Tài liệu lưu trữ Tar dự định sẽ được đọc trong một cú trượt ngã; nếu chỉ trích xuất một tệp duy nhất, tệp lưu trữ được đọc tuần tự, bắt đầu từ lúc bắt đầu cho đến khi tìm thấy tệp được yêu cầu (có thể ở cuối). Nén được áp dụng trên đó; mỗi chương trình nén khác nhau được áp dụng đối với tài liệu lưu trữ tar ( compress, gzip,bzip2v.v.) là máy nén luồng và không làm thay đổi tính chất tuần tự của kho lưu trữ trong mọi vấn đề. Trong trường hợp xấu nhất, bạn cần nhiều khối hơn một chút cho đến khi bạn có thể bắt đầu giải nén.

Điều này nghe có vẻ như là một sự khác biệt tầm thường, nhưng trên thực tế đại diện cho một thái cực đối lập trong triết học. Với kho lưu trữ zip, luôn cần có toàn bộ tệp trong tay để làm bất cứ điều gì hữu ích với nó, trong khi kho lưu trữ tar có thể được truyền trực tuyến đến một đường ống dẫn. Tôi có thể tải xuống một kho lưu trữ tar lớn và bắt đầu giải nén nó ngay từ đầu, ngay khi một vài khối đầu tiên xuất hiện (và có thể làm gián đoạn quá trình tải xuống ngay khi tôi nhận được tệp tôi đang tìm). Đối với kho lưu trữ Zip, tôi phải đợi cho đến khi thư mục lưu trữ xuất hiện, xuất hiện ở phần cuối của kho lưu trữ. Nhưng một khi tôi làm có toàn bộ tập tin trong tầm tay, trích xuất nội dung từng phần từ nó sẽ được nhanh hơn nhiều từ một tập tin tar.

Cả hai định dạng đều có một điểm rất mạnh đối với chúng, tùy thuộc vào vị trí và cách sử dụng chúng. Do các đường ống (và do đó, khái niệm truyền dữ liệu từ quy trình này sang quy trình khác) chỉ thực sự tồn tại trong thế giới Unix, nên ưu điểm chính của lưu trữ tar bị mất trên các hệ thống khác, đó là lý do tại sao lưu trữ Zip phổ biến hơn nhiều ở đó. Nhưng tài liệu lưu trữ tar linh hoạt hơn, đó là lý do tại sao tôi thích chúng bất cứ khi nào tôi có sự lựa chọn.


5

Như những người khác đã nói, tar tạo ra một "khối" lớn tất cả các tệp có thể được nén bằng một trình kết hợp luồng như gzip hoặc bzip2.

Nhược điểm của việc này là bạn phải giải nén toàn bộ tệp để truy cập một tệp bên trong kho lưu trữ.

Ưu điểm của việc này là tỷ lệ nén thường cao hơn, đặc biệt là khi các tệp nén rất giống nhau.

Các trình đóng gói khác như "rar" có "chế độ chặn" (hoặc tương tự) để có hiệu ứng tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.