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.