Lợi thế của việc sử dụng 'tar' ngày hôm nay là gì?


209

Tôi biết rằng tarđã được tạo cho lưu trữ băng từ ngày trước, nhưng hôm nay chúng tôi có các định dạng tệp lưu trữ vừa tổng hợp các tệp và thực hiện nén trong cùng một định dạng tệp logic.

Câu hỏi:

  • Có bị phạt hiệu năng trong các giai đoạn tổng hợp / nén / giải nén khi sử dụng được targói gọn trong gziphoặc bzip2, khi so sánh với việc sử dụng định dạng tệp tổng hợp và nén trong cùng một cấu trúc dữ liệu không? Giả sử thời gian chạy của máy nén được so sánh là giống hệt nhau (ví dụ gzip và Deflate là tương tự nhau).

  • Có các tính năng của tarđịnh dạng tệp mà các định dạng tệp khác, chẳng hạn như .7z.zipkhông có?

  • Kể từ khi tarlà như một định dạng tập tin cũ, và các định dạng tập tin mới tồn tại ngày hôm nay, tại sao lại là tar(cho dù là gói gọn trong gzip, bzip2hoặc thậm chí mới xz) vẫn sử dụng rất rộng rãi hiện nay trên GNU / Linux, Android, BSD, và hệ điều hành UNIX khác như vậy, đối với tệp chuyển, nguồn chương trình và tải xuống nhị phân, và đôi khi là định dạng trình quản lý gói?


33
Tôi không đồng ý rằng nó "lãng phí thời gian". Nếu bạn có nghĩa là hiệu suất, không có hình phạt hiệu suất thực tế cho tar vì định dạng rất hiệu quả. Nếu bạn có nghĩa là nó lãng phí thời gian của bạn , tôi không thấy làm thế nào tar xvzfkhó hơn 7z -x...
allquixotic

41
Anh ta dường như đang than thở về việc tar không lưu trữ một danh mục khi bắt đầu, vì vậy các công cụ nén gui muốn liệt kê nội dung trước khi giải nén phải giải nén toàn bộ tar chỉ để liệt kê nội dung, sau đó họ giải nén lại khi giải nén .
psusi

10
@MarcusJ: bạn nghĩ 7z bằng cách nào đó kỳ diệu biết nơi mỗi tệp bắt đầu trong một kho lưu trữ? Bên cạnh đó, các thuật toán nén thông thường (gzip, bzip2) hoạt động với việc truyền phát nội dung: không cần phải hoàn thành 100% giai đoạn đầu tiên trước khi tiếp theo.
souser12345

11
Ngoài ra @MarcusJ bạn dường như nhầm lẫn hai điều khác nhau: khi bạn làm tar xvzf, dữ liệu không nén không được ghi vào đĩa cứng ở .tarđịnh dạng! Bạn đúng rằng nếu bạn chạy gunzip blah.tar.gzvà sau đó tar xf blah.tar, nó sẽ ghi dữ liệu vào đĩa hai lần (một lần là .tar và một lần nữa dưới dạng tệp trong hệ thống tệp), nhưng không ai thực sự làm theo cách đó. Việc tar xzfsử dụng một ống UNIX (về cơ bản là một bản sao bộ nhớ) để chuyển dữ liệu không nén từ gzip(hoặc bất kỳ máy nén nào) sang tar, do đó dữ liệu không được ghi vào đĩa theo .tarđịnh dạng.
allquixotic

14
Một điều tôi biết là tar(đặc biệt là nén) hành xử khủng khiếp khi nói đến tham nhũng dữ liệu. Dữ liệu dự phòng / phục hồi nhỏ được thêm vào bởi các định dạng hiện đại có giá trị vàng
PPC

Câu trả lời:


178

Phần 1: Hiệu suất

Dưới đây là so sánh hai quy trình công việc riêng biệt và những gì họ làm.

Bạn có một tệp trên đĩa blah.tar.gz, giả sử, 1 GB dữ liệu được nén bằng gzip, khi không được nén, chiếm 2 GB (tỷ lệ nén là 50%).

Cách mà bạn sẽ tạo ra điều này, nếu bạn thực hiện lưu trữ và nén riêng, sẽ là:

tar cf blah.tar files ...

Điều này sẽ dẫn đến blah.tarđó là một tập hợp đơn thuần của files ...hình thức không nén.

Sau đó, bạn sẽ làm

gzip blah.tar

Điều này sẽ đọc nội dung blah.tartừ đĩa, nén chúng thông qua thuật toán nén gzip, ghi nội dung vào blah.tar.gz, sau đó hủy liên kết (xóa) tệp blah.tar.

Bây giờ, hãy giải nén!

Cách 1

Bạn có blah.tar.gz, bằng cách này hay cách khác.

Bạn quyết định chạy:

gunzip blah.tar.gz

Điều này sẽ

  • ĐỌC nội dung dữ liệu nén 1 GB của blah.tar.gz.
  • QUY TRÌNH dữ liệu nén thông qua bộ gzipgiải nén trong bộ nhớ.
  • Khi bộ nhớ đệm lấp đầy dữ liệu "một khối", VIẾT dữ liệu không nén vào tệp blah.tartrên đĩa và lặp lại cho đến khi tất cả dữ liệu nén được đọc.
  • Bỏ liên kết (xóa) tệp blah.tar.gz.

Bây giờ, bạn có blah.tartrên đĩa, không nén nhưng chứa một hoặc nhiều tệp trong đó, với chi phí cấu trúc dữ liệu rất thấp. Kích thước tệp có thể là một vài byte lớn hơn tổng của tất cả dữ liệu tệp.

Bạn chạy:

tar xvf blah.tar

Điều này sẽ

  • ĐỌC 2 GB nội dung dữ liệu không nén blah.tartarcấu trúc dữ liệu của định dạng tệp, bao gồm thông tin về quyền tệp, tên tệp, thư mục, v.v.
  • VIẾT 2 GB dữ liệu cộng với siêu dữ liệu vào đĩa. Điều này bao gồm: dịch cấu trúc dữ liệu / thông tin siêu dữ liệu sang tạo các tệp và thư mục mới trên đĩa khi thích hợp hoặc viết lại các tệp và thư mục hiện có với nội dung dữ liệu mới.

Tổng dữ liệu chúng tôi ĐỌC từ đĩa trong quá trình này là 1 GB (đối với gunzip) + 2 GB (đối với tar) = 3 GB.

Tổng dữ liệu chúng tôi VIẾT vào đĩa trong quá trình này là 2 GB (đối với gunzip) + 2 GB (đối với tar) + một vài byte cho siêu dữ liệu = khoảng 4 GB.

Cách 2

Bạn có blah.tar.gz, bằng cách này hay cách khác.

Bạn quyết định chạy:

tar xvzf blah.tar.gz

Điều này sẽ

  • ĐỌC các nội dung dữ liệu nén 1 GB của blah.tar.gz, một khối tại một thời điểm, vào bộ nhớ.
  • QUY TRÌNH dữ liệu nén thông qua bộ gzipgiải nén trong bộ nhớ.
  • Khi bộ nhớ đệm đầy, nó sẽ dẫn dữ liệu đó, trong bộ nhớ, đến tarbộ phân tích định dạng tệp, sẽ đọc thông tin về siêu dữ liệu, v.v. và dữ liệu tệp không nén.
  • Khi bộ nhớ đệm lấp đầy trong tartrình phân tích cú pháp tệp, nó sẽ VIẾT dữ liệu không nén vào đĩa, bằng cách tạo tệp và thư mục và điền vào chúng với nội dung không nén.

