Archiving and Transferring Files | RH124 (Indonesia ver.)
Tags: ramadhanbersamaredhat
Published: 2024-04-01 17:19:59

## Perintah tar
Pengarsipan dan pengompresan file berguna ketika membuat file cadangan (backup) dan mentransfer data melalui jaringan. Salah satu perintah tertua dan paling umum untuk membuat dan bekerja dengan arsip backup adalah perintah **tar**.

Dengan **tar**, pengguna dapat mengumpulkan kumpulan file yang besar ke dalam satu file (arsip). Arsip tar adalah urutan terstruktur dari data berkas yang dicampur dengan metadata tentang setiap berkas dan indeks sehingga setiap berkas dapat diekstrak. Arsip dapat dikompresi menggunakan kompresi _gzip_, _bzip2_, atau _xz_.

Perintah **tar** dapat membuat daftar isi arsip atau mengekstrak filenya ke sistem saat ini.

## Pilihan opsi **tar**
Opsi perintah **tar** dibagi menjadi operasi (tindakan yang ingin Anda lakukan): opsi umum dan opsi kompresi. Berikut ini menunjukkan opsi umum, opsi umum versi panjang, dan deskripsinya:

**List operasi tar**
1. **-c (--create)**: Membuat arsip baru.
2. **-x (--extract)**: Ekstrak dari arsip yang sudah ada.
3. **-t (--list)**: Membuat daftar isi arsip.

**List Pilihan Opsi Umum tar**

1. **-v (--verbose)**: Verbose. Menunjukkan file mana yang diarsipkan atau diekstrak.
2. **-f (--file=)**: Nama file. Opsi ini harus diikuti dengan nama file arsip yang akan digunakan atau dibuat.
3. **-p (--preserve-permissions)**: Mempertahankan izin file dan direktori saat mengekstrak arsip, tanpa mengurangi _umask_.

**List Pilihan Opsi Kompresi tar**

1. **-z (--gzip)**: Menggunakan kompresi **gzip** (_.tar.gz_).
2. **-j (--bzip2)**: Menggunakan kompresi **bzip2** (_.tar.bz2_). **bzip2** biasanya menghasilkan rasio kompresi yang lebih baik daripada **gzip**.
3. **-J (--xz)**: Menggunakan kompresi **xz** (_.tar.xz_). Kompresi **xz** biasanya menghasilkan rasio kompresi yang lebih baik daripada **bzip2**.

## Mengarsipkan File dan Direktori
Opsi pertama yang digunakan saat membuat arsip baru adalah opsi `c`, diikuti dengan opsi `f`, kemudian spasi tunggal, lalu nama file dari arsip yang akan dibuat, dan terakhir daftar file dan direktori yang akan ditambahkan ke dalam arsip. Arsip dibuat di direktori saat ini kecuali ditentukan lain.

> **Peringatan**
Sebelum membuat arsip tar, pastikan tidak ada arsip lain di direktori dengan nama yang sama dengan arsip baru yang akan dibuat. Perintah **tar** akan menimpa arsip yang sudah ada tanpa peringatan.

Perintah berikut ini membuat sebuah arsip bernama `archive.tar` dengan isi `file1`, `file2`, dan `file3` di direktori beranda pengguna.

```
[user@host ~]$ tar -cf archive.tar file1 file2 file3
[user@host ~]$ ls archive.tar
archive.tar
```
Perintah **tar** di atas juga dapat dieksekusi dengan menggunakan opsi versi panjang.

```
[user@host ~]$ tar --file=archive.tar --create file1 file2 file3
```

> **Catatan**
Apabila mengarsipkan file dengan nama jalur absolut, bagian depan `/` dari jalur dihapus dari nama file secara default. Menghapus bagian depan `/` pada path membantu pengguna untuk menghindari penimpaan file penting saat mengekstrak arsip. Perintah **tar** mengekstrak file relatif terhadap direktori kerja saat ini.

Agar **tar** dapat mengarsipkan berkas yang dipilih, pengguna yang menjalankan perintah **tar** haruslah pengguna yang dapat membaca berkas tersebut. Sebagai contoh, membuat arsip baru dari folder _/etc_ dan semua isinya membutuhkan hak akses _root_, karena hanya pengguna _root_ yang diizinkan untuk membaca semua berkas yang ada pada direktori _/etc_. Pengguna yang tidak memiliki hak istimewa dapat membuat arsip direktori _/etc_, tetapi arsip tersebut menghilangkan file yang tidak memiliki hak baca untuk pengguna tersebut, dan menghapus direktori yang tidak memiliki hak baca dan eksekusi untuk pengguna tersebut.

