Yerel ve Uzak Dizinleri Senkronize Etmek için Rsync Nasıl Kullanılır

Yerel ve Uzak Dizinleri Senkronize Etmek için Rsync Nasıl Kullanılır

Tanıtım

Uzaktan eşitleme anlamına gelen Rsync, uzak ve yerel bir dosya eşitleme aracıdır. Dosyaların yalnızca değişen kısımlarını taşı■■■■■ kopyalanan veri miktarını en aza indirmek için bir algoritma kullanır.

Bu öğreticide, Rsync’i tanımlayacağız, rsync kullanırken sözdizimini gözden geçireceğiz, uzak bir sistemle senkronizasyon için Rsync’in nasıl kullanılacağını ve kullanabileceğiniz diğer seçenekleri açıklayacağız.

Rsync’i Tanımlama

Rsync, çok esnek bir ağ etkin senkronizasyon aracıdır. Linux ve Unix benzeri sistemlerde her yerde bulunması ve sistem komut dosyaları için bir araç olarak popülaritesi nedeniyle, varsayılan olarak çoğu Linux dağıtımında bulunur.

Rsync Sözdizimini Anlama

rsync sözdizimi, ssh, scp ve cp gibi diğer araçlara benzer şekilde çalışır.

İlk önce, aşağıdaki komutu çalıştırarak ana dizininize geçin:

cd ~

Ardından bir test dizini oluşturun:

mkdir dir1

Başka bir test dizini oluşturun:

mkdir dir2

Şimdi bazı test dosyaları ekleyin:

touch dir1/dosya{1..100}

Artık içinde 100 boş dosya bulunan dir1 adında bir dizin var. Dosyaları listeleyerek onaylayın:

ls dir1
Çıktı
dosya1 dosya18 dosya27 dosya36 dosya45 dosya54 dosya63 dosya72 dosya81 dosya90
dosya10 dosya19 dosya28 dosya37 dosya46 dosya55 dosya64 dosya73 dosya82 dosya91
dosya100 dosya2 dosya29 dosya38 dosya47 dosya56 dosya65 dosya74 dosya83 dosya92
dosya11 dosya20 dosya3 dosya39 dosya48 dosya57 dosya66 dosya75 dosya84 dosya93
dosya12 dosya21 dosya30 dosya4 dosya49 dosya58 dosya67 dosya76 dosya85 dosya94
dosya13 dosya22 dosya31 dosya40 dosya5 dosya59 dosya68 dosya77 dosya86 dosya95
dosya14 dosya23 dosya32 dosya41 dosya50 dosya6 dosya69 dosya78 dosya87 dosya96
dosya15 dosya24 dosya33 dosya42 dosya51 dosya60 dosya7 dosya79 dosya88 dosya97
dosya16 dosya25 dosya34 dosya43 dosya52 dosya61 dosya70 dosya8 dosya89 dosya98
dosya17 dosya26 dosya35 dosya44 dosya53 dosya62 dosya71 dosya80 dosya9 dosya99

Ayrıca dir2 adında boş bir dizininiz var. Aynı sistemde dir1’in içeriğini dir2’ye senkronize etmek için, rsync’i çalıştıracak ve “özyinelemeli” anlamına gelen ve dizin senkronizasyonu için gerekli olan -r bayrağını kullanacaksınız:

rsync -r dizin1/ dizin2

Diğer bir seçenek de, bir kombinasyon bayrağı olan ve “arşiv” anlamına gelen -a bayrağını kullanmaktır. Bu bayrak özyinelemeli olarak eşitlenir ve sembolik bağları, özel ve aygıt dosyalarını, değişiklik zamanlarını, grupları, sahipleri ve izinleri korur. -r’den daha yaygın olarak kullanılır ve kullanılması önerilen bayraktır. Önceki örnekle aynı komutu çalıştırın, bu sefer -a bayrağını kullanarak:

rsync -a dir1/ dir2

Lütfen önceki iki komutun sözdiziminde ilk argümanın sonunda bir bölü (/) olduğuna ve burada vurgulandığına dikkat edin:

rsync -a dir1/ dir2

Bu sondaki eğik çizgi, dir1’in içeriğini belirtir. Sondaki eğik çizgi olmadan dir1, dizin de dahil olmak üzere dir2’nin içine yerleştirilir. Sonuç, aşağıdaki gibi bir hiyerarşi yaratacaktır:

~/dir2/dir1/[dosyalar]

Başka bir ipucu, bir rsync komutunu çalıştırmadan önce argümanlarınızı iki kez kontrol etmektir. Rsync, -n veya --dry-run seçeneklerini ileterek bunu yapmak için bir yöntem sağlar. “Ayrıntılı” anlamına gelen -v bayrağı da uygun çıktıyı almak için gereklidir. a, n ve v işaretlerini aşağıdaki komutta birleştireceksiniz:

rsync -anv dizin1/ dizin2
Çıktı
artımlı dosya listesi gönderme
./
dosya1
dosya10
dosya100
dosya11
dosya12
dosya13
dosya14
dosya15
dosya16
dosya17
dosya18
. . .

Şimdi, aşağıdaki gibi, sondaki eğik çizgiyi kaldırırken aldığınız çıktıyla bu çıktıyı karşılaştırın:

rsync -anv dizin1 dizin2
Çıktı
artımlı dosya listesi gönderme
dir1/
dizin1/dosya1
dizin1/dosya10
dir1/dosya100
dizin1/dosya11
dizin1/dosya12
dizin1/dosya13
dizin1/dosya14
dizin1/dosya15
dizin1/dosya16
dizin1/dosya17
dizin1/dosya18
. . .

Bu çıktı, artık yalnızca dizin içindeki dosyalar yerine dizinin kendisinin aktarıldığını gösteriyor.