Tổng dữ liệu chúng tôi ĐỌC từ đĩa trong quá trình này là 1 GB dữ liệu nén, theo chu kỳ.

Tổng dữ liệu chúng tôi VIẾT vào đĩa trong quá trình này là 2 GB dữ liệu không nén + một vài byte cho siêu dữ liệu = khoảng 2 GB.

Nếu bạn nhận thấy, lượng đĩa I / O trong Way 2giống hệt với đĩa I / O được thực hiện bởi, nói, Ziphoặc 7-Zip chương trình, điều chỉnh cho bất kỳ sự khác biệt về tỷ lệ nén.

Và nếu tỷ lệ nén là mối quan tâm của bạn, hãy sử dụng Xzmáy nén để đóng gói tarvà bạn có kho lưu trữ TAR của LZMA2 , hiệu quả tương đương với thuật toán tiên tiến nhất có sẵn cho 7-Zip :-)

Phần 2: Tính năng

tar lưu trữ các quyền Unix trong siêu dữ liệu tệp của nó, và rất nổi tiếng và đã được thử nghiệm để đóng gói thành công một thư mục với tất cả các loại quyền khác nhau, các liên kết tượng trưng, ​​v.v. Có nhiều trường hợp người ta có thể cần phải tạo ra một loạt các tệp vào một tệp hoặc luồng duy nhất, nhưng không nhất thiết phải nén nó (mặc dù nén rất hữu ích và thường được sử dụng).

Phần 3: Khả năng tương thích

Nhiều công cụ được phân phối ở dạng nguồn hoặc nhị phân như .tar.gz hoặc .tar.bz2, vì đây là định dạng tệp "mẫu số chung thấp nhất": giống như hầu hết người dùng Windows có quyền truy cập vào bộ giải nén .zip hoặc .rar, hầu hết các cài đặt Linux , ngay cả cơ bản nhất, sẽ có quyền truy cập ít nhất tar và gunzip, bất kể cũ hay giảm xuống. Ngay cả các phần mềm Android cũng có quyền truy cập vào các công cụ này.

Các dự án mới nhắm mục tiêu đối tượng chạy phân phối hiện đại có thể phân phối rất tốt ở định dạng hiện đại hơn, chẳng hạn như .tar.xz (sử dụng định dạng nén Xz (LZMA), nén tốt hơn gzip hoặc bzip2) hoặc .7z, tương tự như các định dạng tệp ZIP hoặc RAR ở chỗ nó vừa nén và chỉ định bố cục để đóng gói nhiều tệp vào một tệp.

Bạn không thấy .7z được sử dụng thường xuyên hơn vì cùng lý do nhạc không được bán từ các cửa hàng tải xuống trực tuyến ở các định dạng hoàn toàn mới như Opus hoặc video trong WebM . Khả năng tương thích với những người chạy các hệ thống cổ xưa hoặc rất cơ bản.


Kudos cho câu trả lời tuyệt vời với tất cả các nội dung được phân tách dưới ba tiêu đề riêng biệt.
JFW

2
"Phần 3: Tính tương thích" dường như đã được sao chép từ câu trả lời của @ Kruug.
titaniumdecoy

23
@titaniumdecoy Bạn có nhận thấy rằng chính allquixotic đã viết phần đó và chỉnh sửa nó thành câu trả lời của Kruug?
slhck 17/03/13

2
Cảm ơn đã chỉ ra rằng, tôi đã không thông báo. Tuy nhiên, có vẻ hơi ngớ ngẩn với tôi khi có một khối văn bản giống hệt nhau trong hai câu trả lời khác nhau trên trang này.
titandecoy

1
Câu trả lời này tại sao tarphù hợp với hệ sinh thái lưu trữ (nghĩa là tổng hợp các tệp lại với nhau, mang lại hiệu suất tăng và một số lợi ích khác như tiết kiệm quyền), nhưng nó không giải quyết được tại sao các giải pháp thay thế hiện đại như darkhông được sử dụng tại chỗ. Nói cách khác, câu trả lời này biện minh cho việc sử dụng các trình tổng hợp tệp, nhưng tarbản thân nó không phải là phần mềm.
gabious

101

Điều này đã được trả lời trên Stack Overflow .

bzip và gzip hoạt động trên các tệp đơn lẻ, không phải các nhóm tệp. Zip cũ đơn giản (và pkzip) hoạt động trên các nhóm tệp và có khái niệm về kho lưu trữ tích hợp.

Triết lý * nix là một trong những công cụ nhỏ thực hiện các công việc cụ thể rất tốt và có thể được kết nối với nhau. Đó là lý do tại sao có hai công cụ ở đây có các nhiệm vụ cụ thể và chúng được thiết kế để phù hợp với nhau. Điều đó cũng có nghĩa là bạn có thể sử dụng tar để nhóm các tệp và sau đó bạn có lựa chọn công cụ nén (bzip, gzip, v.v.).

Nhiều công cụ được phân phối ở dạng nguồn hoặc nhị phân như .tar.gz hoặc .tar.bz2, vì đây là định dạng tệp "mẫu số chung thấp nhất": giống như hầu hết người dùng Windows có quyền truy cập vào bộ giải nén .zip hoặc .rar, hầu hết các cài đặt Linux , ngay cả cơ bản nhất, sẽ có quyền truy cập ít nhất targunzip, bất kể bao nhiêu tuổi hoặc giảm xuống. Ngay cả các phần mềm Android cũng có quyền truy cập vào các công cụ này.

Các dự án mới nhắm mục tiêu đối tượng chạy phân phối hiện đại có thể phân phối rất tốt ở định dạng hiện đại hơn, chẳng hạn như .tar.xz(sử dụng định dạng nén Xz ( LZMA ), nén tốt hơn gzip hoặc bzip2) hoặc .7z, tương tự như ZIP hoặc RAR định dạng tệp trong đó vừa nén và chỉ định bố cục để đóng gói nhiều tệp vào một tệp.

Bạn không thấy .7z được sử dụng thường xuyên hơn vì cùng lý do nhạc không được bán từ các cửa hàng tải xuống trực tuyến ở các định dạng hoàn toàn mới như Opus hoặc video trong WebM . Khả năng tương thích với những người chạy các hệ thống cổ xưa hoặc rất cơ bản là rất quan trọng.


7
Xin chào @Kruug, tôi đã chỉnh sửa bài đăng của bạn chỉ để đưa ra một viễn cảnh thực tế về lý do tại sao mọi người vẫn chọn sử dụng các định dạng này khi họ có lựa chọn sử dụng một cái gì đó khác. Tôi đã không thay đổi văn bản bạn đã có. Điều này chỉ để đảm bảo rằng những gì dường như là câu trả lời chính tắc cho câu hỏi này sẽ có hình ảnh đầy đủ. Vui lòng chỉnh sửa chỉnh sửa của tôi nếu bạn muốn :)
allquixotic

5
@allquixotic khởi đầu ai? Chỉnh sửa chỉnh sửa và chỉnh sửa để bạn có thể chỉnh sửa chỉnh sửa ...
SnakeDoc

21
Câu trả lời này chắc chắn là một trường hợp "Đôi khi tôi bị thổi bay bởi những sự ủng hộ không đáng có". Nó không giải quyết vấn đề cốt lõi của câu hỏi với việc liệt kê nội dung của tar nén và nó thậm chí không phải là một câu trả lời gốc!
Ярослав Рахматуллин