Untuk membuat arsip **tar** bernama, _/root/etc.tar_, dengan direktori _/etc_ sebagai konten sebagai _root_:

```
[root@host ~]# tar -cf /root/etc.tar /etc
tar: Removing leading `/' from member names
[root@host ~]# 
```
> **Penting**
Beberapa perizinan tingkat lanjut yang ada di redhat, seperti ACL dan konteks SELinux, tidak secara otomatis disimpan di dalam arsip **tar**. Gunakan opsi `--xattrs` saat membuat arsip untuk menyimpan atribut yang diperluas tersebut dalam arsip tar.

## Melihat Daftar Isi Arsip
Opsi `t` mengarahkan **tar** untuk membuat daftar isi (daftar isi, maka `t`) arsip. Gunakan opsi `f` dengan nama arsip yang akan ditanyakan. Sebagai contoh:

```
[root@host ~]# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
```
## Mengekstrak File dari Arsip
Arsip **tar** biasanya diekstrak di direktori kosong untuk memastikan bahwa ia tidak menimpa berkas yang sudah ada. Ketika _root_ mengekstrak sebuah arsip, perintah **tar** akan mempertahankan kepemilikan pengguna dan grup asli dari berkas-berkas tersebut. Jika pengguna biasa mengekstrak berkas menggunakan **tar**, kepemilikan berkas menjadi milik pengguna yang mengekstrak berkas dari arsip.

Untuk mengembalikan file dari arsip `/root/etc.tar` ke direktori `/root/etcbackup`, jalankan:

```
[root@host ~]# mkdir /root/etcbackup
[root@host ~]# cd /root/etcbackup
[root@host etcbackup]# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
[root@host etcbackup]# tar -xf /root/etc.tar
```
Secara default, ketika file diekstrak dari arsip, _umask_ akan dikurangi dari izin konten arsip. Untuk mempertahankan izin file yang diarsipkan, gunakan opsi p saat mengekstrak arsip.

Pada contoh ini, sebuah arsip bernama, `/root/myscripts.tar`, diekstrak di direktori `/root/scripts` sambil mempertahankan hak akses dari file yang diekstrak:

```
[root@host ~]# mkdir /root/scripts
[root@host ~]# cd /root/scripts
[root@host scripts]# tar -xpf /root/myscripts.tar
```

## Membuat Arsip Terkompresi
Perintah **tar** mendukung tiga metode kompresi. Ada tiga metode kompresi berbeda yang didukung oleh perintah **tar**. Kompresi _gzip_ adalah yang tercepat dan tertua dan paling banyak tersedia di seluruh distribusi dan bahkan di seluruh platform. Kompresi _bzip2_ membuat file arsip yang lebih kecil dibandingkan dengan _gzip_ tetapi kurang tersedia secara luas dibandingkan dengan _gzip_, sedangkan metode kompresi _xz_ relatif baru, tetapi biasanya menawarkan rasio kompresi terbaik dari metode-metode yang tersedia.

> **Catatan**
Efektivitas algoritma kompresi apa pun tergantung pada jenis data yang dikompresi. File data yang sudah dikompresi, seperti format gambar yang dikompresi atau file RPM, biasanya menghasilkan rasio kompresi yang rendah.

Merupakan praktik yang baik untuk menggunakan satu direktori tingkat atas, yang dapat berisi direktori dan berkas lain, untuk menyederhanakan ekstraksi berkas dengan cara yang terorganisir.

Gunakan salah satu opsi berikut untuk membuat arsip tar terkompresi:

- `-z` atau `--gzip` untuk kompresi _gzip_(`namafile.tar.gz` atau `namafile.tgz`)
- `-j` atau `--bzip2` untuk kompresi _bzip2_(`namafile.tar.bz2`)

- `-J` atau `-xz` untuk kompresi _xz_(`namafile.tar.xz`)

Untuk membuat arsip terkompresi _gzip_ bernama _/root/etcbackup.tar.gz_, dengan konten dari direktori _/etc_ pada _host_:

```
[root@host ~]# tar -czf /root/etcbackup.tar.gz /etc
tar: Removing leading `/' from member names
```
Untuk membuat arsip terkompresi _bzip2_ bernama _/root/logbackup.tar.bz2_, dengan konten dari direktori _/var/log_ pada _host_:

