bzcat - hướng dẫn tham khảo, tùy chọn, ví dụ về lệnh


TÊN

bzcat - giải nén tập tin vào thiết bị xuất chuẩn

TÓM TẮT

bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]


bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename

SỰ MIÊU TẢ

bzip2, bunzip2

một máy nén tập tin sắp xếp khối

bzcat

giải nén tập tin vào thiết bị xuất chuẩn

bzip2recover

phục hồi dữ liệu từ các tệp bzip2 bị hỏng

bzip2 nén tệp bằng thuật toán nén văn bản sắp xếp khối Burrows-Wheeler và mã hóa Huffman. Khả năng nén nói chung tốt hơn đáng kể so với khả năng nén của các máy nén dựa trên LZ77/LZ78 thông thường hơn và tiệm cận với hiệu suất của dòng máy nén thống kê PPM.

Các tùy chọn dòng lệnh rất giống với các tùy chọn của GNU gzip, nhưng chúng không giống nhau.

bzip2 cần một danh sách tên tệp đi kèm với các cờ dòng lệnh. Mỗi tệp được thay thế bằng một phiên bản nén của chính nó, với tên "origin_name.bz2". Mỗi tệp nén có cùng ngày sửa đổi, quyền và, nếu có thể, quyền sở hữu như tệp gốc tương ứng, để các thuộc tính này có thể được khôi phục chính xác tại thời điểm giải nén. Việc xử lý tên tệp là ngây thơ theo nghĩa là không có cơ chế lưu giữ tên tệp gốc, quyền, quyền sở hữu hoặc ngày tháng trong hệ thống tệp thiếu các khái niệm này hoặc có giới hạn độ dài tên tệp nghiêm trọng, chẳng hạn như MS-DOS.

bzip2 và bunzip2 theo mặc định sẽ không ghi đè lên các tệp hiện có. Nếu bạn muốn điều này xảy ra, hãy chỉ định cờ -f.

Nếu không có tên tệp nào được chỉ định, bzip2 sẽ nén từ đầu vào tiêu chuẩn sang đầu ra tiêu chuẩn. Trong trường hợp này, bzip2 sẽ từ chối ghi đầu ra nén vào thiết bị đầu cuối, vì điều này sẽ hoàn toàn khó hiểu và do đó vô nghĩa.

bunzip2 (hoặc bzip2 -d) giải nén tất cả các tệp đã chỉ định. Các tệp không được tạo bởi bzip2 sẽ bị phát hiện và bỏ qua, đồng thời đưa ra cảnh báo. bzip2 cố đoán tên tệp cho tệp giải nén từ tên của tệp nén như sau:

              filename.bz2    becomes   filename
              filename.bz     becomes   filename
              filename.tbz2   becomes   filename.tar
              filename.tbz    becomes   filename.tar
              anyothername    becomes   anyothername.out

Nếu tệp không kết thúc bằng một trong các đuôi được công nhận, .bz2, .bz, .tbz2 hoặc .tbz, bzip2 phàn nàn rằng nó không thể đoán tên của tệp gốc và sử dụng tên gốc có .out nối thêm.

Cũng như nén, việc không cung cấp tên tệp sẽ gây ra quá trình giải nén từ đầu vào tiêu chuẩn sang đầu ra tiêu chuẩn.

bunzip2 sẽ giải nén chính xác một tệp là sự kết hợp của hai hoặc nhiều tệp nén. Kết quả là sự ghép nối của các tệp không nén tương ứng. Kiểm tra tính toàn vẹn (-t) của các tệp nén được nối cũng được hỗ trợ.

Bạn cũng có thể nén hoặc giải nén tệp thành đầu ra tiêu chuẩn bằng cách đặt cờ -c. Nhiều tệp có thể được nén và giải nén như thế này. Các đầu ra kết quả được đưa tuần tự vào thiết bị xuất chuẩn. Việc nén nhiều tệp theo cách này sẽ tạo ra một luồng chứa nhiều biểu diễn tệp nén. Một luồng như vậy chỉ có thể được giải nén chính xác bằng bzip2 phiên bản 0.9.0 trở lên. Các phiên bản trước của bzip2 sẽ dừng sau khi giải nén tệp đầu tiên trong luồng.

bzcat (hoặc bzip2 -dc) giải nén tất cả các tệp đã chỉ định thành đầu ra tiêu chuẩn.

bzip2 sẽ đọc các đối số từ các biến môi trường BZIP2 và BZIP, theo thứ tự đó và sẽ xử lý chúng trước bất kỳ đối số nào được đọc từ dòng lệnh. Điều này cung cấp một cách thuận tiện để cung cấp các đối số mặc định.

Quá trình nén luôn được thực hiện, ngay cả khi tệp nén lớn hơn một chút so với tệp gốc. Các tệp nhỏ hơn khoảng một trăm byte có xu hướng lớn hơn, do cơ chế nén có chi phí cố định trong vùng 50 byte. Dữ liệu ngẫu nhiên (bao gồm đầu ra của hầu hết các trình nén tệp) được mã hóa ở mức khoảng 8,05 bit trên mỗi byte, cho phép mở rộng khoảng 0,5%.

Để tự kiểm tra khả năng bảo vệ của bạn, bzip2 sử dụng CRC 32 bit để đảm bảo rằng phiên bản giải nén của tệp giống với phiên bản gốc. Điều này bảo vệ dữ liệu nén khỏi bị hỏng và chống lại các lỗi chưa được phát hiện trong bzip2 (hy vọng là rất khó xảy ra). Khả năng dữ liệu bị hỏng mà không bị phát hiện là rất nhỏ, khoảng một phần tư tỷ đối với mỗi tệp được xử lý. Tuy nhiên, hãy lưu ý rằng quá trình kiểm tra diễn ra khi giải nén, vì vậy nó chỉ có thể cho bạn biết rằng có điều gì đó không ổn. Nó không thể giúp bạn khôi phục dữ liệu ban đầu không nén được. Bạn có thể sử dụng bzip2recover để thử khôi phục dữ liệu từ các tệp bị hỏng.

Các giá trị trả về: 0 cho một lần thoát bình thường, 1 cho các sự cố môi trường (không tìm thấy tệp, cờ không hợp lệ, lỗi I/O, &c), 2 cho biết tệp nén bị hỏng, 3 cho lỗi nhất quán bên trong (ví dụ: lỗi) khiến bzip2 hoảng sợ.

TÙY CHỌN

-c --stdout

Nén hoặc giải nén thành đầu ra tiêu chuẩn.

-d --decompress

Buộc giải nén. bzip2, bunzip2 và bzcat thực sự là cùng một chương trình và quyết định về hành động cần thực hiện được thực hiện trên cơ sở tên được sử dụng . Cờ này ghi đè cơ chế đó và buộc bzip2 giải nén.

-z --compress

Phần bổ sung cho -d: buộc nén, bất kể tên lệnh gọi.

-t --test

Kiểm tra tính toàn vẹn của (các) tệp được chỉ định, nhưng không giải nén chúng. Điều này thực sự thực hiện giải nén thử nghiệm và loại bỏ kết quả.

-f --force

Buộc ghi đè lên các tập tin đầu ra. Thông thường, bzip2 sẽ không ghi đè lên các tệp đầu ra hiện có. Cũng buộc bzip2 phá vỡ các liên kết cứng tới các tệp, điều mà nếu không nó sẽ không làm được.

bzip2 thường từ chối giải nén các tệp không có byte tiêu đề ma thuật chính xác. Tuy nhiên, nếu bắt buộc (-f), nó sẽ chuyển các tệp đó qua trạng thái không sửa đổi. Đây là cách GNU gzip hoạt động.

-k --keep

Giữ (không xóa) các tệp đầu vào trong quá trình nén hoặc giải nén.

-s --small

Giảm mức sử dụng bộ nhớ, để nén, giải nén và thử nghiệm. Các tệp được giải nén và kiểm tra bằng thuật toán đã sửa đổi chỉ yêu cầu 2,5 byte cho mỗi byte khối. Điều này có nghĩa là bất kỳ tệp nào cũng có thể được giải nén trong 2300k bộ nhớ, mặc dù tốc độ chỉ bằng một nửa tốc độ bình thường.