Uzak Sistemle Senkronize Etmek için Rsync’i Kullanma

Uzak bir sistemle senkronizasyon yapmak üzere rsync’i kullanmak için, yalnızca yerel ve uzak makineleriniz arasında yapılandırılmış SSH erişiminin yanı sıra her iki sistemde de kurulu rsync’e ihtiyacınız vardır. İki makine arasında SSH erişimi doğrulandıktan sonra, aşağıdaki sözdizimini kullanarak bir önceki bölümdeki dir1 klasörünü uzak bir makineyle eşitleyebilirsiniz. Lütfen bu durumda asıl dizini aktarmak istediğinizi unutmayın, böylece sondaki eğik çizgiyi atlarsınız:

rsync -a ~/dir1 kullanıcıadı@remote_host:destination_directory

Bu işleme, bir dizini yerel sistemden uzak bir sisteme “ittiği” için itme işlemi denir. Bunun tersi işlem çekmedir ve uzak bir dizini yerel sistemle eşitlemek için kullanılır. dir1 dizini yerel sisteminiz yerine uzak sistemde olsaydı, sözdizimi aşağıdaki gibi olurdu:

rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

cp ve benzeri araçlar gibi, kaynak her zaman ilk argümandır ve hedef her zaman ikincidir.

Diğer Rsync Seçeneklerini Kullanma

Rsync, önceki bölümde öğrendiğiniz bayrak seçenekleri gibi yardımcı programın varsayılan davranışını değiştirmek için birçok seçenek sunar.

Metin dosyaları gibi önceden sıkıştırılmamış dosyaları aktarıyorsanız, -z seçeneğiyle sıkıştırma ekleyerek ağ aktarımını azaltabilirsiniz:

rsync -az kaynak hedefi

-P bayrağı da yararlıdır. --progress ve --partial işaretlerini birleştirir. Bu ilk bayrak, aktarımlar için bir ilerleme çubuğu sağlar ve ikinci bayrak, kesintiye uğrayan aktarımlara devam etmenizi sağlar:

rsync -azP kaynak hedefi
Çıktı
artımlı dosya listesi gönderme
oluşturulan dizin hedefi
kaynak/
kaynak/dosya1
              0 100% 0,00kB/sn 0:00:00 (xfr#1, to-chk=99/101)
kaynak dosya10
              0 100% 0,00kB/sn 0:00:00 (xfr#2, to-chk=98/101)
kaynak/dosya100
              0 100% 0,00kB/sn 0:00:00 (xfr#3, to-chk=97/101)
kaynak/dosya11
              0 100% 0,00kB/sn 0:00:00 (xfr#4, to-chk=96/101)
kaynak/dosya12
              0 100% 0,00kB/sn 0:00:00 (xfr#5, to-chk=95/101)
. . .

Komutu yeniden çalıştırırsanız, hiçbir değişiklik yapılmadığından kısaltılmış bir çıktı alırsınız. Bu, Rsync’in değişiklik yapılıp yapılmadığını belirlemek için değişiklik sürelerini kullanma yeteneğini gösterir:

rsync -azP kaynak hedefi
Çıktı
artımlı dosya listesi gönderme
gönderildi 818 bayt alındı ​​12 bayt 1660,00 bayt/sn
toplam boyut 0 hızlanma 0,00

Bazı dosyalardaki değişiklik zamanını aşağıdaki gibi bir komutla güncelleyeceğinizi varsayalım:

touch dir1/dosya{1..10}

Ardından, rsync’i -azP ile yeniden çalıştırırsanız, çıktıda Rsync’in yalnızca değiştirilen dosyaları akıllıca nasıl yeniden kopyaladığını fark edeceksiniz:

rsync -azP kaynak hedefi
Çıktı
artımlı dosya listesi gönderme
dosya1
            0 100% 0,00kB/sn 0:00:00 (xfer#1, kontrol etmek için=99/101)
dosya10
            0 100% 0.00kB/s 0:00:00 (xfer#2, kontrol etmek için=98/101)
dosya2
            0 100% 0,00kB/sn 0:00:00 (xfer#3, kontrol edilecek=87/101)
dosya3
            0 100% 0,00kB/sn 0:00:00 (xfer#4, kontrol etmek için=76/101)
. . .

İki dizini gerçekten senkronize tutmak için, kaynaktan kaldırılmışlarsa dosyaları hedef dizinden silmek gerekir. Varsayılan olarak, rsync hedef dizinden hiçbir şeyi silmez.

Bu davranışı --delete seçeneğiyle değiştirebilirsiniz. Bu seçeneği kullanmadan önce, istenmeyen veri kaybını önlemek için bir test gerçekleştirmek için --dry-run seçeneği olan -n’yi kullanabilirsiniz:

rsync -an --delete kaynak hedef

Senkronize ettiğiniz bir dizinde bulunan belirli dosyaları veya dizinleri hariç tutmayı tercih ederseniz, --exclude= seçeneğinin ardından bunları virgülle ayrılmış bir listede belirterek bunu yapabilirsiniz:

rsync -a --exclude=pattern_to_exclude kaynak hedef

Dışlanacak belirli bir kalıbınız varsa, --include= seçeneğini kullanarak farklı bir kalıpla eşleşen dosyalar için bu dışlamayı geçersiz kılabilirsiniz:

rsync -a --exclude=pattern_to_exclude --include=pattern_to_include kaynak hedef

Son olarak, önemli dosyaların yedeklerini depolamak için Rsync’in --backup seçeneği kullanılabilir. Yedekleme dosyalarının depolanacağı dizini belirten --backup-dir seçeneğiyle birlikte kullanılır:

rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source hedef