Trang chủ Thủ thuật

Hướng dẫn nén và giải nén file bằng bzip2 trên Linux

Lệnh bzip2 được sử dụng để nén và giải nén tệp.

Nén dữ liệu là quá trình mã hóa dữ liệu bằng cách sử dụng ít bit hơn. Giải nén dữ liệu là quá trình khôi phục dữ liệu nén trở lại thành dạng ban đầu để nó có thể sử dụng được.

bzip2 có tốc độ nén cao cùng với tốc độ nhanh hợp lý. bzip2 khiến hầu hết các tệp được nén có kích thước tệp nhỏ hơn so với chương trình zip truyền thống. Hơn nữa, cũng giống như các chương trình đó, bzip2 nén lossless, có nghĩa là không có dữ liệu bị mất trong quá trình nén, do đó các tập tin ban đầu có thể được tái tạo chính xác. Điểm bất lợi duy nhất của bzip2 là nó hơi chậm hơn gzip và zip.

Hiệu suất này đã được thực hiện thông qua việc sử dụng Burrows-Wheeler transform (BWT). Được xuất bản lần đầu bởi Michael Burrows và David Wheeler vào năm 1994, BWT không phải là một thuật toán nén dữ liệu; thay vào đó, nó chuyển đổi các khối dữ liệu thành một định dạng cực kỳ thích hợp để nén. Ngoài ra, nó có thể đảo ngược, có nghĩa là dữ liệu ban đầu có thể được tái tạo dễ dàng.

Cú pháp của bzip2 là:

bzip2 [option(s)] file_name(s)

bzip2 thường được sử dụng mà không có bất kỳ tùy chọn nào. Bất kỳ số lượng tệp nào cũng có thể được nén đồng thời bằng cách liệt kê tên của chúng dưới dạng đối số (tức là inputs). Ví dụ sau đây sẽ nén ba tập tin có tên là file1, file2 và file3:

bzip2 file1 file2 file3

Nếu không gặp sự cố gì, theo mặc định, không có xác nhận nào được cung cấp. Tuy nhiên, nếu gặp phải một số vấn đề, một thông báo lỗi sẽ được trả lại cho mỗi tệp có vấn đề. Nên xác nhận về mức độ nén, sau đó bzip2 có thể được sử dụng với tùy chọn -v (tức là verbose), chẳng hạn như:

bzip2 -v file1 file2 file3

Mỗi tệp được thay thế bằng một phiên bản nén của chính nó, với phần mở rộng .bz2 được thêm vào tên. Vì vậy, trong trường hợp của ví dụ trên, ba tệp đầu vào sẽ được thay thế bằng các tệp có tên là file1.bz2, file2.bz2 và file3.bz2. Điều này có thể dễ dàng được xác nhận bằng lệnh ls (tức là list) và kích thước của các tệp mới có thể được xem bằng cách sử dụng ls cùng với tùy chọn -s (tức là size) của nó. Các tập tin gốc có thể được giữ lại bằng cách sử dụng tùy chọn -k (tức là keep).

Mỗi tệp nén được giữ lại ở mức có thể, cùng một metadata (nghĩa là ngày sửa đổi, quyền truy cập và quyền sở hữu) làm tệp gốc tương ứng, để dữ liệu này có thể được khôi phục chính xác vào thời gian giải nén.

Nén được thực hiện ngay cả khi tệp nén lớn hơn bản gốc. Tình huống này có thể xảy ra trong trường hợp các tệp rất nhỏ, bởi vì cơ chế nén cố định khoảng 50 byte.

Tùy chọn -s (tức là small) làm giảm mức sử dụng bộ nhớ để nén, giải nén và thử nghiệm, rất hữu ích cho các máy tính có bộ nhớ rất nhỏ (ví dụ: 8MB trở xuống). Các tập tin được giải nén và thử nghiệm bằng cách sử dụng một thuật toán sửa đổi mà chỉ yêu cầu 2,5 byte cho mỗi khối, mặc dù điều này dẫn đến tốc độ giảm khoảng một nửa.

Tùy chọn -t (tức là test) cho bzip2 kiểm tra tính toàn vẹn của (các) tệp được chỉ định bằng cách thực hiện giải nén và loại bỏ kết quả. Không có tác dụng trên các tệp được chỉ định.

Như một biện pháp an toàn, theo mặc định bzip2 sẽ không ghi đè các tệp hiện có có cùng tên (bao gồm cả phần mở rộng) dưới dạng tệp đầu ra của nó hoặc ngắt hard links (tức là các tên thay thế cho một tệp). Tuy nhiên, tùy chọn -f buộc ghi đè các tệp hiện có và cũng hướng dẫn bzip2 phá vỡ hard links đến files.

Tùy chọn -d: giải nén các tập tin được chỉ định. Nó giống như lệnh bunzip2. Các tệp không được tạo bởi bzip2 sẽ được phát hiện và bỏ qua và sẽ xuất hiện cảnh báo. Một nỗ lực sẽ được thực hiện để đoán tên gốc cho mỗi tập tin được giải nén; tuy nhiên, nếu phiên bản nén không kết thúc bằng một trong các phần mở rộng được nhận dạng (ví dụ, .bz2, .bz, .tbz2 hoặc .tbz), thì bzip2 sẽ khiếu nại rằng nó không thể đoán tên của tệp gốc và sẽ sử dụng tên của phiên bản nén với phần mở rộng .out được thêm vào.

Khá thuận tiện để lưu trữ một số file trong một tệp nén, đó là một tệp duy nhất chứa nhiều tệp riêng lẻ nào cùng với thông tin, cho phép chúng được khôi phục về trạng thái gốc của  bằng một hoặc nhiều chương trình giải nén. Đầu tiên, kết hợp các tập tin không nén bằng lệnh tar cùng với các tùy chọn -c và -f, sau đó sử dụng bzip2 trên tệp kết hợp. Tùy chọn -c chỉ thị tar để kết hợp các tệp và tùy chọn -f cho nó sử dụng đối số sau tên của tệp mới. Ví dụ, các lệnh sau sẽ kết hợp ba tệp có tên là file4, file5 và file6 vào một tệp lưu trữ duy nhất có tên là file7.tar và sau đó nén tệp nén đó vào tệp nén có tên là file7.tar.bz2:

tar -cf file7.tar file4 file5 file6

bzip2 file7.tar

Ngoài ra, tất cả những điều trên còn có thể được thực hiện trong một bước đơn giản bằng cách thêm tùy chọn -j vào tar, cho tar biết nén tệp nén mà nó tạo bằng bzip2. Do đó, ví dụ trên sẽ được đơn giản hóa thành:

tar -cjf file7.tar.bz2 file4 file5 file6

Dịch từ: http://www.linfo.org/bzip2.html

>> Có thể bạn quan tâm: Hướng dẫn code hiển thị thông báo xác nhận yes/ no bash shell