```
[root@host ~]$ tar -cjf /root/logbackup.tar.bz2 /var/log
tar: Removing leading `/' from member names
```

Untuk membuat arsip terkompresi _xz_ bernama, _/root/sshconfig.tar.xz_, dengan konten dari direktori _/etc/ssh_ pada _host_:

```
[root@host ~]$ tar -cJf /root/sshconfig.tar.xz /etc/ssh
tar: Removing leading `/' from member names
```
Setelah membuat arsip, verifikasi konten arsip menggunakan opsi _tf_. Opsi untuk agen kompresi tidak wajib digunakan saat mencantumkan konten file arsip yang dikompresi. Misalnya, untuk membuat daftar konten yang diarsipkan di file _/root/etcbackup.tar.gz_, yang menggunakan kompresi _gzip_, gunakan perintah berikut:

```
[root@host ~]# tar -tf /root/etcbackup.tar.gz /etc
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
```

## Mengekstrak Arsip Terkompresi
Langkah pertama saat mengekstrak arsip **tar** terkompresi adalah menentukan di mana file yang diarsipkan harus diekstrak, kemudian buat dan ubah ke direktori target. Perintah **tar** menentukan kompresi yang digunakan dan biasanya tidak perlu menggunakan opsi kompresi yang sama dengan yang digunakan saat membuat arsip. Adalah sah untuk menambahkan metode dekompresi ke perintah **tar**. Jika seseorang memilih untuk melakukannya, pilihan jenis dekompresi yang benar harus digunakan; jika tidak, tar akan menghasilkan kesalahan tentang jenis dekompresi yang ditentukan dalam pilihan yang tidak sesuai dengan jenis dekompresi file.

Untuk mengekstrak isi arsip terkompresi _gzip_ bernama _/root/etcbackup.tar.gz_ pada direktori _/tmp/etcbackup_:

```
[root@host ~]# mkdir /tmp/etcbackup
[root@host ~]# cd /tmp/etcbackup
[root@host etcbackup]# tar -tf /root/etcbackup.tar.gz
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
[root@host etcbackup]# tar -xzf /root/etcbackup.tar.gz
```
Untuk mengekstrak isi arsip terkompresi _bzip2_ bernama _/root/logbackup.tar.bz2_ di direktori _/tmp/logbackup_:

```
[root@host ~]# mkdir /tmp/logbackup
[root@host ~]# cd /tmp/logbackup
[root@host logbackup]# tar -tf /root/logbackup.tar.bz2
var/log/
var/log/lastlog
var/log/README
var/log/private/
var/log/wtmp
var/log/btmp
...output omitted...
[root@host logbackup]# tar -xjf /root/logbackup.tar.bz2
```
Untuk mengekstrak isi arsip terkompresi _xz_ bernama _/root/sshbackup.tar.xz_ di direktori _/tmp/sshbackup_:

```
[root@host ~]$ mkdir /tmp/sshbackup
[root@host ~]# cd /tmp/sshbackup
[root@host logbackup]# tar -tf /root/sshbackup.tar.xz
etc/ssh/
etc/ssh/moduli
etc/ssh/ssh_config
etc/ssh/ssh_config.d/
etc/ssh/ssh_config.d/05-redhat.conf
etc/ssh/sshd_config
...output omitted...
[root@host sshbackup]# tar -xJf /root/sshbackup.tar.xz
```

## Mentransfer File Antar Sistem dengan Aman
**Mentransfer File Menggunakan Secure Copy**
OpenSSH berguna untuk menjalankan perintah shell secara aman pada sistem jarak jauh. Perintah Secure Copy, **scp**, yang merupakan bagian dari paket OpenSSH, menyalin berkas dari sistem jarak jauh ke sistem lokal atau dari sistem lokal ke sistem jarak jauh. Perintah ini menggunakan server SSH untuk autentikasi dan mengenkripsi data ketika sedang ditransfer.

