Linux'ta Rsync Komutunun 16 Pratik Örneği


Rsync (Uzaktan Senkronizasyon), Linux/Unix sistemlerinde dosyaları ve dizinleri hem uzaktan hem de yerel olarak kopyalamak ve senkronize etmek için en yaygın kullanılan komuttur.

rsync komutunun yardımıyla verilerinizi dizinler, diskler ve ağlar arasında uzaktan ve yerel olarak kopyalayabilir ve senkronize edebilir, veri yedeklemeleri gerçekleştirebilir ve iki Linux makinesi arasında yansıtma yapabilirsiniz.

Bu makalede, dosyalarınızı Linux tabanlı makinelere uzaktan ve yerel olarak aktarmak için rsync komutunun 16 temel ve gelişmiş kullanımı açıklanmaktadır. rsync komutunu çalıştırmak için kök kullanıcı olmanıza gerek yoktur.

Rsync Komutunun Avantajları

Aşağıdakiler de dahil olmak üzere çeşitli avantajlar sunar:

  • Verimli Dosya Aktarımı – rsync bir delta aktarım algoritması kullanır; bu, yalnızca kaynak ve hedef dosyalar arasındaki farkları aktardığı anlamına gelir; bu da aktarılan veri miktarını önemli ölçüde azaltarak büyük dosyaların veya dizinlerin senkronizasyonunu verimli hale getirir.
  • Uzaktan Dosya Senkronizasyonu – rsync, SSH üzerinden hem yerel hem de uzak dosya aktarımlarını destekler; bu, yerel ve uzak sistemler arasında senkronizasyona veya birden fazla makinede dizinlerin yansıtılmasına olanak tanır.
  • Artımlı Yedeklemeler – rsync, yalnızca yeni veya değiştirilmiş dosyaları aktararak yedeklemeleri verimli bir şekilde oluşturup güncellediğinden, artımlı yedeklemeler için çok uygundur.
  • Dosya İzinlerini Korur – rsync, kopyalanan dosyaların hedefte orijinal özelliklerini korumasını sağlayan izinler, sahiplik, zaman damgaları ve sembolik bağlantılar gibi çeşitli dosya özelliklerini koruyabilir.
  • Bant Genişliği Kontrolü – rsync, her iki uçta da veri gönderip alırken sıkıştırma ve sıkıştırmayı açma yöntemini kullandığından, dosya aktarımları sırasında bant genişliği kullanımını sınırlamanıza olanak tanır.
  • Daha hızlı – rsync, özellikle büyük dizinleri senkronize ederken veya kısmen aktarılmış veya hedefte mevcut olan dosyalarla uğraşırken, dosyaların aktarımı için scp'den (Güvenli Kopyalama) daha hızlı olabilir.

Rsync Komut Söz Dizimi

rsync komutu aşağıdaki sözdizimini izler:

rsync [OPTIONS] SOURCE DESTINATION

