rsync Komutu ve Kullanımı
SCP başlığı altında, açıklamalar ve örnekler içerisinde değindiğim dosya ve klasör kopyalama işlemleriyle ilgili olarak bu yazıda rsync
komutundan, cp
ve scp
farklılıklarından ve birkaç örnekten bahsedeceğim.
rsync Komutu
rsync
, uzak ya da lokal olarak dosya transferi işlemlerini gerçekleştiren ve bu işlemlerde kullandığı algoritma sayesinde daha hızlı sonuç sağlayan bir senkronizasyon aracı olarak ifade edilebilir. Genel işlem olarak dosyaların tekrar yazılmasındansa değişikliklerin uygulanması üzerine işlemleri gerçekleştirmektedir. Özelleştirmelerle birlikte oldukça esnek bir kullanım olanağı sunan rsync, network-enabled senkronizasyon aracı olarak belirtilebilir. En temel kullanımı şu şekildedir:
rsync [kaynak-dosya-ya-da-klasor] [hedef-dosya-ya-da-klasor]
Birden fazla dosyayı hedef bir dizine iletmek için ise dosyalar sırasıyla hedef öncesinde belirtilir.
rsync -R [kaynak-dosya-1] [kaynak-dosya-2] [hedef-klasor]
birkaç örnek ile senkronizasyon işlemlerine başlayalım. İçeriğinde bir çok metin dökümanı (touch ./file{1..50}.txt
ile yaratabilirsiniz) olan /yazilar
klasörümüze ait içeriği bir üst dizindeki /icerikler
klasörüne taşıyalım.
Eğer kaynak klasör daha önceden oluşturulmuş bir klasör değilse belirtilen hedefte oluşturulacaktır.
rsync -arv /yazilar/ ../icerikler
-r
opsiyonu ile tekrarlamları şekilde klasör senkronizasyonu işleme alıyoruz. -v
ile de işlem sonucunda yapılan işlemlere dair açıklama talep ediyoruz. -a
ise sembolik linkler, özel sürücü dosyaları, modifikasyon zamanı, izinler gibi yapılandırmaların da aktarılmasını sağlamaktadır. Yukarıdaki örnekte kaynak klasör olarak belirttiğimiz /yazilar’in sonunda bir slash (/) dikkatinizi çekmiş olabilir. Eğer bir klasörün içeriğinin aktarılmasını isterseniz sonuna slash koymanız gerekiyor. Aksi durumda kaynak olarak belirttiğiniz klasör olduğu gibi hedef klasör içerisine alt klasör olarak eklenecektir. Lokalde gerçekleştirdiğimiz örneklerin biraz daha ötesine çıkalım ve uzak sunucu bilgisayar, bilgisayar uzak sunucu ve uzak sunucular arasında senkronizasyon işlemleri gerçekleştirelim. scp
konusunda değindiğim yedekleme işleminin bir benzerini de rsync
ile gerçekleştirelim ve örnek olarak uzak sunucuda bulunan WordPress kurulumumuzu bilgisayarımıza indirelim.
rsync -ahiv [kullanici-adi]@[sunucu-domain-veya-ip-adresi]:[kaynak-dizin]/ [lokal-hedef-dizin]
Uzak sunucundan lokal sisteme dosya çekme işlemi pull olarak ifade edilmektedir. Push olarak ifade edilen ve lokal sistemden uzak sunucuya dosya transferi sağlamak için kullanacağımız kod ise kaynak ve hedef değişmiş şekilde:
rsync -ahiv [lokal-kaynak-dizin]/ [kullanici-adi]@[sunucu-domain-veya-ip-adresi]:[hedef-dizin]
Kısaca bir de rsync
‘in sunduğu özelliklere değinelim1. Eğer transfer edilecek metin dökümanları gibi dosyalar sıkıştırılmamışsa işlem aşamasında -z
opsiyonu ile bağlantımızı yapılandırabiliriz.
rsync -ahivzP [kaynak-dizin]/ [lokal-hedef-dizin]
-P
(-progress
ve -partial
kombinasyonu) ile transfer süreci konusunda bilgi alabiliriz2.
Transfer İşlemleri
Transfer aşamasında bir klasörün tüm içeriğini aktarmak yerine hariç tutmak ya da farklı dosyaları aktarıma dahil etmek isteyebilirsiniz. Bu aşamada kullanacağımız -exclude
ve -include
ile ilgili örneklere bakalım3. Temel kullanımları şu şekilde:
rsync -a --exclude=[pattern] [hedef-dizin]/ [hedef-dizin]
rsync -a --exclude=[pattern] --include=[pattern] [hedef-dizin]/ [hedef-dizin]
Örnek olarak *.php
dosyaları hariç tutulacak şekilde push işlemi gerçekleştirelim.
rsync -ahivzP --exclude='*.php' [lokal-kaynak-dizin]/ [kullanici-adi]@[sunucu-domain-veya-ip-adresi]:[hedef-dizin]
Hatta emin olmak adına grep ile akış içerisindeki php ifadelerinin de işaretlenmesini belirtelim.
rsync -ahivzP --exclude='*.php' [lokal-kaynak-dizin]/ [kullanici-adi]@[sunucu-domain-veya-ip-adresi]:[hedef-dizin] | grep 'php'
-u
ile kaynak dosya hedef dosyadan daha güncelse ya da dosya silinmişse (ya da -ignore-existing
tanımlanmışsa) senkronizasyon işlemi gerçekleştirecektir.
rsync --ignore-existing [kaynak-dizin]/* [hedef-dizin]/
Yukarıdaki komut uygulandığında, hedef klasör içerisinde var olan yollar için skipping directory [var-olan-yol]
hatası görüntülenir.
Uzak Sunucular Arasında rsync Kullanımı
Asıl önemli konu sanırım rsync
ile uzak sunucular arasında SSH üzerinden işlemler gerçekleştirmek olacaktır4. Bu transfer işleminde ssh
parametresini belirtmeniz yeterli olacaktır.
rsync -aruve ssh [kaynak-dosya-ya-da-dizin] [kullanici-adi]@[sunucu-domain-veya-ip-adresi]:[hedef-dizin]
Özetle yüksek boyutlu dosyalar ve stabil olmayan bağlantılarda bilgisayarlar, uzak sunucular, bilgisayar ve sunucular arasında güvenli bir şekilde dosya işlemleri gerçekleştirmek isterseniz rsync
daha uygun bir kullanım sunacaktır5 6 7 8. rsync
ile ilgili daha detaylı bilgi ve opsiyonlar için man rsync
komutunu kullanabilirsiniz.
- Rsync show progress for individual file. ServerFault ↩
- Vivek Gite. (2018). Rsync Show Progress Bar While Copying Files. nixCraft ↩
- Ramesh Natarajan. (2011). 6 rsync Examples to Exclude Multiple Files and Directories using exclude-from ↩
-
How does
scp
differ fromrsync
? StackOverflow ↩ - Is there ever a reason to use scp instead of rsync? StackExchange ↩
- Why is rsync -avz faster than scp -r? SuperUser ↩
- Which is faster: rsync or scp? Quora ↩
- Is there ever a reason to use scp instead of rsync? StackExchange ↩