Gzip

**gzip** adalah format file dan aplikasi perangkat lunak yang digunakan untuk kompresi dan dekompresi file. Program ini diciptakan oleh Jean-loup Gailly dan Mark Adler sebagai pengganti perangkat lunak *compress* pada sistem Unix awal, dan dirancang untuk digunakan oleh GNU (dari sinilah huruf "g" dalam gzip berasal). Versi pertama (0.1) dirilis pada 31 Oktober 1992, dan versi 1.0 menyusul pada Februari 1993.

Dekompresi format gzip dapat diimplementasikan sebagai algoritma *streaming*, yang merupakan fitur penting untuk protokol Web, pertukaran data, dan aplikasi ETL (menggunakan *pipes* standar).

## Format file
gzip didasarkan pada algoritma DEFLATE, kombinasi LZ77 dan Huffman coding. Algoritma ini dirancang untuk menggantikan algoritma kompresi seperti LZW yang dilindungi paten.

### Struktur format file gzip

* **Header 10-byte:** Berisi *magic number* (1f 8b), metode kompresi (08 untuk DEFLATE), *header flags*, *timestamp*, dan informasi sistem operasi.
* **Header tambahan opsional:** Bisa mencakup nama file asli, komentar, CRC-32 untuk bagian header, dan lainnya.
* **Body:** Payload terkompresi menggunakan DEFLATE.
* **Trailer 8-byte:** CRC-32 checksum dan panjang data asli tanpa kompresi.

gzip sering digunakan bersama program tar untuk mengompresi beberapa file menjadi satu arsip, menghasilkan file dengan ekstensi `.tar.gz` atau `.tgz`.

### Perbedaan dengan format lain

* **ZIP:** Memungkinkan pengarsipan file tanpa alat eksternal tetapi kurang kompak dibandingkan tarball terkompresi.
* **compress:** Menggunakan algoritma LZW dan memiliki ekstensi `.Z`. Alat *gunzip* mampu mendekompresi file ini.

## Implementasi
Berbagai implementasi gzip telah dibuat, di antaranya:

* **GNU Project:** Menggunakan algoritma LZ77.
* **BSD (FreeBSD, NetBSD, DragonFly BSD):** Implementasi berlisensi BSD yang kompatibel dengan zlib.
* **OpenBSD:** Menggunakan program *compress* dengan dukungan untuk format gzip.

**Alternatif kompresi:**

* **Zopfli:** Kompatibel dengan gzip, memberikan rasio kompresi lebih baik dengan waktu kompresi yang lebih lama.
* **pigz:** Ditulis oleh Mark Adler, menggunakan banyak CPU untuk mempercepat kompresi.

### Pemulihan data yang rusak
Data pada blok sebelum kerusakan biasanya dapat dibaca sepenuhnya. Data dari blok yang tidak hancur setelah kerusakan dapat dipulihkan melalui langkah tambahan.

## Derivatif dan penggunaan lain

* **tar:** Digunakan untuk mengekstraksi arsip `.tar.gz` dengan perintah seperti `tar -zxf file.tar.gz`.
* **zlib:** Abstraksi algoritma DEFLATE yang mendukung format gzip dan stream data ringan.
* **HTTP Compression:** Format gzip digunakan untuk mempercepat pengiriman konten Web, sebagai salah satu dari tiga format standar untuk HTTP Compression.
* **PNG:** Menggunakan zlib DEFLATE secara internal.

### Pengganti populer

* **bzip2:** Memberikan rasio kompresi lebih kecil tetapi membutuhkan lebih banyak waktu dan memori.
* **AdvanceCOMP, Zopfli, libdeflate, 7-Zip:** Menghasilkan file yang kompatibel dengan gzip dengan rasio kompresi lebih baik, meskipun membutuhkan waktu proses lebih lama.

### Penelitian dan Inovasi
Penelitian pada 2023 menunjukkan bahwa teknik kompresi sederhana seperti gzip dapat dikombinasikan dengan algoritma k-nearest-neighbor untuk klasifikasi teks, memberikan alternatif menarik terhadap jaringan neural untuk pemrosesan bahasa alami dengan kebutuhan sumber daya rendah, termasuk tanpa memerlukan perangkat keras GPU.

## Penggunaan gzip
Berikut ini adalah beberapa sintaks yang bisa dilakukan dalam penggunaan gzip:

Sintaks umum untuk perintah gzip adalah sebagai berikut:
```bash
gzip [OPTION]... [FILE]...
```
Untuk mengompres satu file, jalankan perintah gzip diikuti dengan nama file:
```bash
gzip NamaFile
```
Untuk mengopres banyak file, bisa gunakan perintah berikut:
```bash
gzip file1 file2 file3
```
Untuk mengompres semua file dalam direktori yang diberikan, gunakan opsi `-r`:
```bash
gzip -r directory
```
Untuk mendecompress file `.gz`, gunakan opsi `-d`:
```bash
gzip -d NamaFile.gz
```
Untuk mendekompresi banyak file sekaligus, berikan beberapa nama file dengan dipisahkan oleh spasi ke gzip sebagai argumen:
```bash
gzip -d file1.gz file2.gz file3.gz
```
Ketika digunakan dengan opsi `-d` dan `-r`, gzip mendekompres semua file dalam direktori yang diberikan secara rekursif:
```bash
gzip -dr directory
```
Masih ada beberapa sintaks dalam penggunaan gzip yang bisa dimanfaatkan.

## Referensi