Anda dapat menentukan lokasi remote untuk sumber atau tujuan file yang disalin. Format lokasi jarak jauh harus dalam bentuk _[user@]host:/path._ Bagian _user@_ pada argumen bersifat opsional. Jika tidak ada, nama pengguna lokal Anda saat ini akan digunakan. Ketika Anda menjalankan perintah tersebut, klien **scp** Anda akan mengautentikasi ke server SSH jarak jauh seperti halnya **ssh**, menggunakan autentikasi berbasis kunci atau meminta kata sandi Anda.

Contoh berikut ini menunjukkan cara menyalin berkas lokal _/etc/yum.conf_ dan _/etc/hosts_ pada host, ke direktori home _remoteuser_ pada sistem jarak jauh _remotehost_:

```
[user@host ~]$ scp /etc/yum.conf /etc/hosts remoteuser@remotehost:/home/remoteuser
remoteuser@remotehost's password: password
yum.conf                                   100%  813     0.8KB/s   00:00
hosts                                      100%  227     0.2KB/s   00:00
```
Anda juga dapat menyalin berkas ke arah lain, dari sistem jarak jauh ke sistem berkas lokal. Pada contoh ini, berkas _/etc/hostname_ pada _remotehost_ disalin ke direktori lokal _/home/user_. Perintah **scp** mengautentikasi ke _remotehost_ sebagai pengguna _remoteuser_.

```
[user@host ~]$ scp remoteuser@remotehost:/etc/hostname /home/user
remoteuser@remotehost's password: password
hostname                                   100%   22     0.0KB/s   00:00
```
Untuk menyalin seluruh pohon direktori secara rekursif, gunakan opsi _-r_. Pada contoh berikut, direktori remote _/var/log_ pada _remotehost_ disalin secara rekursif ke direktori lokal _/tmp/_ pada _host_. Anda harus tersambung ke sistem remote sebagai _root_ untuk memastikan bahwa Anda dapat membaca semua berkas dalam direktori _/var/log_ jarak jauh.

```
[user@host ~]$ scp -r root@remoteuser:/var/log /tmp
root@remotehost's password: password
...output omitted...
```

## Mentransfer File Menggunakan Secure File Transfer Program
Untuk mengunggah atau mengunduh file secara interaktif dari server SSH, gunakan Secure File Transfer Program, **sftp**. Sesi dengan perintah **sftp** menggunakan mekanisme autentikasi aman dan transfer data terenkripsi ke dan dari server SSH.

Sama seperti perintah **scp**, perintah **sftp** menggunakan _[user@]host_ untuk mengidentifikasi sistem target dan nama pengguna. Jika Anda tidak menentukan pengguna, perintah ini akan mencoba masuk menggunakan nama pengguna lokal Anda sebagai nama pengguna jarak jauh (remote). Anda kemudian akan dihadapkan pada prompt _sftp>_.

```
[user@host ~]$ sftp remoteuser@remotehost
remoteuser@remotehost's password: password
Connected to remotehost.
sftp> 
```
Sesi **sftp** interaktif menerima berbagai perintah yang bekerja dengan cara yang sama pada sistem berkas jarak jauh (remote) seperti halnya pada sistem berkas lokal, seperti **ls**, **cd**, **mkdir**, **rmdir**, dan **pwd**. Perintah **put** mengupload berkas ke sistem jarak jauh. Perintah **get** mengunduh berkas dari sistem remote. Perintah **exit** keluar dari sesi **sftp**.

Untuk mengupload berkas _/etc/hosts_ pada sistem lokal ke direktori yang baru dibuat _/home/remoteuser/hostbackup_ pada _remotehost_. Sesi **sftp** selalu mengasumsikan bahwa perintah **put** diikuti oleh sebuah berkas pada sistem berkas lokal dan dimulai pada direktori home pengguna yang terhubung; dalam kasus ini, _/home/remoteuser_:

```
sftp> mkdir hostbackup
sftp> cd hostbackup
sftp> put /etc/hosts
Uploading /etc/hosts to /home/remoteuser/hostbackup/hosts
/etc/hosts                                 100%  227     0.2KB/s   00:00
sftp> 
```
Untuk mengunduh _/etc/yum.conf_ dari host remote ke direktori saat ini di sistem lokal, jalankan perintah **get /etc/yum.conf** dan keluar dari sesi **sftp** dengan perintah **exit**.

```
sftp> get /etc/yum.conf
Fetching /etc/yum.conf to yum.conf
/etc/yum.conf                              100%  813     0.8KB/s   00:00
sftp> exit
[user@host ~]$ 
```