gzip không có tar? Tại sao chúng được sử dụng cùng nhau?


60

Tại sao targzip hầu như luôn được sử dụng cùng nhau, và không chỉ gzip? Có bất kỳ lợi thế cho phương pháp đó?

Câu trả lời:


72

TAR tạo một tệp lưu trữ duy nhất trong số nhiều tệp, nhưng không nén chúng.

Định dạng chi tiết

Một tập tin tar là sự kết hợp của một hoặc nhiều tập tin. Mỗi tệp được đi trước bởi một bản ghi tiêu đề 512 byte. Dữ liệu tệp được ghi không thay đổi ngoại trừ chiều dài của nó được làm tròn lên bội số 512 byte và không gian thừa được lấp đầy. Sự kết thúc của một kho lưu trữ được đánh dấu bằng ít nhất hai bản ghi không đầy liên tiếp.

GZIP nén một tệp duy nhất vào một tệp khác, nhưng không tạo tài liệu lưu trữ.

Định dạng tệp

... Mặc dù định dạng tệp của nó cũng cho phép nhiều luồng như vậy được nối (các tệp nén được giải nén đơn giản như thể chúng là một tệp ban đầu), gzip thường được sử dụng để nén chỉ các tệp đơn lẻ. [4] Lưu trữ nén thường được tạo bằng cách tập hợp các tập hợp tệp vào một tệp lưu trữ tar duy nhất, sau đó nén tệp lưu trữ đó bằng gzip.


12
Không có thứ gọi là tập tin "tgz". Nó là một tar.gz. Công việc của gzip là nén hoặc giải nén nội dung của nó (trong trường hợp này là kho lưu trữ tar.) Sau đó, bạn hủy lưu trữ nó bằng tar. Đó là triết lý đường ống Unix điển hình, và do đó hầu như không độc đáo.
luis.espinal

5
Không, .tar.gz không phải là duy nhất: .tar.bz2, .cpio.gz, v.v. hoạt động theo cùng một cách.
dùng46971

3
@ user36 310 Tôi biết ý của bạn về nguyên tắc, nhưng trong thực tế, các công cụ cho phép bạn trích xuất một tệp duy nhất. tar -xzvf tarball.tar.gz single/file.txt. Đằng sau hậu trường, nó cần phải thực hiện một số công việc phụ nhưng để xuất hiện, nó trích xuất một tập tin duy nhất.
Rich Homolka

4
Làm cho "nhiều việc thêm" nếu tệp nằm ở cuối một kho lưu trữ lớn. Rõ ràng, nếu bạn cần truy cập ngẫu nhiên, zip / rar / xar / 7z / lzh / arj / cab / sit, v.v. là những định dạng ưu việt.
LaC

3
Nói chính xác, một .tar.*kho lưu trữ nén luôn luôn là solid solid, tức là. bao gồm một luồng nén duy nhất. Mặt khác, một .zipkho lưu trữ không vững chắc, thuật toán nén được bắt đầu lại cho mỗi tệp. Nó hy sinh hiệu quả nén để tăng tốc truy cập ngẫu nhiên. .7ztài liệu lưu trữ có thể là rắn, không rắn hoặc để có khối rắn.
Daniel B

17

Gzip / Bzip2 là máy nén dòng. Họ nén một luồng dữ liệu vào một cái gì đó nhỏ hơn. Chúng có thể được sử dụng trên các tệp riêng lẻ, nhưng không phải trên các nhóm tệp riêng.

Mặt khác, Tar có khả năng biến một danh sách các tệp, với các đường dẫn, quyền và thông tin quyền sở hữu, thành một luồng liên tục duy nhất - và ngược lại.

Đó là lý do tại sao, để lưu trữ các tệp (và nếu ai cũng cần nén), người ta thường sử dụng phương pháp nén tar +.


12

Tar chịu trách nhiệm thực hiện một và chỉ một điều tốt: (un) lưu trữ vào (ngoài) một tệp lưu trữ duy nhất. Của cái gì? Của một và chỉ một điều: một tập hợp các tập tin.

Gzip chịu trách nhiệm thực hiện một và chỉ một điều tốt: (un) nén. Của cái gì? Một điều và một điều duy nhất: một tệp duy nhất thuộc bất kỳ loại nào ... và bao gồm một tệp được tạo bằng tar.

Nó quay trở lại triết lý UNIX về đường ống, kiến ​​trúc "đường ống và bộ lọc" cơ bản; việc xử lý tất cả mọi thứ như một tập tin và mục tiêu kiến ​​trúc âm thanh của "một việc làm một việc duy nhất và duy nhất" (kết quả là một kiểu cắm rất đơn giản và thanh lịch .)

Trong sự đơn giản của nó, nó gần như là đại số trong tự nhiên (một mục tiêu lớn trong thiết kế hệ thống). Và đó không phải là một kỳ công dễ dàng.

Theo nhiều cách (và không phải không có sai sót của nó), đây gần như là một đỉnh cao về khả năng kết hợp, mô đun hóa, khớp nối lỏng lẻo và độ gắn kết cao. Nếu bạn hiểu bốn điều này (và ý tôi là thực sự hiểu ), bạn sẽ hiểu, rõ ràng tại sao tar và gzip lại hoạt động như vậy theo cặp.