5
-1 cho công lý tuyệt vời. điều này nên được bình luận
wim

6
Tôi không mua đối số mẫu số chung / thấp nhất; Tôi nhớ trên các hệ thống mới (mặt trời) thường xuyên phải tải xuống gzip / gunzip (từ sunfreeware) chỉ để cài đặt phần mềm đóng gói tar.gz khác (cộng với gnu tar, vì tar bị hút nắng). Đối với mẫu số kế thừa / phổ biến thấp hơn, bạn đã có tar.Z(nén / giải nén). Sự phát triển của các tiện ích là một luồng không đổi (không có ý định chơi chữ) của sự thay đổi và cải tiến: Z => zip => gz => bz2 => 7z => xz (hoặc bất kỳ thứ tự nào bạn thích). Đối với vai trò của tar, một số tiện ích chỉ hủy / nén và vẫn yêu cầu tar để đóng gói phân cấp tệp.
michael

63

Tar có một tập hợp các hoạt động và sửa đổi phong phú, biết tất cả về các hệ thống tệp Unix. Nó biết về các quyền của Unix, về các thời điểm khác nhau được liên kết với các tệp, về các liên kết cứng, về các liên kết mềm (và về khả năng các liên kết tượng trưng có thể giới thiệu các chu kỳ trong biểu đồ hệ thống tệp) và cho phép bạn chỉ định một số cách khác nhau để quản lý tất cả dữ liệu này .

  • Bạn có muốn dữ liệu được trích xuất để duy trì thời gian truy cập tệp không? Tar có thể làm điều đó. Để giữ quyền? Tar có thể làm điều đó.

  • Bạn có muốn giữ các liên kết tượng trưng như các liên kết tượng trưng? Tar làm điều đó theo mặc định. Bạn muốn sao chép mục tiêu thay thế? Tar có thể làm điều đó.

  • Bạn có muốn chắc chắn dữ liệu liên kết cứng chỉ được lưu trữ một lần (nghĩa là để làm điều đúng)? Tar làm điều đó.

  • Bạn có muốn xử lý tốt các tập tin thưa thớt? Tar có thể làm điều đó.

  • Bạn có muốn dữ liệu không nén (tại sao?)? Tar có thể làm điều đó. Để nén bằng gzip? Tar có thể làm điều đó. Với bzip2? Tar có thể làm điều đó. Với các chương trình nén bên ngoài tùy ý? Tar có thể làm điều đó.

  • Bạn có muốn viết hoặc khôi phục đến / từ một thiết bị thô không? Định dạng của Tar xử lý tốt.

  • Bạn có muốn thêm tập tin vào một kho lưu trữ hiện có? Tar có thể làm điều đó. Để khác biệt hai kho lưu trữ để xem những gì thay đổi? Tar có thể làm điều đó. Để chỉ cập nhật những phần của kho lưu trữ đã thay đổi? Tar có thể làm điều đó.

  • Bạn có muốn chắc chắn rằng bạn không lưu trữ trên nhiều hệ thống tập tin không? Tar có thể làm điều đó.

  • Bạn có muốn chỉ lấy các tệp mới hơn bản sao lưu cuối cùng của mình không? Tar có thể làm điều đó.

  • Bạn có muốn giữ tên hoặc số người dùng và nhóm? Tar có thể làm một trong hai.

  • Bạn có cần bảo toàn các nút thiết bị (như các tệp trong /dev) để sau khi giải nén, hệ thống sẽ chạy chính xác không? Tar có thể làm điều đó.

Tar đã phát triển để xử lý rất nhiều trường hợp sử dụng trong nhiều thập kỷ và thực sự biết rất nhiều về những điều mọi người muốn làm với các hệ thống tập tin Unix.


12
Bạn không cần GNU tar để sử dụng một máy nén tùy ý: chỉ cần nói tar để ghi tệp lưu trữ vào thiết bị xuất chuẩn f -và chuyển nó đến máy nén.
Ilmari Karonen

3
"Bạn có muốn dữ liệu không nén (tại sao?)?" Tôi sử dụng tarrất thường xuyên để sao chép một cây hệ thống tập tin từ nơi này sang nơi khác và giữ quyền, v.v., và nén trong trường hợp này chỉ cần thêm chu kỳ CPU. Ví dụ tar cf - * | tar xf - -C /somewhere.
Steve

1
Ngoài ra, bạn sẽ muốn có tệp .tar khi hệ thống tệp đích thực hiện sao chép lại. Tạo các tài liệu lưu trữ nén trên một hệ thống tập tin thực hiện sao chép lại sẽ làm giảm đáng kể tỷ lệ khấu trừ. Ví dụ: Chúng tôi đã từng xóa tệp tar.gz $ 10.000,00; có nghĩa là, nó đã chiếm dung lượng lưu trữ trị giá $ 10k vì ai đó đã sử dụng nén.
Aaron

Chu kỳ CPU @Steve có thể rẻ hơn so với IO đĩa cho các thuật toán như LZ4 hoặc LZO. Đó là lý do tại sao chúng được sử dụng trong zram và các hệ thống tệp nén trong suốt như NTFS, ZFS, Btrfs ... vì vậy đôi khi nó thực sự nhanh hơn nén vì số lượng đĩa IO bị giảm đáng kể
phuclv

30

Bạn nhầm lẫn giữa hai quá trình lưu trữnén riêng biệt .

Lý do sử dụng lưu trữ

Chẳng hạn, một lý do để sử dụng lưu trữ mà không nén là nếu một loạt các tệp được sao chép từ máy chủ này sang máy chủ khác. Một lệnh như sau

tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"

có thể tăng tốc mọi thứ đáng kể. Nếu tôi biết rằng các tệp không thể được nén hoặc nếu SSH được thiết lập với nén, nó có thể tiết kiệm đáng kể thời gian CPU. Chắc chắn, người ta có thể sử dụng một công cụ nén hiện đại hơn với chức năng lưu trữ và tắt tính năng nén. Ưu điểm của tarlà, tôi có thể mong đợi nó có sẵn trên mọi hệ thống.

Lý do sử dụng trình lưu trữ với nén gzip

Một lý do mà tôi sử dụng tarvới gziplà: tốc độ! Nếu tôi muốn chuyển một vài GiB tệp văn bản từ nơi này sang nơi khác, tôi không quan tâm đến việc vắt kiệt các byte cuối cùng, vì việc nén chỉ được sử dụng để truyền, không phải để lưu trữ lâu dài. Trong những trường hợp tôi sử dụng gzip, không sử dụng tối đa CPU (ngược lại với 7-Zip chẳng hạn), điều đó có nghĩa là tôi lại bị ràng buộc I / O và không bị ràng buộc CPU. Và một lần nữa: gzipcó thể được coi là có sẵn ở khắp mọi nơi.

Lý do cho việc sử dụng tarủng hộ scp, rsyncvv

Nó đập scpnếu bạn có nhiều tệp nhỏ để sao chép (ví dụ: thư mục thư có hàng trăm nghìn tệp). rsync, tuyệt vời như nó là, có thể không có sẵn ở khắp mọi nơi. Hơn nữa, rsyncchỉ thực sự thanh toán nếu một phần của các tệp - hoặc một phiên bản cũ hơn - - đã có mặt trên đích. Đối với bản sao ban đầu tarlà nhanh nhất, có nén hay không, tùy thuộc vào dữ liệu thực tế.


