Tiêu chuẩn GNU Zip – Đặc tả định dạng tập tin nén GNU 

Tổng quan về GNU Zip

Tiêu chuẩn GNU Zip (GZIP) – Đặc tả định dạng tập tin nén GNU là tiêu chuẩn do Nhóm chuyên trách kỹ thuật Internet (Internet Engineering Task Force - IETF) duy trì, quản lý.

Đặc tả kỹ thuật này xác định một định dạng nén không tổn thất dữ liệu với các mục đích sau:

* Hoạt động độc lập với bộ vi xử lý, hệ điều hành, hệ thống tập tin và bộ ký tự, do đó, có thể được dùng để trao đổi;

* Có thể nén hoặc giải nén một luồng dữ liệu (điều này trái ngược với một tập tin truy cập ngẫu nhiên) để tạo ra một dòng dữ liệu khác mà chỉ sử dụng một không gian lưu trữ không lớn, do đó, có thể được sử dụng trong truyền dữ liệu hoặc cấu trúc tương tự như bộ lọc Unix;

* Nén dữ liệu có hiệu quả tương đương với các phương pháp nén hiện có;

* Có thể được thực hiện dễ dàng mà không vi phạm các bằng sáng chế đã có;

* Tương thích với các định dạng tập tin được tạo ra bởi tiện ích nén dữ liệu GZIP đang sử dụng rộng rãi.

Tuy nhiên, đặc tả kỹ thuật này không có khả năng:

* Cung cấp truy cập ngẫu nhiên đến dữ liệu đã nén;

* Nén dữ liệu chuyên ngành (ví dụ, đồ họa raster) như các thuật toán chuyên ngành hiện có.

Đặc tả kỹ thuật này quy định thuật toán nén và định dạng tập tin. Nó không xác định bất kỳ giao diện cụ thể một tập tin hệ thống hoặc về các bộ ký tự hoặc mã hóa. Thuật toán nén được sử dụng là DEFLATE nhưng có thể sử dụng thuật toán nén khác. Trong thuật toán nén có chứa một giá trị kiểm tra lỗi để phát hiện lỗi dữ liệu.

Tiện ích nén dữ liệu GZIP (GNU ZIP)

Tiện ích GZIP được Jean-Loup Gailly và Mark Adler phát triển thành phần mềm miễn phí để thay thế cho chương trình nén dữ liệu được sử dụng trong các hệ thống Unix ban đầu và sử dụng cho dự án GNU (GNU Project). GZIP phiên bản 0.1 lần đầu tiên được công bố vào ngày 31/10/1992, phiên bản 1.0 được công bố vào tháng 02/1993. GZIP phiên bản 1.6 được công bố vào tháng 7/2013.

GZIP được phát triển dựa trên thuật toán DEFLATE, đây là sự kết hợp của các thuật toán mã hóa LZ77 và Huffman. DEFATE được phát triển với mục đích thay thế cho thuật toán mã hóa LZ77 và những thuật toán nén dữ liệu khác khi sử dụng cần phải xin cấp phép quyền sử dụng.

GIZP thường được sử dụng để mô tả định dạng tập tin GZIP, trong đó

- Phần mô tả có kích thước 10 byte, chứa một số xác định định dạng tập tin, một số hiệu phiên bản và một nhãn thời gian.

- Thông tin mô tả bổ sung, ví dụ tên tập tin ban đầu.

- Phần nội dung chứa dữ liệu đã được nén sử dụng thuật toán DEFLATE.

- Phần kết thúc có kích thước 8 byte, chứa một mã kiểm tra lỗi 32 bít và độ dài của dữ liệu không nén ban đầu.

Hoạt động của GZIP

GZIP giảm kích thước các tập tin bằng cách sử dụng thuật toán mã hóa Lempel-Ziv (LZ77). Bất cứ khi nào có thể, mỗi tập tin được thay thế bởi một thành phần khác với phần mở rộng là '.gz', trong khi vẫn giữ thông tin về chủ thể sở hữu, thời gian truy cập và sửa đổi. (Phần mở rộng mặc định là '-gz' cho VMS, 'z' cho MSDOS, OS/2 FAT và Atari.)

Nếu không xác định được tập tin hoặc nếu tên tập tin là "-", đầu vào chuẩn được nén thành đầu ra chuẩn. GZIP sẽ chỉ cố gắng nén các tập tin phổ biến. Đặc biệt, nó sẽ bỏ qua các liên kết có tính biểu tượng.

Nếu tên tập tin mới quá dài đối với hệ thống tập tin cho phép, GZIP sẽ cắt độ dài tên cho phù hợp. GZIP chỉ cố gắng cắt độ dài các phần trong tên tập tin nếu độ dài các phần có nhiều hơn 3 ký tự (Các phần được phân cách bằng dấu chấm). Nếu tên tập tin chỉ bao gồm các phần nhỏ, những phần dài nhất được cắt ngắn. Ví dụ, nếu tên tập tinGZIP.msdos.exe được giới hạn trong 14 ký tự, nó sẽ được nén để thành gzi.msd.exe.gz. Tên các tập tin sẽ không bị cắt ngắn trên hệ thống không quy định giới hạn về chiều dài tên tập tin.

