16 Contoh Praktis Perintah Rsync di Linux


Rsync (Remote Sync) adalah perintah yang paling umum digunakan untuk menyalin dan menyinkronkan file dan direktori dari jarak jauh serta lokal di sistem Linux/Unix.

Dengan bantuan perintah rsync, Anda dapat menyalin dan menyinkronkan data Anda secara jarak jauh dan lokal di seluruh direktori, disk, dan jaringan, melakukan pencadangan data, dan melakukan mirroring antara dua mesin Linux.

Artikel ini menjelaskan 16 penggunaan dasar dan lanjutan dari perintah rsync untuk mentransfer file Anda secara jarak jauh dan lokal di mesin berbasis Linux. Anda tidak perlu menjadi pengguna root untuk menjalankan perintah rsync.

Keuntungan dari Perintah Rsync

Ini menawarkan beberapa keuntungan, termasuk:

  • Transfer File Efisien – rsync menggunakan algoritme transfer delta, yang berarti rsync hanya mentransfer perbedaan antara file sumber dan tujuan, yang secara signifikan mengurangi jumlah data yang ditransfer, sehingga efisien untuk menyinkronkan file atau direktori besar.
  • Sinkronisasi File Jarak Jauh – rsync mendukung transfer file lokal dan jarak jauh melalui SSH, yang memungkinkan sinkronisasi antara sistem lokal dan jarak jauh atau mencerminkan direktori di beberapa mesin.
  • Pencadangan Tambahan – rsync sangat cocok untuk pencadangan tambahan, karena rsync membuat dan memperbarui cadangan secara efisien dengan hanya mentransfer file baru atau yang dimodifikasi.
  • Mempertahankan Izin File – rsync dapat mempertahankan berbagai atribut file, seperti izin, kepemilikan, stempel waktu, dan tautan simbolik, yang memastikan bahwa file yang disalin tetap mempertahankan karakteristik aslinya di tujuan.
  • Kontrol Bandwidth – rsync memungkinkan Anda membatasi penggunaan bandwidth selama transfer file, karena rsync menggunakan metode kompresi dan dekompresi saat mengirim dan menerima data di kedua ujungnya.
  • Lebih cepat – rsync bisa lebih cepat daripada scp (Secure Copy) untuk mentransfer file, terutama ketika menyinkronkan direktori besar atau ketika menangani file yang telah ditransfer sebagian atau ada di tujuan.

Sintaks Perintah Rsync

Perintah rsync mengikuti sintaks berikut:

rsync [OPTIONS] SOURCE DESTINATION