1
Nhưng nếu bạn đang lưu trữ, tại sao không nén? Được rồi, vâng, nó có thể tiết kiệm thời gian cho các tệp không dễ nén, nhưng sau đó các nhà lưu trữ có lẽ nên biết rằng âm nhạc chẳng hạn, không nén được, ngoại trừ các tiêu đề.
MarcusJ

2
Bạn có thể không cần, hoặc nội dung của bạn có thể không nén được.
Hasturkun

4
Vì lý do hiệu suất, việc sử dụng tổng hợp tệp không nén thường dễ dàng hơn khi gửi dữ liệu qua các liên kết mạng băng thông rất cao vượt quá tốc độ mà máy nén có thể nén dữ liệu. Điều này có thể đạt được ví dụ với Gigabit Ethernet; chỉ có một vài thuật toán nén được thiết kế tốt, cũng có tỷ lệ nén rất kém, có thể nén dữ liệu nhanh ngay cả trên CPU máy tính để bàn lớn. Trên một thiết bị nhúng, bạn thậm chí còn có ít thời gian CPU hơn để làm việc.
allquixotic

3
Điều này không chỉ giúp tăng tốc mọi thứ mà còn cho phép duy trì quyền sở hữu tệp, dấu thời gian và thuộc tính (nếu đặc quyền người dùng cho phép)
Andre Holzner

3
@AndreHolzner Phải. Tôi thường làm tar cf - . | (cd ~/somewhere; tar xvf -). Nó thực sự hữu ích khi không phải đợi cho đến khi chỉ mục trung tâm được viết (ví dụ như trong tệp zip).
dùng239558

24

Thêm vào các câu trả lời hay khác ở đây, tôi thích kết hợp tar+ gzip|bzip2|xzchủ yếu vì các tệp nén này giống như các luồng và bạn có thể dẫn chúng dễ dàng.

Tôi cần giải nén một tập tin có sẵn trên internet. Với một trong hai ziphoặc rarđịnh dạng tôi phải tải về nó đầu tiên và sau đó giải nén nó. Với tar.{gz,bz2,xz}tôi có thể tải xuống và giải nén trong cùng một bước, mà không cần phải lưu trữ nén theo phương thức trên đĩa:

curl -s http://example.com/some_compressed_file.tar.gz | tar zx

Điều này sẽ chỉ để lại các tệp không nén trong đĩa của tôi và sẽ tăng tốc toàn bộ quá trình, vì trước tiên tôi không tải xuống toàn bộ tệp và sau khi quá trình tải xuống kết thúc, tôi giải nén nó. Thay vào đó, tôi giải nén nó trong khi nó đang tải xuống. Bạn không thể làm điều này với ziphoặc rartập tin.


2
Tôi không biết về rar (đó là một chương trình khủng khiếp dường như đã trở nên phổ biến với những tên cướp biển vì khả năng phân tách thành nhiều tệp nhỏ hơn), nhưng bạn có thể truyền phát zip tốt. Trang người đàn ông thậm chí đề cập đến nó. Nó cũng có lợi thế là có thể trích xuất hoặc cập nhật các tệp từ giữa một kho lưu trữ lớn một cách hiệu quả, mặc dù tar có xu hướng nén tốt hơn một chút. Nén so với truy cập ngẫu nhiên là một sự đánh đổi.
psusi

3
@psusi không chính xác. Bạn có thể thực hiện các bản hack như thế này , nhưng những gì nó làm là tải xuống tất cả các tệp trong bộ nhớ và sau đó giải nén nó, thay vì giải nén trong khi tải xuống. Và funzipchỉ trích xuất tập tin đầu tiên trong zipfile, không phải tất cả.
Carlos Campderrós

2
@Stu chỉ để làm rõ, không phải là vấn đề, chỉ là tối ưu hóa thời gian của bạn (Tôi không quan tâm đến không gian nếu đó là những gì bạn nghĩ)
Carlos Campderrós 15/03/13

1
Cả hai bên đều hoạt động: Bạn cũng có thể tar ở một bên và cả bên kia:tar zc /some/folder | ssh user@host "cd /other/folder && tar zx"
Carlos Campderrós 15/03/13

1
@psusi như tôi nhớ từ thời xưa khi sử dụng pkzip để lưu trữ tệp trên nhiều đĩa mềm, danh mục cửa hàng zip ở cuối kho lưu trữ. Nó luôn yêu cầu đĩa mềm cuối cùng để bắt đầu trích xuất hoặc hiển thị danh mục. Vì vậy, en.wikipedia.org/wiki/File:ZIP-64_Iternal_Layout.svg
Mikhail Moskalev 15/03/13

13

Có một số lý do để gắn bó với (GNU) Tar.

Nó là:

  • GPL được cấp phép
  • hiểu theo nghĩa triết học Unix
    • công cụ mục đích duy nhất, có khả năng thực hiện một số nhiệm vụ
  • tài liệu tốt và có nhiều tính năng đáng tin cậy
  • tương thích với một số thuật toán nén
  • dễ sử dụng và mọi người đã phát triển thói quen với nó
  • có sẵn rộng rãi
  • Tôi cảm thấy ấm áp và mờ nhạt bên trong khi sử dụng phần mềm được khởi động bởi RMS (không bao gồm Emacs )

Nếu thịt bò cụ thể của bạn phải "giải nén" một tarball trước khi có thể đọc nội dung, thì có lẽ bạn đã đúng. WinRAR7-Zip làm điều đó tự động. Tuy nhiên, có những cách giải quyết đơn giản cho vấn đề này, chẳng hạn như ghi lại nội dung của một kho lưu trữ ở dạng không nén.


1
Đó là phần mềm miễn phí - Rất nhiều trong số đó. Nó rất tốt trong những gì nó làm - Khó so với các công cụ khác Nó được ghi chép tốt và có nhiều tính năng - Các tính năng hầu như không được sử dụng và dễ sử dụng. Nó hỗ trợ một số thuật toán nén - Không nhiều như một số thuật toán khác
Griffin

4
Các vị thần Unix đã tạo ra nó - do đó chúng ta phải sử dụng nó!
SnakeDoc

28
Tar cũng lưu trữ các quyền UNIX nguyên bản, và rất nổi tiếng và được thử nghiệm. Có nhiều hơn một vài trường hợp trong đó người ta có thể cần phải đưa một loạt các tệp vào một tệp hoặc luồng, nhưng không nhất thiết phải nén nó.
LawrenceC

3
May mắn thay tar không chỉ giới hạn ở các phiên bản GNU. Trong khi GNU tar chắc chắn là một phần mềm tốt, các giao diện liên quan đến libarchive + nhanh hơn và dễ dàng nhúng vào các dự án phần mềm khác. Bạn có thể đưa ra một lập luận cho tar mà không biến nó thành một cuộc chiến cấp phép.
Lucas Holt

1
Tôi không mỉa mai. Tôi thích RMS và cách anh ấy thực hiện niềm tin của mình.
Ярослав Рахматуллин

11

Các định dạng tệp như .zip yêu cầu phần mềm đọc phần cuối của tệp trước để đọc danh mục tên tệp. Ngược lại, tar lưu trữ thông tin đó với luồng nén.

Ưu điểm của cách tar là bạn có thể giải nén dữ liệu trong khi đọc nó từ một đường ống không thể tìm kiếm, như ổ cắm mạng.

Ưu điểm của cách zip là, đối với một tệp tĩnh trên đĩa, bạn có thể duyệt nội dung và siêu dữ liệu mà không cần giải nén toàn bộ kho lưu trữ trước.

