Tại sao tôi tar một tập tin duy nhất?


101

Tại công ty của tôi, chúng tôi tải xuống một ảnh chụp nhanh cơ sở dữ liệu phát triển cục bộ dưới dạng db.dump.tar.gztệp. Việc nén có ý nghĩa, nhưng tarball chỉ chứa một tệp duy nhất ( db.dump).

Có bất kỳ điểm nào để lưu trữ một tập tin duy nhất, hoặc .tar.gzchỉ là một thành ngữ phổ biến như vậy? Tại sao không chỉ .gz?


5
Nó chỉ là một vấn đề quy ước theo ý kiến ​​của tôi. Khi mọi người nhìn thấy một tệp có phần mở rộng gz, suy nghĩ mặc định của họ là sử dụng tar -zxvf. Nhưng đối với những người nhìn vào tên tệp và thấy nó không có .tgzphần mở rộng, việc nén tệp db db là hoàn toàn ổn. Vì tôi không biết chi tiết các thuật toán nén, tôi không chắc liệu tar có thực hiện bất kỳ nén nào trên các tệp thưa như db dump hay không, nhưng đối với các tệp văn bản thuần túy, gzip trực tiếp của tệp có lợi thế kích thước rất nhỏ so với taring trước và gzip ing tập tin
MelBurslan

3
Tất cả tarring một tệp sẽ làm là thêm một vài khối siêu dữ liệu vào đầu và cuối của tệp. Dữ liệu tệp thực tế đi qua tar đến máy nén chưa được xử lý. Vì vậy, đối với một tệp lớn, sự khác biệt kích thước giữa nén đơn giản và taring sẽ không đáng kể.
cắm vào

Trong quá khứ khi thử các phương pháp nén khác nhau, tôi thấy .tar.gzlà vượt trội so với hầu hết các phương pháp phổ biến khác. Tôi nhớ nó tốt hơn chỉ .tarnhưng không thể nhớ nó có tốt hơn không .gz. Trớ trêu thay, .cabđịnh dạng của Window là phương pháp tốt nhất mà tôi đã thử, điều này rất bất ngờ.
Pharap

@Pharap tarkhông phải là một thuật toán nén, nó là một định dạng lưu trữ
vườn

1
@gardenhead Điều đó sẽ giải thích tại sao nó không hoạt động tốt.
Pharap

Câu trả lời:


163

Ưu điểm của việc sử dụng .tar.gzthay vì đó .gz

  • tarlưu trữ nhiều dữ liệu meta (quyền UNIX, v.v.) hơn gzip.
  • thiết lập có thể dễ dàng được mở rộng hơn để lưu trữ nhiều tệp
  • Các tệp .tar.gz rất phổ biến, các tệp chỉ được nén có thể đánh đố một số người dùng. (xem bình luận của MelBurslans )

Chi phí sử dụng tarcũng rất nhỏ.

Nếu không thực sự cần thiết, tôi vẫn không khuyên bạn nên tar một tập tin. Có nhiều công cụ hữu ích có thể truy cập trực tiếp vào các tệp nén (chẳng hạn như zcat, zgrepv.v. - cũng có sẵn cho bzip2xz).


35
Tôi đã không xem xét khía cạnh siêu dữ liệu. Điểm rất tốt
vườn

5
Nếu tôi thấy a .gz, bản năng đầu tiên của tôi là tar -zxf foo.gz. Nhớ rằng gzip thậm chí là một lệnh mất thêm vài giây.
bgStack15

2
@ bgStack15 FWIW bạn không cần z(hoặc -cho vấn đề đó), hầu hết các máy hiện đại tarsẽ tự động phát hiện tệp cần được giải nén.
drewbenn

2
Theo mặc định gzipsẽ lưu tên tập tin gốc và dấu thời gian. Bạn có thể sử dụng -Ntùy chọn khi giải nén để khôi phục chúng.
Ross Ridge

@RossRidge cảm ơn, tôi đã xóa lại văn bản về tên tệp gốc.
jofel

63

Bạn thực sự chỉ hỏi một nửa câu hỏi. Một câu hỏi khác là "Tại sao tôi lại nén một tập tin tar bằng gzip?". Và câu trả lời không chỉ là gziplàm cho tệp nhỏ hơn (trong hầu hết các trường hợp):