Theo mặc định, GZIP giữ nguyên tên tập tin và thời gian nén trong tập tin nén. Chúng được sử dụng khi giải nén tập tin với tùy chọn -N. Điều này rất hữu ích khi tên tập tin nén đã được cắt ngắn hoặc khi thời gian nén không được lưu sau khi chuyển tập tin. Tuy nhiên, do những hạn chế trong định dạng tập tin GZIP hiện tại, thành phần giây trong thời gian bị bỏ đi. Ngoài ra, nhãn thời gian phải nằm trong phạm vi từ 00:00:00 01/01/1970 đến 06:28:15 07/02/2106 UTC, và các máy chủ có hệ điều hành sử dụng nhãn thời gian 32-bit thường bị hạn chế đến thời gian không muộn hơn 03:14:07 19/01/2038 UTC. Các cận trên giả định trong trường hợp khi các giây nhuận được bỏ qua.

Tập tin nén có thể khôi phục trở lại dạng ban đầu của chúng bằng cách sử dụng 'GZIP -d' hoặc GZIP hoặc zcat. Nếu tên gốc lưu trong tập tin nén không giống tên trong hệ thống tập tin của nó, một cái tên mới sẽ được tạo ra từ một bản gốc để sinh ra tên tập tin hợp lệ.

GZIP có một danh sách các tập tin trên dòng lệnh của nó và thay thế mỗi tập tin có tên kết thúc bằng '.gz', 'z' '-gz', 'z', hoặc '_z' (trường hợp bỏ qua) và bắt đầu với các số định danh định dạng của tập tin với một tập tin không nén mà không cần phần mở rộng gốc. GZIP cũng công nhận những phần mở rộng đặc biệt '.tgz' và '.taz' là viết tắt cho '.tar.gz' và '.tar.Z' tương ứng. Khi nén, GZIP sử dụng phần mở rộng '.tgz' nếu cần thiết thay vì cắt bỏ một tập tin với phần mở rộng ‘tar'.

GZIP có thể đồng thời giải nén các tập tin được tạo ra bởi GZIP, zip, nén hoặc đóng gói. Việc phát hiện các định dạng đầu vào là tự động. Khi sử dụng hai định dạng đầu tiên, GZIP sẽ kiểm tra bít kiểm tra lỗi. Đối với việc đóng gói, GZIP kiểm độ dài không nén. Định dạng nén không được thiết kế để kiểm tra tính nhất quán. Tuy nhiên, GZIP đôi khi có thể phát hiện một tập tin lỗi '.Z'. Nếu nhận được một lỗi khi giải nén một tập tin '.Z', nguyên nhân do hành động giải nén chuẩn không xảy ra. Điều này thường có nghĩa là giải nén chuẩn không kiểm tra đầu vào của nó và tạo ra tập tin rác. Định dạng 'nén -H' SCO không chứa bít kiểm tra lỗi nhưng cũng cho phép kiểm tra tính nhất quán.

Những tập tin được tạo bởi zip có thể được giải nén bằng GZIP chỉ khi chúng có một thành phần duy nhất được nén bằng phương pháp "DEFLATE". Tính năng này chỉ nhằm mục đích giúp chuyển đổi các tập tin có định dạng tar.zip sang định dạng tar.gz. Để giải nén một tập tin zip với một thành phần duy nhất, sử dụng một lệnh ‘GZIP <foo.zip' hoặc 'GZIP -S .zip foo.zip'. Để giải nén các tập tin zip với một số thành phần, sử dụng unzipthay vì GZIP.

zcat giống hệt 'GZIP -c'. Giải nén zcat hoặc là một danh sách các tập tin trên dòng lệnh hoặc dữ liệu đầu vào chuẩn của nó và ghi dữ liệu không nén trên đầu ra chuẩn. zcat sẽ không nén các tập tin có số định danh định dạng tập tin chính xác cho dù chúng có hậu tố ".gz" hay không.

GZIP sử dụng thuật toán Lempel-Ziv  sử dụng trong zip và PKZIP. Số lượng nén thu được phụ thuộc vào kích thước của đầu vào và phân bố của chuỗi con phổ biến. Thông thường, văn bản như mã nguồn hoặc tiếng Anh giảm dung lượng được đến 60-70%. Nói chung việc nén dữ liệu tốt hơn nhiều khi nén bằng thuật toán LZW (Lempel–Ziv–Welch) (được sử dụng khi không nén), mã hóa Huffman (được sử dụng trong đóng gói).

Việc nén dữ liệu luôn luôn được thực hiện ngay cả khi tập tin đã nén lớn hơn một ít so với bản gốc. Chú ý rằng số khối đĩa thực tế được sử dụng hầu như không bao giờ tăng. GZIP thường lưu chế độ, quyền sở hữu và thời gian của tập tin khi nén và giải nén.

Ứng dụng

Đặc tả GNU Zip được ứng dụng rộng rãi trong nhiều tiện ích nén dữ liệu như GZIP,PowerArchiver, 7-zip hay Winzip.

Trong Thông tư số 22/2013/TT-BTTTT ngày 23/12/2013 của Bộ trưởng Bộ Thông tin và Truyền thông Công bố Danh mục tiêu chuẩn kỹ thuật về ứng dụng công nghệ thông tin trong cơ quan nhà nước quy định Bắt buộc áp dụng tiêu chuẩn GNU Zip v4.3 và được xếp vào nhóm Tiêu chuẩn về truy cập thông tin

6418 Go top

ĐĂNG CÂU HỎI