Cả hai đều có công dụng của chúng, tùy thuộc vào những gì bạn đang làm.


5
Không, bạn có thể vừa đọc và ghi tệp zip dưới dạng luồng từ và đến đường ống.
Đánh dấu Adler

Điều đó có thể được triển khai cụ thể sau đó, nó chắc chắn không được hỗ trợ bởi pkzip gốc.
xorsyst 15/03/13

1
Có, phần mềm phải được viết để hỗ trợ nó. Định dạng zip hỗ trợ nó hoàn toàn, với các mô tả dữ liệu có thể theo dữ liệu nén với độ dài và CRC.
Đánh dấu Adler

@MarkAdler, phần mềm gì? Infozip không hỗ trợ giải nén từ đường ống.
psusi


11

Dường như có một chút miễn cưỡng khi trả lời trực tiếp tất cả các câu hỏi của bạn, với một ưu tiên rõ ràng là sử dụng câu hỏi của bạn như một điểm khởi đầu cho sự hòa giải. Vì vậy, tôi sẽ cho nó một shot.

Có bị phạt hiệu năng trong các giai đoạn tổng hợp / nén / giải nén khi sử dụng tar được đóng gói trong gzip hoặc bzip2, khi so sánh với việc sử dụng định dạng tệp tổng hợp và nén trong cùng một cấu trúc dữ liệu không? Giả sử thời gian chạy của máy nén được so sánh là giống hệt nhau (ví dụ gzip và Deflate là tương tự nhau).

Trong thực tế vì tar và gzip thường là hai quá trình, bạn thậm chí còn nhận được một lợi ích tốc độ đa lõi mà một trình lưu trữ như zip của Info-ZIP không cung cấp. Về tỷ lệ nén, tar + gzip thường sẽ tốt hơn đáng kể so với zip với độ phân giải vì cái trước có thể có lợi từ sự tương quan giữa các tệp, trong khi tệp sau nén riêng các tệp. Lợi ích nén đó chuyển thành lợi ích tốc độ khi giải nén, do kho lưu trữ được nén nhiều hơn sẽ giải nén trong thời gian ngắn hơn.

Có các tính năng của định dạng tệp tar mà các định dạng tệp khác, chẳng hạn như .7z và .zip không có?

Có, tar được thiết kế cho Unix và đã phát triển qua nhiều năm để có thể ghi lại và khôi phục chính xác mọi ngóc ngách nhỏ của các hệ thống tệp Unix, ngay cả hệ thống tệp Mac OS X Unix khó tính và thô lỗ hơn. zip có thể giữ lại nhiều siêu dữ liệu như quyền, thời gian, chủ sở hữu, nhóm và liên kết tượng trưng, ​​nhưng vẫn không phải là tất cả. Ví dụ, cả zip và 7z đều không thể nhận ra hoặc tận dụng các tệp thưa thớt, cũng như không biết hoặc có thể khôi phục các liên kết cứng.

Vì tar là một định dạng tệp cũ và các định dạng tệp mới hơn tồn tại ngày nay, tại sao tar (dù được gói trong gzip, bzip2 hoặc thậm chí là xz mới) ngày nay vẫn được sử dụng rộng rãi trên GNU / Linux, Android, BSD và UNIX khác hệ điều hành, để chuyển tập tin, nguồn chương trình và tải xuống nhị phân, và đôi khi là định dạng của trình quản lý gói?

Rất nhiều câu trả lời tốt khác ở đây. Điều tốt nhất là nó chỉ hoạt động và bạn có thể tiếp tục cập nhật nó thành các định dạng nén tốt hơn (ví dụ xz) và vẫn sử dụng cùng định dạng tar và thậm chí cùng một tiện ích tar được biên dịch. Nếu bạn chỉ muốn đóng gói một loạt các công cụ, và sau đó giải nén tất cả ở đầu bên kia, thì có rất ít lý do để sử dụng bất cứ thứ gì ngoại trừ một trong những phần mềm cũ nhất, đầy đủ nhất và được gỡ lỗi nhất hiện có.

Nếu bạn muốn truy cập ngẫu nhiên, cập nhật một phần hoặc những thứ khác cần xử lý với nội dung từng phần hoặc bạn muốn có thể tìm hiểu những gì trong đó mà không cần đọc toàn bộ, thì bạn sẽ muốn sử dụng một định dạng khác.


CW là viết tắt của Community Wiki . Xem thêm bài viết "Wiki cộng đồng" là gì? .
ctype.h

Tôi đoán đó là CW vì câu hỏi có hơn 15 câu trả lời. Khi bạn đăng câu trả lời này, vì đó là câu thứ 15, câu hỏi và tất cả các câu trả lời đã được đánh dấu CW.
ctype.h

Tôi không thấy câu trả lời này nói điều gì mà không câu trả lời nào khác làm được, ngoài việc trích dẫn trực tiếp các câu hỏi (mà tôi đã viết, BTW, vì bản sửa đổi ban đầu của câu hỏi đủ khủng khiếp để được đóng lại là NARQ). Rất cố gắng nhưng.
allquixotic 20/03/13

Ừm, ok. Bất cứ điều gì bạn muốn nghĩ là tốt. Câu trả lời của bạn cũng như bất kỳ câu trả lời nào khác dường như giải quyết cho dù có một hình phạt hiệu suất. Câu trả lời của bạn không giải quyết sự khác biệt nén đáng chú ý, mặc dù những người khác làm. Vì bạn không thực sự giải quyết hiệu suất (phần hiệu suất của bạn thực sự là về quy trình làm việc, không có gì về hiệu suất), không có câu trả lời nào khác trả lời mọi thứ ở một nơi. Thật thú vị khi bạn viết câu hỏi về hình phạt hiệu suất, nhưng bạn đã không trả lời nó! Đi hình.
Đánh dấu Adler

Nhân tiện, cuộc thảo luận về quy trình làm việc của bạn là về một điều không ai từng làm, đó là ghi một tệp tar vào đĩa và sau đó nén nó. tar luôn được sử dụng hoặc gọi trực tiếp chương trình nén hoặc trực tiếp vào đường ống đến chương trình nén.
Đánh dấu Adler

11

Hiệu suất

Sự khác biệt lớn là thứ tự nén và lưu trữ được thực hiện. tarLưu trữ, sau đó có thể tùy ý gửi kho lưu trữ đến máy nén, và zipxây dựng kho lưu trữ, và nén dữ liệu tệp trong các khối 32 KB khi nó được chèn vào kho lưu trữ. Bằng cách chia dữ liệu tệp thành các phần nhỏ và nén chúng riêng biệt, nó cho phép bạn trích xuất các tệp hoặc phần cụ thể của tệp mà không phải giải nén mọi thứ trong kho lưu trữ trước đó. Nó cũng ngăn máy nén xây dựng một từ điển rất lớn trước khi nó được khởi động lại. Điều này có nghĩa là nén sẽ đi nhanh hơn, nhưng không cho tỷ lệ tốt như nén toàn bộ với kích thước từ điển lớn hơn.

Bạn có thể hình dung nó bằng cách nghĩ về hai tệp, trong đó 500 byte đầu tiên của tệp thứ hai giống với 500 byte cuối cùng của tệp đầu tiên. Với zipphương thức, trình nén được khởi động lại cho tệp thứ hai, vì vậy không nhớ rằng tệp đầu tiên kết thúc trong cùng một dữ liệu, vì vậy nó không thể xóa dữ liệu trùng lặp khỏi tệp thứ hai.

Phổ biến