Berikut penjelasan berbagai komponen dan opsi yang digunakan dengan perintah rsync:

  • -v – Output verbose, menampilkan informasi detail tentang transfer.
  • -r – menyalin data secara rekursif (tetapi tidak mempertahankan stempel waktu dan izin saat mentransfer data.
  • -a – mode arsip, yang memungkinkan penyalinan file secara rekursif dan juga mempertahankan tautan simbolik, izin file, kepemilikan pengguna & grup, dan stempel waktu.
  • -z – Kompres file selama transfer untuk mengurangi penggunaan jaringan.
  • -h – angka keluaran yang dapat dibaca manusia dalam format yang dapat dibaca manusia.
  • -P – Menampilkan kemajuan selama transfer.
  • SOURCE – Menentukan file sumber atau direktori yang akan ditransfer, yang dapat berupa lokasi lokal atau jarak jauh.
  • DESTINATION – Menentukan jalur tujuan di mana file atau direktori akan disalin. Mirip dengan sumbernya, ini bisa berupa jalur lokal atau lokasi jauh.

Instal Rsync di Sistem Linux

Kami dapat menginstal paket rsync dengan bantuan manajer paket berikut sesuai distribusi Linux Anda.

sudo apt install rsync         [On Debian, Ubuntu and Mint]
sudo yum install rsync         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/rsync  [On Gentoo Linux]
sudo apk add rsync            [On Alpine Linux]
sudo pacman -S rsync           [On Arch Linux]
sudo zypper install rsync      [On OpenSUSE]    

1. Salin/Sinkronkan File Secara Lokal

Untuk menyalin atau menyinkronkan file secara lokal, Anda dapat menggunakan perintah berikut yang akan menyinkronkan satu file di mesin lokal dari satu lokasi ke lokasi lain.

Di sini, di contoh ini, nama file backup.tar perlu disalin atau disinkronkan ke folder /tmp/backups/.

[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/

created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00

Pada contoh di atas, Anda dapat melihat bahwa jika tujuan belum ada, rsync akan membuat direktori secara otomatis untuk tujuan tersebut.

2. Salin/Sinkronkan Direktori Secara Lokal

Perintah berikut akan mentransfer atau menyinkronkan semua file dari satu direktori ke direktori berbeda di mesin yang sama.

Di sini, di contoh ini, /root/rpmpkgs berisi beberapa file paket rpm dan Anda ingin direktori tersebut disalin ke dalam folder /tmp/backups/.

[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08

3. Salin Direktori dari Server Lokal ke Server Jarak Jauh

Untuk menyalin direktori dari server lokal ke server jauh, Anda dapat menggunakan perintah berikut, yang akan menyinkronkan direktori dari mesin lokal ke mesin jarak jauh.

Misalnya, jika ada folder di komputer lokal Anda “rpmpkgs ” yang berisi beberapa paket RPM dan jika Anda ingin konten direktori lokal tersebut dikirimkan ke server jauh, Anda dapat menggunakan perintah berikut.

rsync -avzh /root/rpmpkgs [email :/root/

The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00

4. Salin Direktori dari Remote ke Server Lokal

Perintah ini akan membantu Anda menyinkronkan direktori jarak jauh ke direktori lokal. Di sini, dalam contoh ini, direktori /root/rpmpkgs yang ada di server jauh sedang disalin ke komputer lokal Anda di /tmp/myrpms.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email 's password: 
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07

5. Sinkronisasi Melalui SSH

Dengan rsync, kami dapat menggunakan SSH (Secure Shell) untuk transfer data, menggunakan protokol SSH saat mentransfer data kami, Anda dapat yakin bahwa data Anda ditransfer dalam koneksi yang aman dengan enkripsi sehingga tidak ada yang bisa membaca data Anda saat sedang ditransfer melalui kabel di internet.

Juga ketika kita menggunakan rsync kita perlu memberikan kata sandi pengguna/root untuk menyelesaikan tugas tersebut, jadi gunakan SSH akan mengirimkan login Anda secara terenkripsi sehingga kata sandi Anda akan aman.

Untuk menggunakan rsync melalui SSH, Anda dapat menggunakan opsi -e untuk menentukan perintah shell jarak jauh, yang biasanya ssh seperti yang ditunjukkan.

rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. Salin File dari Server Jarak Jauh ke Server Lokal dengan SSH

Untuk menyinkronkan file dari server jauh ke server lokal, Anda dapat menentukan protokol dengan rsync menggunakan opsi “-e ” dengan nama protokol yang ingin Anda gunakan.

Di sini, di contoh ini, Kami akan menggunakan “ssh ” dengan opsi “-e ” dan melakukan transfer data.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email 's password: 
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67

7. Salin File dari Server Lokal ke Server Jarak Jauh dengan SSH

Untuk menyinkronkan file dari server lokal ke server jauh menggunakan SSH, Anda dapat memanfaatkan perintah berikut seperti yang ditunjukkan.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email 's password: 
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00

8. Tampilkan Kemajuan Saat Mentransfer Data dengan Rsync

Untuk menunjukkan kemajuan saat mentransfer data dari satu mesin ke mesin lain, kita dapat menggunakan opsi ‘--progress', yang menampilkan file dan waktu yang tersisa untuk menyelesaikan transfer.

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00

9. Sertakan File dengan Ekstensi Tertentu dengan Rsync

Untuk menyertakan file atau pola tertentu selama operasi rsync, Anda dapat menggunakan opsi --include dengan ekstensi yang cocok dengan semua file.

rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/

Dalam contoh yang diberikan, rsync hanya akan menyertakan file dengan ekstensi .txt dari direktori /path/to/source/ selama transfer.

10. Kecualikan File dengan Ekstensi Tertentu dengan Rsync

Demikian pula, untuk mengecualikan ekstensi tertentu selama operasi rsync, Anda dapat menggunakan opsi --exclude dengan pola wildcard.

rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

Dalam contoh yang diberikan, rsync akan mengecualikan file dengan ekstensi (*.ext) yang ditentukan selama transfer, sekaligus menyertakan semua file dan direktori lainnya.

11. Sertakan dan Kecualikan File dengan Rsync

Untuk menyertakan dan mengecualikan file atau pola tertentu selama operasi rsync, Anda dapat menggunakan opsi --include dan --exclude dengan pola wildcard yang sesuai.

Kedua opsi ini memungkinkan kami untuk menyertakan dan mengecualikan file dengan menentukan parameter. Opsi ini membantu kami menentukan file atau direktori yang ingin Anda sertakan dalam sinkronisasi dan mengecualikan file dan folder yang tidak ingin Anda transfer.

Dalam contoh ini, perintah rsync hanya akan menyertakan file dan direktori yang dimulai dengan 'R' dan mengecualikan semua file dan direktori lainnya.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Penggunaan Opsi –delete dengan Rsync

Jika file atau direktori tidak ada di sumbernya, namun sudah ada di tujuan, Anda mungkin ingin menghapus file/direktori yang ada di target saat menyinkronkan.

Kita dapat menggunakan opsi '--delete' untuk menghapus file yang tidak ada di direktori sumber.

Sumber dan target sinkron. Sekarang buat file baru test.txt pada target.

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/

[email 's password: 
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84

Target memiliki file baru bernama test.txt saat menyinkronkan dengan sumber dengan opsi '–delete', maka file test.txt dihapus .

13. Tetapkan Batas Transfer File dengan Rsync

Anda dapat menentukan ukuran file Maks yang akan ditransfer atau disinkronkan. Anda dapat melakukannya dengan opsi “--max-size ”. Dalam contoh ini, ukuran file Maks adalah 200k, jadi perintah ini hanya akan mentransfer file yang sama atau lebih kecil dari 200k.

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email 's password: 
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66

14. Secara Otomatis Menghapus File Sumber Setelah Transfer

Sekarang, misalkan Anda memiliki server web utama dan server cadangan data, Anda membuat cadangan harian dan menyinkronkannya dengan server cadangan Anda, namun sekarang Anda tidak ingin menyimpan salinan cadangan lokal tersebut di server web Anda.

Jadi, apakah Anda akan menunggu hingga transfer selesai dan kemudian menghapus file cadangan lokal tersebut secara manual? Tentu tidak. Penghapusan otomatis ini dapat dilakukan menggunakan opsi '--remove-source-files'.

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

[root@tecmint:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory

15. Lakukan Lari Kering dengan Rsync

Jika Anda seorang pemula yang menggunakan rsync dan tidak tahu persis apa yang akan dilakukan perintah Anda. Rsync benar-benar dapat mengacaukan hal-hal di folder tujuan Anda dan kemudian melakukan pembatalan dapat menjadi pekerjaan yang membosankan.

Penggunaan opsi ini tidak akan membuat perubahan apa pun pada file dan menampilkan keluaran perintah, jika keluaran menunjukkan persis sama seperti yang ingin Anda lakukan maka Anda dapat menghapus '--dry-run ' opsi dari perintah Anda dan jalankan di terminal.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)

16. Rsync Mengatur Batas Bandwidth dan Transfer File

Anda dapat mengatur batas bandwidth saat mentransfer data dari satu mesin ke mesin lain dengan bantuan opsi '--bwlimit'. Opsi ini membantu kami membatasi bandwidth I/O.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email 's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

Selain itu, secara default sinkronisasi rsync hanya mengubah blok dan byte, jika Anda secara eksplisit ingin menyinkronkan seluruh file maka Anda menggunakan opsi '-W' dengannya.

rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10
Kesimpulan

Sekianlah ringkasan kami tentang rsync dan kemampuannya. Untuk eksplorasi lebih lanjut mengenai pilihan dan fungsinya yang luas, saya mendorong Anda untuk merujuk pada halaman manual komprehensif (halaman manual) yang tersedia.