1
Triết lý UNIX này rất hay, nhưng tôi đang quan sát rằng nó bị thiếu, tạo ra các tài liệu lưu trữ không vững chắc. (Trích xuất một tập tin duy nhất từ một tar.gz 1 GB không phải là một nỗi đau, và từ những gì tôi đã hiểu ở đây, ZIP là khá nhiều vượt trội so với tar.gz ... phải không?)
Mehrdad

@Mehrad - Đầu tiên , một kho lưu trữ không rắn là gì? Theo quy định của Voltaire, "Nếu bạn muốn trò chuyện với tôi, trước tiên bạn phải xác định các điều khoản của mình." . Thứ hai , vâng, kiến ​​trúc đường ống và bộ lọc bị thiếu trong các trường hợp cụ thể, giống như bất kỳ kiến ​​trúc nào khác, bất kể vẻ đẹp của nó. Đó là một mô hình được đưa ra với một chút kỹ thuật, và đó không phải là tranh luận đang được đưa ra. Thứ ba , zip vượt trội hơn gzip và tar, nhưng đó không phải là những gì bạn yêu cầu. Bạn hỏi tại sao zip và tar hoạt động theo cách họ làm và nếu có bất kỳ lợi thế nào, và bạn đã được đưa ra một câu trả lời kỹ thuật.
luis.espinal

@Mehrad - đồng thời, tôi không biết bạn gặp phải loại sự cố nào khi giải nén | gỡ bỏ tệp 1gig tar.gz. Tôi đã thực hiện điều đó nhiều lần, tối đa 2GB với các bản cài đặt gzip cũ hơn (và lên đến 4gb với các phiên bản gzip mới hơn.) Nếu bạn đang thực hiện qua dây hoặc trên giá treo NFS, thì duh! Bạn sẽ gặp các vấn đề về hiệu suất tương tự như khi thực hiện với zip đơn giản. Heck, tôi thậm chí đã được gỡ bỏ từ một đường ống đến một quá trình từ xa nhổ đầu vào gzip vào một ổ cắm. Hãy thử điều đó với zip. Đối với mỗi vấn đề, hãy sử dụng công cụ thích hợp (có thể là tar | gz hoặc zip.)
luis.espinal

8

Trước hết, TAR không được tạo để lưu trữ tệp . Đó là băng ARchiver . Công việc của bạn là viết ra hoặc tải vào một kho lưu trữ đến / từ băng.

Các -f tùy chọn làm cho nó sử dụng một tập tin như "băng ảo", mà sau đó có thể được nén bởi một chương trình khác. Trong thực tế, nén như vậy cũng xảy ra trên tapedrive trong thế giới thực.

Tất nhiên, triết lý sử dụng một chương trình để làm tốt điều đó cũng được tính trong trường hợp này, nhưng người ta có thể bỏ lỡ lý do tại sao tài liệu lưu trữ TAR được cấu trúc như một luồng thay vì thư mục nội dung + nội dung.


3
Phải ... Các tệp ZIP đặt tất cả thông tin tệp trong một tiêu đề hợp nhất, sau đó tất cả nội dung tệp ... khiến cho không thể nối thêm tệp vào tệp ZIP ... bạn phải viết lại toàn bộ tệp ... với Định dạng TAR, tiêu đề cho mỗi tệp là riêng biệt, vì vậy bạn có thể dễ dàng nối thêm các tệp mà không cần viết lại toàn bộ băng
JoelFan

5

Theo truyền thống, các hệ thống Unix sử dụng một chương trình để thực hiện một nhiệm vụ theo triết lý Unix : tarchỉ là một phương tiện để đóng gói nhiều file thành một file duy nhất, ban đầu để sao lưu băng (vì thế tar, t vượn ar chive). tarkhông cung cấp nén; các kho lưu trữ không nén kết quả thường được nén với một số chương trình khác như gzip, bzip2hoặc xz. Ngày xưa, họ sẽ sử dụng compresslệnh để làm điều này; thuật toán nén mới hơn hiệu quả hơn nhiều so với điều này.

Cách tiếp cận được mô đun hóa cao theo triết lý Unix có nghĩa là mỗi chương trình có thể được sử dụng riêng lẻ khi thích hợp hoặc kết hợp để thực hiện các tác vụ phức tạp hơn, bao gồm cả việc tạo tài liệu lưu trữ nén như được mô tả ở đây. Đối với các loại nhiệm vụ này, nó cũng giúp bạn dễ dàng trao đổi các công cụ riêng lẻ khi cần thiết; bạn chỉ cần thay đổi chương trình nén để sử dụng thuật toán nén khác mà không phải tự thay thế tartiện ích.

Phương pháp mô-đun này không phải là không có nhược điểm của nó. Như đã đề cập trong các bình luận cho các câu trả lời khác, một định dạng lưu trữ nén chuyên dụng như .zipcó khả năng xử lý trích xuất các tệp riêng lẻ tốt hơn; tarball nén cần được giải nén gần như toàn bộ để giải nén các tệp gần cuối kho lưu trữ, trong khi .ziplưu trữ cho phép truy cập ngẫu nhiên vào nội dung của chúng. (Một số định dạng mới hơn, chẳng hạn như .7z, hỗ trợ lưu trữ rắn và không rắn, cũng như các khối rắn có kích thước khác nhau trong kho lưu trữ lớn hơn.) Việc tiếp tục sử dụng tarkết hợp với tiện ích nén riêng là vấn đề truyền thống và tương thích; đồng thời, .7z.zipkhông hỗ trợ siêu dữ liệu hệ thống tập tin Unix như quyền.

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.