Trong quá trình nén, -s chọn kích thước khối là 200k, hạn chế sử dụng bộ nhớ ở cùng một con số, với chi phí là tỷ lệ nén của bạn. Nói tóm lại, nếu máy của bạn sắp hết bộ nhớ (8 megabyte trở xuống), hãy sử dụng -s cho mọi thứ. Xem QUẢN LÝ BỘ NHỚ bên dưới.

-q --quiet

Loại bỏ các thông báo cảnh báo không cần thiết. Các thông báo liên quan đến lỗi I/O và các sự kiện quan trọng khác sẽ không bị chặn.

-v --verbose

Chế độ chi tiết -- hiển thị tỷ lệ nén cho từng tệp được xử lý. Hơn nữa -v tăng mức độ chi tiết, đưa ra nhiều thông tin chủ yếu được quan tâm cho mục đích chẩn đoán.

-L --license -V --version

Hiển thị phiên bản phần mềm, điều khoản và điều kiện cấp phép.

-1 (or --fast) to -9 (or --best)

Đặt kích thước khối thành 100 k, 200 k .. 900 k khi nén. Không có tác dụng khi giải nén. Xem QUẢN LÝ BỘ NHỚ bên dưới. Bí danh --fast và --best chủ yếu dành cho khả năng tương thích gzip của GNU. Cụ thể, --fast không làm mọi thứ nhanh hơn đáng kể. Và --best chỉ chọn hành vi mặc định.

--

Coi tất cả các đối số tiếp theo là tên tệp, ngay cả khi chúng bắt đầu bằng dấu gạch ngang. Điều này là để bạn có thể xử lý các tệp có tên bắt đầu bằng dấu gạch ngang, ví dụ: bzip2 -- -myfilename.

--repetitive-fast --repetitive-best

Các cờ này là dư thừa trong các phiên bản 0.9.5 trở lên. Họ đã cung cấp một số kiểm soát thô đối với hành vi của thuật toán sắp xếp trong các phiên bản trước đó, điều này đôi khi hữu ích. 0.9.5 trở lên có một thuật toán được cải thiện khiến các cờ này không liên quan.

QUẢN LÝ BỘ NHỚ

bzip2 nén các tệp lớn theo khối. Kích thước khối ảnh hưởng đến cả tỷ lệ nén đạt được và dung lượng bộ nhớ cần thiết để nén và giải nén. Các cờ -1 đến -9 chỉ định kích thước khối lần lượt là 100.000 byte đến 900.000 byte (mặc định). Tại thời điểm giải nén, kích thước khối được sử dụng để nén được đọc từ tiêu đề của tệp nén và sau đó bunzip2 tự phân bổ bộ nhớ vừa đủ để giải nén tệp. Vì kích thước khối được lưu trữ trong các tệp nén, nên các cờ -1 đến -9 không liên quan và do đó bị bỏ qua trong quá trình giải nén.

Các yêu cầu nén và giải nén, tính bằng byte, có thể được ước tính như sau:

              Compression:   400k + ( 8 x block size )

              Decompression: 100k + ( 4 x block size ), or
                             100k + ( 2.5 x block size )

Kích thước khối lớn hơn mang lại lợi nhuận cận biên giảm dần nhanh chóng. Hầu hết quá trình nén đến từ hai hoặc ba trăm k kích thước khối đầu tiên, một thực tế đáng lưu ý khi sử dụng bzip2 trên các máy nhỏ. Cũng cần phải đánh giá cao rằng yêu cầu bộ nhớ giải nén được đặt tại thời điểm nén bằng cách chọn kích thước khối.

Đối với các tệp được nén với kích thước khối mặc định là 900k, bunzip2 sẽ cần khoảng 3700 kbyte để giải nén. Để hỗ trợ giải nén bất kỳ tệp nào trên máy 4 megabyte, bunzip2 có tùy chọn giải nén bằng cách sử dụng khoảng một nửa dung lượng bộ nhớ này, khoảng 2300 kbyte. Tốc độ giải nén cũng giảm đi một nửa, vì vậy bạn chỉ nên sử dụng tùy chọn này khi cần thiết. Cờ có liên quan là -s.

Nói chung, hãy thử và sử dụng các giới hạn bộ nhớ có kích thước khối lớn nhất cho phép, vì điều đó sẽ tối đa hóa khả năng nén đạt được. Tốc độ nén và giải nén hầu như không bị ảnh hưởng bởi kích thước khối.