Có rất nhiều định dạng khác có một số lợi thế hơn tar. 7-Zip không lưu trữ quyền truy cập tệp Unix, nhưng darcó, và zipcó thể, và cả ba lưu trữ một chỉ mục, cho phép duyệt nhanh, trích xuất một tập hợp con các tệp và cập nhật tệp trong kho lưu trữ. Họ cũng có thể sử dụng CPU đa lõi để nén.

Lý do mọi người vẫn sử dụng tarlà cùng một lý do mọi người vẫn sử dụng Windows và Flash : mọi người không thích thay đổi. Không có lý do mạnh mẽ để thay đổi, mọi người chỉ bám vào những gì họ biết. darkhông cung cấp đủ lợi ích để biện minh cho việc xuất bản các tệp theo định dạng khi hầu hết mọi người đã tarcài đặt và rất ít người biết đến dar, do đó quán tính đơn giản giữ chúng tôi theo tiêu chuẩn cũ.


2
zip có thể lưu trữ và khôi phục các quyền Unix. Các tiện ích zip và giải nén từ InfoZIP thường được phân phối với hệ thống Unix thực hiện việc này.
Đánh dấu Adler

3
zip không nén tập tin trong khối 32K. Bạn đang nhầm lẫn kích thước cửa sổ trượt là 32K với cách nén được thực hiện.
Đánh dấu Adler

1
gzip -9 không có từ điển 900 kB. Tất cả các cấp của gzip đều sử dụng từ điển 32K. Bạn có thể nghĩ về bzip2.
Đánh dấu Adler

Quá nhiều thông tin sai trong một câu trả lời.
Đánh dấu Adler

1
Bạn cần phải sửa chữa câu trả lời của bạn hoặc xóa câu trả lời của bạn.
Đánh dấu Adler

7

Tar được tạo để thực hiện sao lưu toàn bộ sao lưu độ trung thực của hệ thống tệp của bạn, không chỉ để truyền tệp xung quanh. Như vậy, tiện ích tar là tiện ích đầy đủ nhất để tạo một kho lưu trữ bảo tồn mọi thứ quan trọng về cấu trúc hệ thống tệp của bạn.

Điều này bao gồm tất cả các tính năng bị thiếu trong một hoặc nhiều công cụ cạnh tranh:

  • quyền sở hữu tập tin
  • quyền truy cập tập tin
  • quyền truy cập tệp ít phổ biến hơn (ví dụ setuid, bit dính)
  • liên kết tượng trưng
  • liên kết cứng
  • mục thiết bị (nghĩa là thiết bị ký tự và khối)
  • tập tin thưa thớt
  • Các mục ACL ( không được hỗ trợ bởi tất cả các phiên bản )
  • thuộc tính mở rộng / người dùng ( không được hỗ trợ bởi tất cả các phiên bản )
  • Nhãn SElinux ( không được hỗ trợ bởi tất cả các phiên bản )

Nó cũng có --one-file-systemtùy chọn rất hữu ích khi tạo bản sao lưu.

Bất cứ khi nào một tính năng mới được thêm vào hệ thống tập tin, hỗ trợ sẽ được thêm vào tarđầu tiên (hoặc thậm chí độc quyền). Vì vậy, nó tiếp tục là cách tương thích nhất để lưu tệp.


Câu trả lời này là duy nhất có ý nghĩa. Cảm ơn bạn đã đăng nó.
gabious

5

Chúng tôi có rất nhiều tệp nén nổi xung quanh ngày hôm nay, MP3, JPG, Video, tệp tar.gz, gói JAR, RPM, DEB, v.v. Nếu bạn cần bó một bó trong số này thành một tệp duy nhất để chuyển, thì thật hữu ích khi có tiện ích 'tar' chỉ bó các tệp mà không cố nén chúng.

Nó không chỉ lãng phí thời gian và điện để cố gắng nén một tệp nén mà còn thường dẫn đến một tệp lớn hơn bản gốc.

Một công dụng khác của nó là cải thiện tốc độ nén. Chẳng hạn, nếu bạn 'tar' một bó các tệp nhật ký và sau đó gzip kết quả, bạn có thể đưa ra một tệp nhỏ hơn so với khi bạn nén trước, sau đó được gói với 'tar'. Và tất nhiên, bằng cách sử dụng tar, bạn có thể chọn bất kỳ thuật toán nén nào bạn muốn và chỉ định các tùy chọn để tối ưu hóa nén cho trường hợp sử dụng cụ thể của bạn.

Tôi thấy rằng tar 'rất phù hợp ngày hôm nay và tôi thích sử dụng ZIP hơn. Trong văn phòng của chúng tôi, mọi người dùng Windows đều cài đặt 7-zip, vì vậy, đối với chúng tôi, các tệp tar hoàn toàn tương thích đa nền tảng.


Bạn thực tế không bao giờ thấy tarcác tập tin không nén và có một lý do cho điều đó. tarsử dụng các khối rất lớn, có nghĩa là bạn nhận được rất nhiều phần đệm ở cuối tệp. Để loại bỏ tất cả các số không, hầu như luôn trả tiền cho việc sử dụng gzipmà không cho nó một ý nghĩ thứ hai.
Christian

Một ngoại lệ thú vị là mã nguồn gzip có sẵn dưới dạng tar thường, vì những lý do rõ ràng.
Đánh dấu Adler

4

Có lẽ chúng ta nên tự hỏi tại sao các định dạng tệp "mới" như vậy thực hiện cả nén và tổng hợp (và tôi sẽ thêm mã hóa) khi không được xây dựng trên tar ngay từ đầu thay vì các công cụ hoàn toàn khác nhau.

Theo tôi hiểu, có những lý do lịch sử (liên quan đến lịch sử HĐH, "bảo vệ" bằng sáng chế, khả năng bán lại phần mềm để bán các công cụ, v.v.).

Bây giờ, như các phản hồi khác đã chỉ ra, ngay cả bây giờ tar không thua kém các giải pháp khác và có thể tốt hơn trên các khía cạnh khác như khả năng làm việc trên các luồng hoặc quản lý quyền Unix.

Nếu bạn đọc bài viết trên wikipedia về tar bạn có thể thấy một sự thật thú vị khác. Bài viết thừa nhận một số thiếu sót của tar ... nhưng không đề xuất sử dụng zip thay vào đó (định dạng zip thực sự không giải quyết được những thiếu sót này) mà là DAR.

Tôi sẽ kết thúc với một liên lạc cá nhân. Vài lần trước tôi phải tạo một định dạng tệp để lưu trữ dữ liệu được mã hóa. Sử dụng tar làm cơ sở là tiện dụng (những người khác đã đưa ra lựa chọn tương tự, ví dụ tar là định dạng tổng hợp nội bộ cho các gói .deb). Rõ ràng với tôi rằng cố gắng nén dữ liệu sau khi mã hóa là hoàn toàn vô dụng, tôi phải thực hiện nén như một bước độc lập trước khi mã hóa và tôi chưa sẵn sàng sử dụng mã hóa zip (tôi muốn mã hóa hai khóa bằng khóa chung và khóa riêng) . Sử dụng tar nó làm việc như một làn gió.


3

Tôi ngạc nhiên khi không có ai đề cập đến điều này, nhưng một trong những lý do mà không thực sự là một lợi thế, nhưng một điều cần thiết là khả năng tương thích ngược. Có rất nhiều hệ thống chạy phần mềm trong nhiều thập kỷ có thể yêu tarcầu lưu trữ. Sẽ không hiệu quả nếu thuê người "sửa chữa" tất cả các hệ thống cũ.


