Có hai nhiệm vụ riêng biệt nhưng có liên quan. Đóng gói một cây tệp (bao gồm tên tệp, cấu trúc thư mục, quyền hệ thống tệp, quyền sở hữu và bất kỳ siêu dữ liệu nào khác) vào một luồng byte được gọi là
lưu trữ . Loại bỏ sự dư thừa trong một luồng byte để tạo ra một luồng byte nhỏ hơn được gọi là nén .
Trên Unix, hai hoạt động được tách ra, với các công cụ riêng biệt cho từng hoạt động. Trên hầu hết các nền tảng khác (hiện tại và lịch sử), các công cụ kết hợp thực hiện cả lưu trữ và nén.
(gzip và các chương trình khác bắt chước giao diện của gzip thường có tùy chọn lưu tên tệp gốc trong đầu ra được nén, nhưng điều này, cùng với CRC hoặc kiểm tra khác để phát hiện tham nhũng, là siêu dữ liệu duy nhất họ có thể lưu trữ.)
Có những lợi thế để tách nén khỏi lưu trữ. Lưu trữ là dành riêng cho nền tảng (siêu dữ liệu hệ thống tập tin cần bảo quản rất khác nhau), nhưng việc triển khai rất đơn giản, chủ yếu là ràng buộc I / O và thay đổi rất ít theo thời gian. Nén là độc lập với nền tảng, nhưng việc triển khai bị ràng buộc bởi CPU và các thuật toán không ngừng cải tiến để tận dụng các tài nguyên gia tăng mà phần cứng hiện đại có thể mang lại để giải quyết vấn đề.
Trình lưu trữ Unix phổ biến nhất là tar
, mặc dù có tồn tại những cái khác như cpio
và ar
. (Gói Debian là ar
tài liệu lưu trữ, trong khi
cpio
thường được sử dụng cho ramdisks inital.) tar
Hoặc thường được kết hợp với các công cụ nén như compress
(.Z), gzip
(.gz),
bzip2
(.bz2) và xz
(.xz), từ cũ nhất đến trẻ nhất , và không phải ngẫu nhiên từ tồi tệ nhất đến nén tốt nhất.
Tạo một tar
kho lưu trữ và nén nó là các bước riêng biệt: máy nén không biết gì về tar
định dạng tệp. Điều này có nghĩa là trích xuất một tệp từ tar
kho lưu trữ nén yêu cầu giải nén tất cả các tệp trước đó. Điều này thường được gọi là một kho lưu trữ "rắn".
Tương tự, vì tar là định dạng "phát trực tuyến" - được yêu cầu để nó hữu ích trong một đường ống - không có chỉ mục toàn cầu trong kho lưu trữ tar và việc liệt kê nội dung của kho lưu trữ tar cũng tốn kém như trích xuất nó.
Ngược lại, Zip và RAR và 7-zip (trình lưu trữ phổ biến nhất trên nền tảng Windows hiện đại) thường nén riêng từng tệp và nén siêu dữ liệu nhẹ nếu có. Điều này cho phép liệt kê các tệp trong một tệp lưu trữ và trích xuất các tệp riêng lẻ, nhưng có nghĩa là sự dư thừa giữa nhiều tệp trong cùng một tệp lưu trữ không thể được khai thác để tăng khả năng nén. Mặc dù việc nén tệp chung đã nén không làm giảm kích thước tệp hơn nữa, đôi khi bạn có thể thấy tệp zip trong tệp zip: lần nén đầu tiên đã biến rất nhiều tệp nhỏ thành một tệp lớn (có thể bị nén) nén sau đó nén như một thực thể duy nhất.
Có sự thụ phấn chéo giữa các nền tảng và triết lý khác nhau: gzip
về cơ bản zip
là máy nén mà không có bộ lưu trữ của nó, và xz
về cơ bản 7-zip
là máy nén mà không có bộ lưu trữ.
Có khác, máy nén chuyên dụng. Các biến thể PPM và sự kế thừa của chúng ZPAQ
được tối ưu hóa để nén tối đa mà không liên quan đến tiêu thụ tài nguyên. Chúng có thể dễ dàng nhai nhiều CPU và RAM như bạn có thể sử dụng và giải nén cũng giống như nén (ngược lại, hầu hết các công cụ nén được sử dụng rộng rãi đều
không đối xứng : giải nén rẻ hơn so với nén).
Ở đầu bên kia của quang phổ, lzo
, snappy
và LZ4
là máy nén "ánh sáng" được thiết kế cho tốc độ tối đa và tối thiểu tiêu thụ tài nguyên, với chi phí nén. Chúng được sử dụng rộng rãi trong các hệ thống tập tin và các kho đối tượng khác, nhưng ít hơn là các công cụ độc lập.
Vậy bạn nên chọn cái nào?
Lưu trữ:
Vì bạn đang sử dụng Ubuntu, không có lý do thực sự nào để sử dụng bất cứ thứ gì ngoài tar
việc lưu trữ, trừ khi bạn đang cố gắng tạo các tệp dễ đọc ở nơi khác.
zip
rất khó để đánh bại sự phổ biến, nhưng nó không phải là trung tâm của Unix và sẽ không giữ thông tin quyền và hệ thống tập tin của bạn, và tính năng nén trong hệ thống của nó là cổ xưa. 7-zip và RAR (và ZPAQ) có tính năng nén hiện đại hơn nhưng không được sử dụng để lưu trữ các hệ thống tệp Unix (mặc dù không có gì ngăn bạn sử dụng chúng như máy nén); RAR cũng là độc quyền.
Nén:
Để nén tối đa, bạn có thể xem điểm chuẩn, chẳng hạn như điểm cực lớn tại http://mattmahoney.net/dc/text.html . Điều này sẽ cho bạn một ý tưởng tốt hơn về sự đánh đổi liên quan.
Bạn có thể không muốn nén tối đa, mặc dù. Nó quá đắt.
xz
là công cụ nén đa năng phổ biến nhất trên các hệ thống Unix hiện đại. Tôi tin rằng 7-zip cũng có thể đọc các tệp xz, vì chúng có liên quan chặt chẽ với nhau.
Cuối cùng: nếu bạn đang lưu trữ dữ liệu cho bất kỳ thứ gì ngoài lưu trữ ngắn hạn, bạn nên chọn một nguồn mở và tốt nhất là phổ biến rộng rãi, để giảm thiểu đau đầu sau này.