Một điểm quan trọng khác áp dụng cho các tệp nằm gọn trong một khối -- điều đó có nghĩa là hầu hết các tệp bạn gặp phải đều sử dụng kích thước khối lớn. Dung lượng bộ nhớ thực được chạm vào tỷ lệ thuận với kích thước của tệp, vì tệp nhỏ hơn một khối. Ví dụ: nén một tệp dài 20.000 byte với cờ -9 sẽ khiến máy nén phân bổ khoảng 7600k bộ nhớ, nhưng chỉ chạm vào 400k + 20000 * 8=560 kbyte của nó. Tương tự, bộ giải nén sẽ phân bổ 3700k nhưng chỉ chạm vào 100k + 20000 * 4=180 kbyte.

Đây là bảng tóm tắt mức sử dụng bộ nhớ tối đa cho các kích thước khối khác nhau. Cũng được ghi lại là tổng kích thước nén cho 14 tệp của Calgary Text Compression Corpus tổng cộng là 3.141.622 byte. Cột này cung cấp một số cảm nhận về mức độ nén thay đổi theo kích thước khối. Những số liệu này có xu hướng nhấn mạnh lợi thế của kích thước khối lớn hơn đối với các tệp lớn hơn, vì Corpus bị chi phối bởi các tệp nhỏ hơn.

                  Compress   Decompress   Decompress   Corpus
           Flag     usage      usage       -s usage     Size

            -1      1200k       500k         350k      914704
            -2      2000k       900k         600k      877703
            -3      2800k      1300k         850k      860338
            -4      3600k      1700k        1100k      846899
            -5      4400k      2100k        1350k      845160
            -6      5200k      2500k        1600k      838626
            -7      6100k      2900k        1850k      834096
            -8      6800k      3300k        2100k      828642
            -9      7600k      3700k        2350k      828642

PHỤC HỒI DỮ LIỆU TỪ CÁC TẬP TIN BỊ HƯ HẠI

bzip2 nén tệp theo khối, thường dài 900kbyte. Mỗi khối được xử lý độc lập. Nếu phương tiện hoặc lỗi đường truyền khiến tệp .bz2 nhiều khối bị hỏng, thì có thể khôi phục dữ liệu từ các khối không bị hư hại trong tệp.

Biểu diễn nén của mỗi khối được phân định bằng mẫu 48 bit, giúp có thể tìm thấy ranh giới khối với độ chắc chắn hợp lý. Mỗi khối cũng mang CRC 32 bit của riêng nó, vì vậy các khối bị hỏng có thể được phân biệt với các khối không bị hư hại.

bzip2recover là một chương trình đơn giản với mục đích tìm kiếm các khối trong tệp .bz2 và ghi từng khối vào tệp .bz2 của chính nó. Sau đó, bạn có thể sử dụng bzip2 -t để kiểm tra tính toàn vẹn của tệp kết quả và giải nén những tệp không bị hư hại.

bzip2recover lấy một đối số duy nhất, tên của tệp bị hỏng và ghi một số tệp "rec00001file.bz2", "rec00002file.bz2", v.v., chứa các khối được trích xuất. Tên tệp đầu ra được thiết kế sao cho việc sử dụng ký tự đại diện trong quá trình xử lý tiếp theo -- ví dụ: "bzip2 -dc rec*file.bz2 > recovery_data" -- xử lý các tệp theo đúng thứ tự.

bzip2recover nên được sử dụng nhiều nhất để xử lý các tệp .bz2 lớn, vì các tệp này sẽ chứa nhiều khối. Rõ ràng là vô ích khi sử dụng nó trên các tệp khối đơn bị hỏng vì không thể khôi phục khối bị hỏng. Nếu bạn muốn giảm thiểu bất kỳ khả năng mất dữ liệu nào do lỗi phương tiện hoặc đường truyền, bạn có thể xem xét việc nén với kích thước khối nhỏ hơn.

LƯU Ý HIỆU SUẤT