Burada rsync komutlarıyla kullanılan farklı bileşenlerin ve seçeneklerin bir açıklaması bulunmaktadır:

  • -v – Aktarım hakkında ayrıntılı bilgi görüntüleyen ayrıntılı çıktı.
  • -r – verileri yinelemeli olarak kopyalar (ancak veri aktarılırken zaman damgalarını ve izinleri korumaz.
  • -a – dosyaların yinelemeli olarak kopyalanmasına olanak tanıyan ve aynı zamanda sembolik bağlantıları, dosya izinlerini, kullanıcı ve grup sahipliklerini ve zaman damgalarını koruyan arşiv modu.
  • -z – Ağ kullanımını azaltmak için aktarım sırasında dosyaları sıkıştırın.
  • -h – insan tarafından okunabilen, sayıları insan tarafından okunabilen bir biçimde çıktılar.
  • -P – Aktarım sırasındaki ilerlemeyi gösterir.
  • SOURCE – Aktarılacak kaynak dosya(lar)ı veya dizini belirtir; bunlar yerel veya uzak konum olabilir.
  • DESTINATION – Dosyaların veya dizinlerin kopyalanacağı hedef yolu belirtir. Kaynağa benzer şekilde yerel bir yol veya uzak bir konum olabilir.

Rsync'i Linux Sistemine Kurun

Linux dağıtımınıza göre rsync paketini aşağıdaki paket yöneticisi yardımıyla kurabiliriz.

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. Dosyayı Yerel Olarak Kopyala/Senkronize Et

Bir dosyayı yerel olarak kopyalamak veya senkronize etmek için, yerel makinedeki tek bir dosyayı bir konumdan başka bir konuma senkronize edecek aşağıdaki komutu kullanabilirsiniz.

Bu örnekte, backup.tar dosya adının /tmp/backups/ klasörüne kopyalanması veya senkronize edilmesi gerekiyor.

[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

Yukarıdaki örnekte, hedef halihazırda mevcut değilse rsync'in hedef için otomatik olarak bir dizin oluşturacağını görebilirsiniz.

2. Dizini Yerel Olarak Kopyala/Senkronize Et

Aşağıdaki komut, tüm dosyaları bir dizinden aynı makinedeki farklı bir dizine aktaracak veya senkronize edecektir.

Bu örnekte, /root/rpmpkgs bazı rpm paket dosyalarını içeriyor ve bu dizinin /tmp/backups/ klasörüne kopyalanmasını istiyorsunuz.

[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. Bir Dizini Yerelden Uzak Sunucuya Kopyalayın

Bir dizini yerel sunucudan uzak sunucuya kopyalamak için, dizini yerelden uzak makineye senkronize edecek aşağıdaki komutu kullanabilirsiniz.

Örneğin, yerel bilgisayarınızda bazı RPM paketlerini içeren bir “rpmpkgs” klasörü varsa ve bu yerel dizinin içeriğinin gönderilmesini istiyorsanız uzak bir sunucuya aşağıdaki komutu kullanabilirsiniz.

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. Bir Dizini Uzak Sunucudan Yerel Sunucuya Kopyalayın

Bu komut uzak bir dizini yerel bir dizine eşitlemenize yardımcı olacaktır. Bu örnekte, uzak sunucudaki /root/rpmpkgs dizini yerel bilgisayarınıza /tmp/myrpms dizinine kopyalanıyor.

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. SSH Üzerinden Rsync

rsync ile veri aktarımı için SSH (Secure Shell) kullanabiliriz, verilerimizi aktarırken SSH protokolünü kullanarak verilerinizin güvenli bir bağlantıda aktarılmasını sağlayabilirsiniz. Şifrelemeli, böylece verileriniz internette kablolu olarak aktarılırken hiç kimse okuyamaz.

Ayrıca rsync'i kullandığımızda, söz konusu görevi gerçekleştirmek için kullanıcı/kök şifresini sağlamamız gerekir; bu nedenle SSH'yi kullanın. Strong> seçeneği, şifrenizin güvende olması için giriş bilgilerinizi şifreli bir şekilde gönderecektir.

SSH üzerinden rsync'i kullanmak için, gösterildiği gibi genellikle ssh olan uzak kabuk komutunu belirtmek üzere -e seçeneğini kullanabilirsiniz.

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

6. Uzak Sunucudaki Dosyayı SSH ile Yerel Sunucuya Kopyalayın

Uzak sunucudaki bir dosyayı yerel sunucuya senkronize etmek için, kullanmak istediğiniz protokol adıyla birlikte “-e” seçeneğini kullanarak rsync ile bir protokol belirleyebilirsiniz.

Bu örnekte “ssh” seçeneğini “-e” seçeneği ile kullanıp veri aktarımını gerçekleştireceğiz.

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. Yerel Sunucudaki Dosyayı SSH ile Uzak Sunucuya Kopyalayın

Bir dosyayı yerel sunucudan uzak sunucuya SSH kullanarak senkronize etmek için aşağıdaki komutu gösterildiği gibi kullanabilirsiniz.

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. Rsync ile Veri Aktarırken İlerlemeyi Göster

Verileri bir makineden farklı bir makineye aktarırken ilerlemeyi göstermek için dosyaları ve aktarımın tamamlanması için kalan süreyi görüntüleyen ‘--progress’ seçeneğini kullanabiliriz.

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. Rsync ile Özel Uzantıya Sahip Dosyaları Dahil Edin

Bir rsync işlemi sırasında belirli dosyaları veya kalıpları dahil etmek için --include seçeneğini tüm dosyalarla eşleşen bir uzantıyla birlikte kullanabilirsiniz.

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

Verilen örnekte rsync, aktarım sırasında yalnızca /path/to/source/ dizinindeki .txt uzantısına sahip dosyaları içerecektir.

10. Rsync ile Belirli Uzantıya Sahip Dosyaları Hariç Tut

Benzer şekilde, bir rsync işlemi sırasında belirli bir uzantıyı hariç tutmak için --exclude seçeneğini joker karakter deseniyle kullanabilirsiniz.

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

Verilen örnekte rsync, aktarım sırasında belirtilen (*.ext) uzantısına sahip dosyaları hariç tutacak, diğer tüm dosya ve dizinleri dahil edecektir.

11. Rsync ile Dosyaları Dahil Et ve Hariç Tut

Bir rsync işlemi sırasında belirli dosyaları veya kalıpları dahil etmek veya hariç tutmak için, uygun joker karakter kalıplarıyla hem --include hem de --exclude seçeneklerini kullanabilirsiniz.

Bu iki seçenek, parametreleri belirterek dosyaları dahil etmemizi ve hariç tutmamızı sağlar; bu seçenek, senkronizasyonunuza dahil etmek ve dosya ve klasörleri hariç tutmak istediğiniz dosyaları veya dizinleri belirtmemize yardımcı olur transfer edilmek istemediğiniz

Bu örnekte, rsync komutu yalnızca 'R' ile başlayan dosya ve dizinleri içerecek ve diğer tüm dosya ve dizinleri hariç tutacaktır.

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

12. Rsync ile –delete Seçeneğinin Kullanımı

Bir dosya veya dizin kaynakta mevcut değilse ancak hedefte zaten mevcutsa, senkronizasyon sırasında hedefteki mevcut dosyayı/dizini silmek isteyebilirsiniz.

Kaynak dizinde bulunmayan dosyaları silmek için ‘--delete‘ seçeneğini kullanabiliriz.

Kaynak ve hedef senkronizedir. Şimdi hedefte yeni bir test.txt dosyası oluşturun.

[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, '–delete' seçeneğiyle kaynakla senkronizasyon yaparken test.txt adlı yeni dosyaya sahip, test.txt dosyasını kaldırdı. .

13. Rsync ile Dosya Aktarım Sınırını Ayarlayın

Aktarılacak veya senkronize edilecek Maksimum dosya boyutunu belirtebilirsiniz. “--max-size” seçeneğiyle yapabilirsiniz. Bu örnekte Maksimum dosya boyutu 200k'dir, dolayısıyla bu komut yalnızca 200k'ye eşit veya daha küçük olan dosyaları aktaracaktır.

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. Aktarımdan Sonra Kaynak Dosyaları Otomatik Olarak Sil

Şimdi, ana web sunucunuz ve bir veri yedekleme sunucunuz olduğunu, günlük bir yedekleme oluşturduğunuzu ve bunu yedekleme sunucunuzla senkronize ettiğinizi, ancak artık yedeğin o yerel kopyasını web sunucunuzda tutmak istemediğinizi varsayalım.

Peki aktarımın tamamlanmasını bekleyip ardından yerel yedekleme dosyasını manuel olarak silecek misiniz? Tabii ki hayır. Bu otomatik silme işlemi '--remove-source-files' seçeneği kullanılarak yapılabilir.

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. Rsync ile Prova Yapın

Rsync kullanmaya yeni başlıyorsanız ve komutunuzun tam olarak ne yapacağını bilmiyorsanız. Rsync, hedef klasörünüzdeki şeyleri gerçekten bozabilir ve ardından geri alma işlemi sıkıcı bir iş olabilir.

Bu seçeneğin kullanılması dosyalarda herhangi bir değişiklik yapmaz ve komutun çıktısını gösterir, eğer çıktı tam olarak yapmak istediğiniz gibi görünüyorsa '--dry-run'ı kaldırabilirsiniz. ' seçeneğini komutunuzdan seçin ve terminalde çalıştırın.

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 Bant Genişliği Sınırını Ayarlayın ve Dosya Aktarın

--bwlimit’ seçeneği yardımıyla bir makineden başka bir makineye veri aktarırken bant genişliği sınırını ayarlayabilirsiniz. Bu seçenek G/Ç bant genişliğini sınırlamamıza yardımcı olur.

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

Ayrıca, rsync varsayılan olarak yalnızca değişen blokları ve baytları senkronize eder; eğer açıkça tüm dosyayı senkronize etmek istiyorsanız o zaman '-W' seçeneğini kullanırsınız.

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
Çözüm

Bu, rsync ve yeteneklerine ilişkin genel bakışımızı tamamlıyor. Kapsamlı seçenekleri ve işlevlerini daha ayrıntılı olarak incelemek için, mevcut kapsamlı kılavuz sayfalarına (man sayfaları) başvurmanızı tavsiye ederim.