tar:

  • lưu trữ tên tệp và siêu dữ liệu khác : chế độ, ID chủ sở hữu, ID nhóm, kích thước tệp, thời gian sửa đổi
  • lưu trữ một tổng kiểm tra (chỉ dành cho tiêu đề)

gzip:

  • có thể lưu trữ tên tệp gốc, nhưng đó là tùy chọn
  • có tổng kiểm tra CRC-32 so với dữ liệu gốc
  • nó nén tập tin

Chỉ với tarbạn không thể chắc chắn dữ liệu của bạn không bị hỏng. Chỉ với gzipbạn không thể khôi phục ID người dùng / nhóm, thời gian sửa đổi và có thể không phải là tên tệp gốc.

Sự kết hợp này mạnh hơn các lệnh / định dạng riêng lẻ cung cấp, vì chúng bổ sung cho các tính năng của nhau .


Cảm ơn đã làm rõ điều đó! Khi tôi đang đọc tartrang wikipedia, tôi đã hiểu nhầm mô tả có nghĩa là tổng kiểm tra dành cho toàn bộ tệp.
vườn

Điều này cảm thấy với tôi như câu trả lời chính xác. Tôi cũng muốn thêm một vài lý do mà bạn có thể muốn chỉnh sửa nếu bạn đồng ý. 1) không có chi phí bổ sung cho quản trị viên cho .tgz so với .tar hoặc .gz một mình: tất cả chỉ là một lệnh 2) Quản trị viên sao lưu, sao chép, di chuyển, di chuyển RẤT NHIỀU tệp, vì nhiều lý do khác nhau; Sao lưu DB chỉ là một trong số này. Họ có thể sử dụng cùng một quy trình công việc, công cụ và lệnh cho dù sao lưu một hoặc nhiều tệp; vậy tại sao đặc biệt sử dụng cú pháp của lệnh gzip, trong trường hợp có một tệp?
Dewi Morgan

30

Có một lợi thế khá lớn để sử dụng tập tin văn bản chỉ-gzip - các nội dung có thể được truy cập trực tiếp với các công cụ dòng lệnh như less, zgrep, zcat.


điểm thú vị, nhưng câu hỏi là về một ảnh chụp nhanh cơ sở dữ liệu, không chắc là tệp văn bản và không chỉ được nén.
gạch dưới

9
Tài khoản , awk, perl, v.v.) nếu tôi cần. tức là đáng tin cậy và hữu ích hơn so với bãi rác nhị phân. Sự đánh đổi là các bãi chứa văn bản có xu hướng lớn hơn (ai quan tâm? Dung lượng đĩa rẻ và chúng tôi có khả năng nén tốt) và khôi phục chậm hơn đáng kể (nhưng sẽ ít hơn nếu bạn khôi phục khôi phục trong giao dịch).
cas

1
Lợi thế của các công cụ này so với việc đơn giản là đưa đầu ra của bộ giải nén vào các công cụ đơn giản là gì?
CodeInChaos

21

Tôi có thể nói rằng có khả năng mọi người không nhận ra rằng họ có thể sử dụng gzip / bzip2 / xz mà không cần tar. Có thể bởi vì chúng đến từ nền DOS / Windows, nơi việc nén và lưu trữ được tích hợp theo một định dạng duy nhất ( ZIP , RAR , v.v.) là điều bình thường .

Mặc dù có thể có một số lợi thế nhỏ khi sử dụng tar trong một số trường hợp do lưu trữ siêu dữ liệu hoặc khả năng thêm tệp bổ sung, nhưng cũng có những nhược điểm. Với tệp gzip / bzip2 / xz đơn giản, bạn có thể giải nén nó và chuyển dữ liệu được giải nén thẳng sang một công cụ khác (chẳng hạn như cơ sở dữ liệu của bạn) mà không phải lưu trữ dữ liệu được giải nén dưới dạng tệp trên đĩa. Với một tarball điều này là khó hơn.


2
Với GNU tar, chỉ cần chuyển -O sang đầu ra thành thiết bị xuất chuẩn, vì vậy tôi sẽ không nói nó khó hơn nhiều !
hyde

5
Đoạn đầu tiên có vẻ hợp lý cho các tệp sử dụng tgzphần mở rộng. Tuy nhiên, trường hợp của OP sử dụng tar.gz- và nếu những người dùng Win / DOS giả định này giống như tôi, thì điều đầu tiên họ nói khi xem một tệp như vậy là: 'Tại sao nó có 2 phần mở rộng?'. Sau đó, họ google nó và nhanh chóng nhận được câu trả lời, trong đó giải thích cụ thể rằng tarvà nén là khác biệt. ;-)
gạch dưới

