Topik ini membahas tar untuk mengemas banyak berkas menjadi satu arsip, gzip untuk mengompresi berkas tunggal, serta pola kompres lalu kirim yang lazim dipakai saat memindahkan cadangan antarmesin. Contoh di sepanjang topik memakai proyek catatan kecil yang berisi dua berkas teks. Setelah membacanya, sebuah direktori dapat dibungkus menjadi satu berkas cadangan, diperiksa isinya, dipindahkan, dan dibuka kembali dengan perintah yang sama.
Mengemas direktori dengan tar#
tar mengemas sekumpulan berkas dan direktori menjadi satu arsip yang sering disebut tarball, dengan struktur direktori dan izin berkasnya tetap dipertahankan. Operasinya dipilih lewat huruf tunggal, yaitu c untuk membuat, t untuk menampilkan isi, dan x untuk mengekstrak. Opsi f menyebut nama berkas arsip, sedangkan opsi z menambahkan kompresi gzip ke dalam langkah yang sama. Kombinasi tar -czf karenanya menghasilkan arsip terkompresi yang lazim diberi akhiran .tgz atau .tar.gz.
# menyiapkan proyek catatan sebagai bahan arsip
mkdir -p proyek-catatan
printf 'ide artikel: migrasi log ke arsip bulanan\n' > proyek-catatan/ide.txt
printf 'tugas minggu ini: uji cadangan otomatis\n' > proyek-catatan/tugas.txt
# mengemas dan mengompresi direktori proyek dalam satu langkah
tar -czf cadangan-catatan.tgz proyek-catatan
ls -1 cadangan-catatan.tgzcadangan-catatan.tgztar tidak mencetak apa pun ketika berhasil, sehingga konfirmasi dilakukan dengan memeriksa keberadaan arsip seperti pada ls -1 di atas. Kegagalan, misalnya nama direktori yang salah, dilaporkan lewat pesan error dan kode keluar bukan nol. Perilaku senyap pada keberhasilan adalah kebiasaan umum perintah Unix.
Memeriksa dan mengekstrak arsip#
Isi arsip diperiksa dengan opsi t sebelum diekstrak, sehingga nama berkas di dalamnya diketahui tanpa menulis apa pun ke diska. Daftar pada contoh berikut diurutkan dengan sort agar mudah dibaca. Kebiasaan ini berguna untuk arsip dari pihak lain yang isinya belum diketahui.
# memeriksa isi arsip tanpa mengekstraknya, daftar diurutkan agar mudah dibaca
tar -tzf cadangan-catatan.tgz | sortproyek-catatan/
proyek-catatan/ide.txt
proyek-catatan/tugas.txtEkstraksi memakai opsi x, sedangkan opsi -C mengarahkan direktori tujuannya. Tanpa -C, isi arsip ditulis ke direktori saat ini dan dapat menimpa berkas dengan nama sama, sehingga ekstraksi uji ke direktori kosong menjadi kebiasaan yang aman.
# mengekstrak arsip ke direktori pemulihan
mkdir -p pemulihan
tar -xzf cadangan-catatan.tgz -C pemulihan
ls -1 pemulihan/proyek-catatanide.txt
tugas.txtSaat membaca arsip, GNU tar mengenali kompresi gzip secara otomatis, sehingga tar -tf cadangan-catatan.tgz tanpa opsi z juga berjalan. Opsi z tetap lazim ditulis karena membuat maksud baris perintahnya jelas dan kompatibel dengan implementasi tar yang lebih tua. Perbedaan ini hanya berlaku saat membaca, sedangkan pembuatan arsip terkompresi tetap memerlukan opsi z.
Mengompresi satu berkas dengan gzip#
gzip bekerja pada satu berkas dan tidak mengemas direktori. Tanpa opsi tambahan, gzip menggantikan berkas aslinya dengan berkas bernama sama ditambah akhiran .gz, sedangkan gunzip mengembalikannya. Opsi -k (keep) menyimpan berkas aslinya, dan zcat mencetak isi berkas terkompresi ke keluaran standar tanpa mengekstrak.
# membuat berkas log sensor dengan isi berulang
printf 'sensor=1 suhu=24.5\nsensor=1 suhu=24.5\nsensor=1 suhu=24.5\n' > sensor.log
# ukuran berkas sebelum kompresi
wc -c sensor.log
# mengompresi berkas, gzip menghapus aslinya dan menyimpan sensor.log.gz
gzip sensor.log
ls -1 sensor.log*
# ukuran berkas sesudah kompresi
wc -c sensor.log.gz
# membaca isi berkas terkompresi tanpa mengekstraknya
zcat sensor.log.gz57 sensor.log
sensor.log.gz
53 sensor.log.gz
sensor=1 suhu=24.5
sensor=1 suhu=24.5
sensor=1 suhu=24.5Keluaran di atas memperlihatkan berkas 57 byte yang menyusut menjadi 53 byte setelah kompresi. Angka ini kecil karena teks contohnya pendek, sedangkan berkas log teks dengan isi berulang ribuan baris biasanya terkompresi jauh lebih efisien. Justru karena pola berulangnya, log sensor suhu dan catatan teks adalah kandidat kompresi yang cocok.
Pola kompres lalu kirim#
Pola kompres lalu kirim mengalirkan hasil pengemasan tar langsung ke gzip, kemudian ke berkas tujuan atau jaringan, tanpa menyimpan arsip sementara di diska. Tanda hubung pada tar -cf - menandai keluaran standar sebagai tempat arsip ditulis, sehingga tarball dialirkan melalui pipe. Diagram berikut menggambarkan alur tersebut.
# mengalirkan hasil pengemasan tar langsung ke gzip, tanda hubung berarti masukan atau keluaran standar
tar -cf - proyek-catatan | gzip > pola-pipe.tgz
# memastikan isi arsip hasil aliran pipe
tar -tzf pola-pipe.tgz | sortproyek-catatan/
proyek-catatan/ide.txt
proyek-catatan/tugas.txtPola yang sama digunakan untuk mengirim cadangan ke mesin lain. Apabila ssh tersedia, tarball dialirkan langsung ke perintah jarak jauh tanpa berkas perantara, seperti pada contoh berikut yang tidak dapat dieksekusi di sandbox karena memerlukan host jarak jauh.
# tidak-dijalankan
# mengirim arsip langsung ke server cadangan lewat ssh
tar -czf - proyek-catatan | ssh [email protected] 'cat > cadangan-catatan.tgz'Di sisi penerima, berkas cadangan-catatan.tgz dibongkar dengan tar -xzf seperti pada bagian sebelumnya. Varian lain melebarkan arsip di sisi tujuan sekaligus, yaitu ssh [email protected] 'tar -xzf -', sehingga yang dikirim adalah aliran terkompresi dan yang tersimpan adalah berkas aslinya. Pola ini sering dipakai dalam skrip cadangan harian yang dijadwalkan lewat cron.
Kesalahan umum#
Kesalahan berikut paling sering muncul saat tar dan gzip dipraktikkan.
- gzip dijalankan terhadap direktori. gzip tidak mengemas direktori dan hanya mengompresi satu berkas, sehingga direktori harus dibungkus tar terlebih dahulu. Kombinasi
tar -czfmenangani kedua langkah sekaligus. - Opsi f terlupa. tar menulis arsip ke perangkat bawaan ketika f tidak diberikan, sehingga keluaran standar terisi data biner tanpa berkas yang jelas. Gunakan urutan yang tetap seperti
tar -czf nama.tgz direktoripada setiap skrip. - Arsip lama tertimpa tanpa sengaja. tar menimpa arsip bernama sama secara senyap saat membuat arsip baru, sehingga penamaan dengan tanggal seperti cadangan-2026-11-06.tgz mengurangi risiko ini.
Ringkasan#
- tar mengemas banyak berkas dan direktori menjadi satu tarball dengan struktur dan izinnya utuh, sedangkan gzip mengompresi satu berkas.
- Opsi c, t, dan x membuat, menampilkan isi, dan mengekstrak arsip, sedangkan opsi -C menentukan direktori tujuan ekstraksi.
- gzip menggantikan berkas aslinya dengan berkas .gz kecuali opsi -k digunakan, dan zcat membaca isinya tanpa mengekstrak.
- Pola kompres lalu kirim mengalirkan tarball lewat pipe ke gzip atau ssh sehingga tidak ada arsip sementara di diska.
Referensi#
- GNU tar Manual — Free Software Foundation — Manual GNU tar untuk opsi pembuatan, pemeriksaan, dan ekstraksi arsip.
- GNU gzip Manual — Free Software Foundation — Manual GNU gzip untuk opsi -k, -c, dan perilaku penggantian berkas.