Giai đoạn nén sắp xếp tập hợp các chuỗi tương tự trong tệp lại với nhau. Do đó, các tệp chứa các ký hiệu lặp lại rất dài, chẳng hạn như "aabaabaabaab..." (được lặp lại vài trăm lần) có thể nén chậm hơn bình thường. Các phiên bản 0.9.5 trở lên tốt hơn nhiều so với các phiên bản trước về mặt này. Tỷ lệ giữa thời gian nén trường hợp xấu nhất và trường hợp trung bình nằm trong khoảng 10:1. Đối với các phiên bản trước, con số này giống như 100:1. Bạn có thể sử dụng tùy chọn -vvvv để theo dõi tiến độ rất chi tiết nếu muốn.

Tốc độ giải nén không bị ảnh hưởng bởi những hiện tượng này.

bzip2 thường phân bổ vài megabyte bộ nhớ để hoạt động và sau đó tính phí trên toàn bộ bộ nhớ theo cách khá ngẫu nhiên. Điều này có nghĩa là hiệu suất, cho cả quá trình nén và giải nén, phần lớn được xác định bởi tốc độ mà máy của bạn có thể khắc phục lỗi bộ nhớ cache. Do đó, những thay đổi nhỏ đối với mã để giảm tỷ lệ bỏ lỡ đã được quan sát để mang lại những cải tiến hiệu suất lớn không tương xứng. Tôi cho rằng bzip2 sẽ hoạt động tốt nhất trên các máy có bộ nhớ cache rất lớn.

THẬN TRỌNG

Thông báo lỗi I/O không hữu ích như chúng có thể. bzip2 cố gắng hết sức để phát hiện lỗi I/O và thoát hoàn toàn, nhưng các chi tiết về vấn đề đôi khi có vẻ khá sai lệch.

Trang hướng dẫn này liên quan đến phiên bản 1.0.8 của bzip2. Dữ liệu nén được tạo bởi phiên bản này hoàn toàn tương thích xuôi và ngược với các bản phát hành công khai trước đó, các phiên bản 0.1pl2, 0.9.0, 0.9.5, 1.0 .0, 1.0.1, 1.0.2 trở lên, nhưng với ngoại lệ sau: 0.9.0 trở lên có thể giải nén chính xác nhiều tệp nén được ghép nối. 0.1pl2 không thể làm điều này; nó sẽ dừng sau khi chỉ giải nén tệp đầu tiên trong luồng.

Các phiên bản bzip2recover trước 1.0.2 đã sử dụng số nguyên 32 bit để biểu thị vị trí bit trong tệp nén, vì vậy chúng không thể xử lý tệp nén dài hơn 512 megabyte. Các phiên bản 1.0.2 trở lên sử dụng int 64-bit trên một số nền tảng hỗ trợ chúng (các mục tiêu được hỗ trợ bởi GNU và Windows). Để xác định xem bzip2recover có được tạo với giới hạn như vậy hay không, hãy chạy nó mà không cần đối số. Trong mọi trường hợp, bạn có thể tạo cho mình một phiên bản không giới hạn nếu bạn có thể biên dịch lại nó với MaybeUInt64 được đặt thành số nguyên 64 bit không dấu.

TÁC GIẢ

Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

Ý tưởng thể hiện trong bzip2 là do (ít nhất) những người sau: Michael Burrows và David Wheeler (đối với chuyển đổi sắp xếp khối), David Wheeler (một lần nữa, đối với lập trình viên Huffman), Peter Fenwick (đối với mô hình mã hóa có cấu trúc trong bzip, ban đầu và nhiều cải tiến), và Alistair Moffat, Radford Neal và Ian Witten (đối với lập trình viên số học trong bzip ban đầu). Tôi là mang ơn nhiều vì sự giúp đỡ, hỗ trợ và lời khuyên của họ. Xem hướng dẫn trong phân phối nguồn để biết các con trỏ tới các nguồn tài liệu. Christian von Roques khuyến khích tôi tìm kiếm các thuật toán sắp xếp nhanh hơn để tăng tốc độ nén. Bela Lubkin khuyến khích tôi cải thiện hiệu suất nén trong trường hợp xấu nhất. Donna Robinson XML hóa tài liệu. Các tập lệnh bz* có nguồn gốc từ các tập lệnh của GNU gzip. Nhiều người đã gửi các bản vá lỗi, giúp giải quyết các vấn đề về tính di động, cho mượn máy, đưa ra lời khuyên và nói chung là hữu ích.