17

Có một sự khác biệt quan trọng có thể khiến việc sử dụng trở nên tarquan trọng trong một số trường hợp: Bên cạnh "siêu dữ liệu" mà @jofel đã đề cập trong câu trả lời của anh ấy, hãy tar ghi lại tên tệp trong kho lưu trữ. Khi bạn giải nén nó, bạn sẽ có được tên tệp gốc bất kể lưu trữ được gọi là gì.

Trong trường hợp của bạn, tệp lưu trữ tar và tệp chứa trong đó có các tên liên quan db.dump.tar.gzdb.tar, nhưng giả sử bạn đổi tên tệp tar thành 20-Apr-16.dump.tgzhoặc bất cứ thứ gì. Tháo cái này với tar xvfz, và bạn nhận được db.dump. Để so sánh, giải nén 20-Apr-16.dump.gzvà bạn đã có 20-Apr-16.dump. (Chỉnh sửa: như được chỉ ra trong các nhận xét, gzip cũng tạo một bản ghi tên tệp; nhưng nó thường không được sử dụng khi giải nén). Một tarkho lưu trữ cũng có thể chứa một tên đường dẫn tương đối đặt tệp được trích xuất trong thư mục con.

Trường hợp sử dụng của bạn sẽ cho biết liệu loại kiên trì tên tệp này là cần thiết, hoặc thậm chí muốn , hoặc thực sự không mong muốn. Nhưng chắc chắn, bất kể nén, một tarkho lưu trữ đi khác với một tệp thông thường.


6
gzip cũng ghi lại tên tệp gốc.
psusi

8
Vâng Tên này là tùy chọn trong tiêu đề gzip. Rõ ràng sẽ không có tên nếu bạn nén đầu ra phát trực tuyến của một lệnh và hầu hết các công cụ sẽ không khôi phục nó theo mặc định (ví dụ: bạn phải sử dụng gzip --namerõ ràng khi giải nén), nhưng bạn không phải sử dụng tar để duy trì tên tập tin.
Miles

Cảm ơn đã chỉ ra điều này, tôi đã không biết điều đó. Tuy nhiên, vì đó không phải là hành vi mặc định, nên quan điểm: Phân phối tệp ở định dạng tar sẽ giữ nguyên tên tệp gốc (và có thể là đường dẫn tương đối), mà không có sự can thiệp của người nhận. Phân phối tệp nén (g) không.
alexis

8

Ngoài tất cả các câu trả lời khác, gần đây tôi đã gặp phải một tình huống kịch bản trong đó chỉ có một tệp được mong đợi, nhưng một nhân viên trước đó đã viết các tập lệnh với khả năng tạo ra nhiều hơn một tệp. Vì vậy, các tập tin đã được tarred và bzip, sau đó được chuyển và mở rộng.

Khi quá trình phát triển đến mức nó tạo ra một tệp 4,3 GB, nó đã cuộn lại và tạo một tệp .dump.001 cùng với tệp .dump. Tất cả các kịch bản chỉ tiếp tục làm việc.

Đó là sự lười biếng chủ động sysadmin được xác định!


2

Tôi sẽ tar một tập tin duy nhất, để sao chép nó giữ dấu thời gian (dễ bị bỏ qua trong các bản tải xuống). Quyền và quyền sở hữu tệp ít quan trọng hơn: tải xuống là một thuật ngữ áp dụng cho các hệ thống không được tích hợp tốt.

Cho dù có hay không, đó là cách thực hành tiêu chuẩn để nén tệp để tải xuống nhanh hơn - và tránh hết dung lượng đĩa.


-1

Tar đặc biệt hữu ích cho nhiều tệp không được ghi vào hệ thống tệp chính thức, nó luôn luôn như vậy. Nếu vì lý do nào đó có dịp, chỉ có 1 tệp được viết thì đó không phải là hậu quả thực sự. Tôi có thể gửi trực tiếp .tar.gz tới / dev / sdx mà không cần quan tâm đến phân vùng hoặc hệ thống tệp. Nó cũng có thể là băng.

Nó thường được thực hiện vì tập lệnh hoặc quy trình đã được sao chép từ mã di sản. Tất nhiên không cần tar nếu chỉ có một tệp, nhưng nó sẽ chừa chỗ cho nhiều tệp ......

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.