3

tar là UNIX vì UNIX là tar

Theo tôi, lý do vẫn còn sử dụng tarngày nay là vì đây là một trong những trường hợp (có lẽ hiếm gặp) khi cách tiếp cận UNIX chỉ làm cho nó hoàn toàn đúng ngay từ đầu.

Nhìn kỹ hơn vào các giai đoạn liên quan đến việc tạo tài liệu lưu trữ, tôi hy vọng bạn sẽ đồng ý rằng cách phân tách các nhiệm vụ khác nhau diễn ra ở đây là triết lý UNIX rất tốt:

  • một công cụ ( tarđể đặt tên ở đây) chuyên chuyển đổi bất kỳ lựa chọn tệp, thư mục và liên kết tượng trưng nào bao gồm tất cả dữ liệu meta có liên quan như dấu thời gian, chủ sở hữu và quyền thành một luồng byte.

  • và chỉ là một công cụ có thể hoán đổi cho nhau tùy ý ( gzip bz2 xzchỉ đặt tên một vài tùy chọn) để chuyển đổi bất kỳ luồng đầu vào byte nào thành luồng đầu ra nhỏ hơn (hy vọng).

Sử dụng như vậy và cách tiếp cận mang lại một vài lợi ích cho người dùng cũng như cho nhà phát triển:

  • khả năng mở rộng Cho phép kết tarhợp với bất kỳ thuật toán nén nào đã tồn tại hoặc bất kỳ thuật toán nén nào vẫn được phát triển mà không phải thay đổi bất cứ điều gì về hoạt động bên trong của tartất cả.

    Ngay khi tất cả các công cụ nén "hyper-zip-utra" hoàn toàn mới xuất hiện, bạn đã sẵn sàng sử dụng nó để ôm lấy người hầu mới của bạn với toàn bộ sức mạnh tar.

  • tính ổn định tar đã được sử dụng nhiều kể từ đầu những năm 80 được thử nghiệm và được chạy trên các hệ điều hành và máy móc số lượng lớn.

    Ngăn chặn sự cần thiết phải phát minh lại bánh xe trong việc thực hiện quyền sở hữu lưu trữ, quyền, dấu thời gian và tương tự lặp đi lặp lại cho mọi công cụ lưu trữ mới không chỉ giúp tiết kiệm rất nhiều thời gian (nếu không cần thiết) trong quá trình phát triển, mà còn đảm bảo độ tin cậy như nhau cho mọi ứng dụng mới.

  • Tính nhất quán Giao diện người dùng luôn giữ nguyên.

    Không cần phải nhớ rằng để khôi phục quyền bằng công cụ A, bạn phải vượt qua tùy chọn --i-hope-you-rember-this-onevà sử dụng công cụ B, bạn phải sử dụng --this-time-its-another-one trong khi sử dụng công cụ C đó là `--hope-you-didnt-try-with-tool-as-switch.

    Trong khi sử dụng công cụ D, bạn sẽ thực sự làm hỏng nó nếu bạn không sử dụng --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.


3

Rất nhiều câu trả lời hay, nhưng tất cả đều bỏ qua một thực tế quan trọng. Tar có một hệ sinh thái được thiết lập tốt của người dùng và nhà phát triển trong thế giới giống như Unix. Điều đó giúp nó tiếp tục, giống như ZIP được duy trì bởi hệ sinh thái DOS / Windows của nó. Có một hệ sinh thái như vậy là những gì duy trì một công nghệ, không phải là lợi thế kỹ thuật của nó.


Nhận xét thực sự tốt, tôi thậm chí đã không nghĩ về điều đó, và đó là một điểm thực sự tốt để thực hiện.
MarcusJ

3

Lý do là "cố thủ trong văn hóa". Có rất nhiều người như tôi có đôi mắt sáng lên nếu họ được yêu cầu xử lý bất cứ thứ gì ngoài kho lưu trữ tar nén, hoặc ZIP thường xuyên, nếu nó đến từ thế giới Windows.

Tôi không muốn nghe về 7-Zip, RAR hoặc bất cứ điều gì khác. Nếu tôi phải cài đặt một chương trình để giải nén tệp của bạn, thì đó là công việc. Tôi sẽ làm điều đó nếu kết quả là tôi được trả tiền, hoặc nếu nội dung là thứ tôi "phải có" và không có sẵn theo bất kỳ cách nào khác.

Một lợi thế của tar là nếu bạn gửi cho ai đó một tarball, nó sẽ được nhận ra ngay lập tức. Người nhận có thể gõ các lệnh trích xuất bằng bộ nhớ cơ.

Câu hỏi thực sự là: tại sao một số người bị ám ảnh với việc tiết kiệm thêm một byte dung lượng mà họ yêu cầu mọi người khác lãng phí thời gian để cài đặt một số tiện ích kỳ lạ và học cách sử dụng nó? Và sau đó là những cách sử dụng ngu ngốc của các định dạng nén và lưu trữ kỳ lạ. Có một H.264 video với AAC âm thanh thực sự cần phải được đưa vào mult-phần RAR?

Định dạng tar có thể cũ, nhưng nó lưu trữ mọi thứ có liên quan: nội dung tệp, đường dẫn, dấu thời gian, quyền và quyền sở hữu. Nó lưu trữ không chỉ các liên kết tượng trưng, ​​mà nó có thể bảo tồn cấu trúc liên kết cứng. Nó cũng lưu trữ các tệp đặc biệt, vì vậy một kho lưu trữ băng có thể được sử dụng cho những thứ như /devthư mục thu nhỏ được sử dụng trong quá trình bootstrapping. Bạn có thể đặt một bản phân phối Linux cùng với định dạng gói nhị phân không có gì, nhưng các tarball không được nén liên quan đến thư mục gốc của hệ thống tệp.


Re "Quá ám ảnh" ... hãy tưởng tượng bạn đang bị mắc kẹt trong warzone với một chiếc máy tính xách tay cứng và ổ cứng 20G chưa được khai thác gần đầy, có thể là một Gig rời đi và nghe thấy tiếng súng từ xa, bạn thực sự muốn duyệt hướng dẫn sử dụng .PDF 100 MB cho biết cách sửa chữa xe jeep, nhưng tệp nằm trong tệp 2 Gig .tgz. Và máy tính xách tay chạy HĐH độc quyền nguồn đóng và bạn không có quyền truy cập root để xóa các tệp hệ thống, không rõ ràng là làm thế nào để xóa 4G + mà không phá vỡ trình tìm kiếm hoặc trình xem PDF. Nếu bạn chỉ có thể trích xuất tệp 100 MB đó ...
agc

2

Trả lời trực tiếp các câu hỏi cụ thể mà bạn đặt ra:

Có bị phạt hiệu năng trong các giai đoạn tổng hợp / nén / giải nén khi sử dụng tar được đóng gói trong gzip hoặc bzip2, khi so sánh với việc sử dụng định dạng tệp tổng hợp và nén trong cùng một cấu trúc dữ liệu không? Giả sử thời gian chạy của máy nén được so sánh là giống hệt nhau (ví dụ gzip và Deflate là tương tự nhau).

Trong một trường hợp chung, có một cải tiến hiệu suất cụ thể, tarđặc biệt là sử dụng thư viện nén được tích hợp ( dòng lệnh tar xvzfhoặc tar xvjfkiểu, trong đó thư viện nén được sử dụng thay vì quy trình thứ hai). Điều này xuất phát từ hai nguyên nhân chính:

  • khi xử lý một số lượng lớn các tệp tương đối nhỏ, đặc biệt là các tệp thường được sử dụng trong phân phối phần mềm, có độ dự phòng cao. Nén trên nhiều tệp dẫn đến nén tổng thể cao hơn nén các tệp riêng lẻ. Và "từ điển" được tính một lần cho mỗi khối đầu vào, không phải cho mỗi tệp.

  • tarhiểu hệ thống tập tin. Nó được thiết kế để lưu và khôi phục hệ điều hành hoạt động / khả thi. Nó nắm bắt chính xác những gì quan trọng trên hệ thống tệp UNIX và trung thành nắm bắt và khôi phục điều đó. Các công cụ khác ... không phải lúc nào cũng vậy, đặc biệt là họ zip, được thiết kế tốt hơn để chia sẻ tệp giữa một họ HĐH, trong đó tài liệu là thứ quan trọng, không phải là bản sao nhạy cảm của hệ điều hành.

Có các tính năng của định dạng tệp tar mà các định dạng tệp khác, chẳng hạn như .7z và .zip không có?

Xử lý tập tin thưa thớt. Một số lib cơ sở dữ liệu trực tiếp dựa trên các tệp thưa thớt - các tệp có dữ liệu là GB, nhưng dữ liệu thực tế được ghi và lưu trữ thì nhiều, ít hơn nhiều và chỉ có một vài khối đĩa thực sự được sử dụng. Nếu bạn sử dụng một công cụ không biết, thì khi giải nén, bạn sẽ kết thúc với mức tiêu thụ khối đĩa lớn, tất cả đều chứa số không. Biến nó trở lại thành một tập tin thưa thớt là ... đau đớn. Nếu bạn thậm chí có phòng để làm điều đó. Bạn cần một công cụ nắm bắt tập tin thưa thớt là gì và tôn trọng điều đó.

Metadata. Unix đã phát triển một số điều kỳ lạ trong những năm qua. 14 tên tệp ký tự, tên tệp dài, liên kết sym, bit dính, bit superuser, quyền truy cập nhóm được kế thừa, v.v ... Tar hiểu và tái tạo chúng. Công cụ chia sẻ tập tin ... không quá nhiều. Rất nhiều người không sử dụng liên kết theo cách họ có thể ... Nếu bạn đã từng làm việc với phần mềm sử dụng liên kết và sau đó sử dụng một công cụ không nhận thức để sao lưu và khôi phục, giờ đây bạn có rất nhiều độc lập tập tin, thay vì một tập tin duy nhất có nhiều tên. Đau đớn. Phần mềm của bạn bị lỗi và bạn có đĩa phình.

Vì tar là một định dạng tệp cũ và các định dạng tệp mới hơn tồn tại ngày nay, tại sao tar (dù được gói trong gzip, bzip2 hoặc thậm chí là xz mới) ngày nay vẫn được sử dụng rộng rãi trên GNU / Linux, Android, BSD và UNIX khác hệ điều hành, để chuyển tập tin, nguồn chương trình và tải xuống nhị phân, và đôi khi là định dạng của trình quản lý gói?

tarlàm. Nó làm công việc mà nó được thiết kế cho, tốt. Đã có thay thế mời chào khác ( cpio, pax, vv, vv). Nhưng tar được cài đặt trên hầu hết mọi thứ và libs nén mà nó sử dụng cũng rất phổ biến vì những lý do khác. Không có gì khác đi cùng mà thực sự đánh bại những gì tar làm. Không có lợi thế rõ ràng, và rất nhiều kiến ​​thức và sử dụng nhúng trong cộng đồng, sẽ không có sự thay thế. Tar đã được sử dụng rất nhiều trong những năm qua. Nếu chúng tôi nhận được những thay đổi lớn theo cách chúng tôi nghĩ về hệ thống tệp hoặc tệp không phải văn bản bằng cách nào đó trở thành cách chuyển mã (hiện tại không thể tưởng tượng được, nhưng bỏ qua điều đó ...) thì bạn có thể tìm một công cụ khác. Nhưng đó không phải là loại HĐH mà chúng ta đang sử dụng. Đó là một điều khác biệt, được tổ chức khác nhau và nó sẽ cần các công cụ riêng của nó.

Câu hỏi quan trọng nhất, tôi nghĩ, mà bạn đã không hỏi, đó là những công việc 'tar' không phù hợp với công việc nào.

tarvới nén là dễ vỡ. Bạn cần toàn bộ kho lưu trữ, bit cho bit. Theo kinh nghiệm của tôi, nó không kiên cường. Tôi đã có một lỗi bit dẫn đến việc lưu trữ nhiều phần trở nên không sử dụng được. Nó không đưa ra sự dư thừa để bảo vệ chống lại lỗi (sẽ đánh bại một trong những câu hỏi bạn đã hỏi, về nén dữ liệu). Nếu có khả năng hỏng dữ liệu, thì bạn muốn kiểm tra lỗi với sự dư thừa để bạn có thể xây dựng lại dữ liệu. Điều đó có nghĩa là, theo định nghĩa, bạn không bị nén tối đa. Cả hai bạn không thể có từng bit dữ liệu được yêu cầu và mang giá trị ý nghĩa tối đa (nén tối đa) và có mọi bit dữ liệu có khả năng mất và phục hồi (dự phòng và sửa lỗi). Vậy ... mục đích lưu trữ của bạn là gì?tarlà tuyệt vời trong môi trường độ tin cậy cao và khi lưu trữ có thể được sao chép lại từ nguồn. IME, điều thực sự tồi tệ hơn ở điều ban đầu mà tên của nó gợi ý - lưu trữ băng từ. Lỗi một bit trên băng (hoặc tệ hơn là lỗi bit đơn ở đầu băng, trong đó bạn mất một bit trong mỗi byte toàn bộ băng hoặc lưu trữ) dẫn đến dữ liệu trở nên không sử dụng được. Với sự dư thừa và phát hiện lỗi và sửa lỗi, bạn có thể sống sót sau một trong những vấn đề đó.

Vậy ... có bao nhiêu tiếng ồn và tham nhũng trong môi trường bạn đang xem và nguồn có thể được sử dụng để tạo lại một kho lưu trữ không thành công? Câu trả lời, từ các manh mối mà bạn đã cung cấp, là hệ thống không ồn ào và nguồn đó có khả năng tạo lại một kho lưu trữ. Trong trường hợp đó, tarlà đầy đủ.

tarvới nén cũng không chơi tốt với các tệp được nén trước. Nếu bạn đang gửi xung quanh dữ liệu đã được nén ... chỉ cần sử dụng tar và không bận tâm đến giai đoạn nén - nó chỉ thêm các chu kỳ CPU không nhiều. Điều đó có nghĩa là bạn cần phải biết những gì bạn đang gửi xung quanh và tại sao. Nếu bạn quan tâm. Nếu bạn không quan tâm đến những trường hợp đặc biệt đó, thì tar sẽ sao chép một cách trung thực dữ liệu xung quanh và nén sẽ không thực sự hữu ích để làm cho nó nhỏ hơn. Không có vấn đề lớn, ngoài một số chu kỳ CPU.


-3

TAR là Lưu trữ băng. Nó đã tồn tại trong nhiều thập kỷ và nó được sử dụng và hỗ trợ rộng rãi. Nó là một sản phẩm trưởng thành và chăm sóc các nhu cầu hiện tại cũng như các di sả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.