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 bir kaç örnekten bahsedeceğim.

“rsync” Komutu ve Kullanımı

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]

Bir kaç ö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. Not: 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ğinelim.

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 alabiliriz.

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ım.

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ır. 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ır.

rsync ile ilgili daha detaylı bilgi ve opsiyonlar için man rsync komutunu kullanabilirsiniz.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir