rsync(1) | rsync(1) |
rsync - rcp yerine daha hızlı ve esnek bir araç
rsync [seçenek]... kaynak [kaynak]... [kullanıcı@]konak:hedef rsync [seçenek]... [kullanıcı@]konak:kaynak hedef rsync [seçenek]... kaynak [kaynak]... hedef rsync [seçenek]... [kullanıcı@]konak::kaynak [hedef] rsync [seçenek]... kaynak [kaynak]... [kullanıcı@]konak::hedef rsync [seçenek]... rsync://[kullanıcı@]konak[:port]/kaynak [hedef]
rsync çoğunlukla rcp gibi davranan bir uygulamadır, ancak daha fazla seçenek içerir ve özellikle hedefteki dosyanın mevcut olması halinde dosya aktarımını çok daha hızlı gerçekleştiren rsync uzak güncelleme protokolünü kullanır.
rsync uzak güncelleme protokolü rsync'in ağ bağlantısı üzerinden sadece iki dosya grubu arasındaki farkları aktarmasını mümkün kılar. Bunu bu pakete eşlik eden teknik raporda açıklanan verimli bir toplama sağlaması arama algoritmasını kullanarak yapar.
rsync'e özgü bazı ek özellikler:
rsync sekiz farklı yöntemle kullanılabilir:
Tüm durumlarda (burada listelenenler dışında kalanlar dahil) kaynak ve hedef belirtimlerinden biri daima yerel olmalıdır (yani rsync ile iki uzak makine arasında işlem yapamazsınız).
Kurulum işlemleri için README dosyasına bakınız.
Kurduktan sonra, bir uzak kabuk üzerinden eriştiğiniz (veya rsync artalan kipi protokolü kullanarak eriştiğiniz) her makinede rsync kullanabilirsiniz. Uzak dosya aktarımları için, günümüzde rsync iletişimde ssh kullanmasına rağmen öntanımlı olarak kullanacağı uzak kabuk rsh veya remsh gibi bir kabuk olarak da ayarlanabilir.
Bundan başka -e komut satırı seçeneğinin argümanı olarak veya RSYNC_RSH ortam değişkenine atayarak da istediğiniz bir uzak kabuk uygulamasını belirtebilirsiniz.
Yüksek derecede güvenlik istendiğinde ortak kanaat ssh kullanmaktır.
Yalnız, rsync'in hem yerel hem de uzak makine üzerinde kurulu olması gerektiğini unutmayın.
rsync'i rcp'yi nasıl kullanıyorsanız öyle kullanabilirsiniz. Biri uzak makine olmak üzere bir kaynak ve bir hedef belirtmelisiniz.
Şüphesiz sözdizimini açıklamanın en kolay yolu bir örnek vermektir:
rsync -t *.c foo:src/
Bu komut çalışma dizinindeki *.c kalıbı ile eşleşen tüm dosyaları foo makinesinin src dizinine kopyalayacaktır. Bu dosyalardan uzak makinede mevcut olanları için rsync uzak güncelleme protokolü kullanılarak sadece farklar gönderilir. Bu konuda daha ayrıntılı bilgi için teknik rapora bakınız.
rsync -avz foo:src/bar /data/tmp
Bu komut, foo makinesindeki src/bar dizinindeki tüm dosyaları varsa altdizinlerdekileri de içererek yerel makinenin /data/tmp dizinine kopyalar. Dosyaların, sembolik bağların, aygıtların, özniteliklerinin, izinlerinin, sahiplerinin, v.s.sinin korunmasını sağlayan "arşiv" kipinde aktarım yapılır. Buna ek olarak, aktarım işleminin verileri içeren kısımlarının boyutunu küçültmek için sıkıştırma uygulanır.
rsync -avz foo:src/bar/ /data/tmp
Kaynak yolunun sonuna eklenen / işareti hedefte ek bir dizin oluşturmaktan kaçınılması davranışını değiştirir. Sona eklenen bu / işaretinin "dizini ismiyle kopyala" davranışının zıddı olarak "bu dizinin içeriğini kopyala" anlamına geldiğini düşünebilirsiniz, fakat her iki durumda da dizinin öznitelikleri hedefteki dizine kopyalanacaktır. Başka bir deyişle, aşağıdaki komutların her biri ile dosyalar aynı şekilde, /dest/foo dizininin öznitelikleri ayarlanarak kopyalanır:
rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
Ayrıca, rsync'i sadece yerel kipte de kullanabilirsiniz. Bu durumda hedef ve kaynak dosya yollarının ikisi de isimlerinde ':' içermeyecektir. Kopyalama işlemi güçlendirilmiş bir kopyalama komutu verilmiş gibi yürüyecektir.
rsync somehost.mydomain.com::
Bu komut, somehost.mydomain.com makinesindeki kullanılabilecek tüm anonim rsync modüllerini listeleyecektir. (Daha fazla bilgi için aşağıdaki bölümlere bakınız.)
Bir uzak makineden çok sayıda dosya için istek yaparken aralarında boşluk bırakılmış kaynak dosya yollarını tırnak içine alarak belirtebilirsiniz. Bazı örnekler:
rsync makine::'modülismi/dizin1/dosya1 modülismi/dizin2/dosya2' /hedef
Bu komut, bir rsync sunucusundan /hedef dizinine dosya1 ve dosya2 dosyalarını kopyalayacaktır. Her argüman aynı "modülismi/" önekini içermeli ve arada sadece bir boşluk karakteri bulunmalıdır. Diğer tüm boşlukların dosya isimlerine ekleneceği varsayılır.
rsync -av makine:'dizin1/dosya1 dizin2/dosya2' /hedef
Bu komut dosya1 ve dosya2 dosyalarını /hedef dizinine kopyalayacaktır. Sözcük ayırma işlemi uzak kabuk tarafından yapılır, yani eğer sözcük ayırma gerçekleşmemişse, bunun sebebi uzak kabuğun bu işlem için yapılandırılmamış olmasıdır (nedendir bilinmez, çok yaygındır). İsmi boşluk içeren bir dosyayı kopyalamak isterseniz, ya bunu uzak kabuğun anlayabileceği bir yöntemle yapmalı ya da boşlukların yerine dosya ismi kalıpları kullanmalısınız. İki örnek:
rsync -av makine:'isminde\ boşluk\ olan\ dosya' /hedef rsync -av makine:isminde?boşluk?olan?dosya /hedef
İkinci örnekte, eşleşmeyen kalıpları kabuğunuzun anlayacağı varsayılmıştır. Bu takdirde bunları tersbölü öncelemeli hale getirecektir.
Dosya aktarımı için rsync'i bir uzak kabuk olmaksızın da kullanmak mümkündür. Bu durumda, TCP 873. port üzerinde çalışan bir uzak rsync sunucusuna bağlanacaksınız.
RSYNC_PROXY ortam değişkenine bir makine:port çifti belirterek bir vekil sunucu üzerinden de bağlantı sağlayabilirsiniz. Burada, vekil sunucunuzun yapılandırmasının 873. port üzerinden bağlantıya izin verdiğinden emin olmalısınız.
rsync'i bu yöntemle kullanmanın bir uzak kabuk üzerinden kullanmaya farkları şunlardır:
Uzak sunucu üzerindeki bazı dosya depoları kimlik doğrulaması gerektirebilir. Böyle bir durumda bağlanmak istediğinizde sizden parola istenecektir. Parola istemi almamak için parolanızı RSYNC_PASSWORD ortam değişkenine kaydedebileceğiniz gibi, --password-file seçeneğini de kullanabilirsiniz. Bu kullanım rsync'i bir betik ile kullandığınız durumlarda yararlıdır.
Bağlantı için ssh veya rsh kullanarak ve dosya aktarımını rsync sunucusunun yeteneklerinden yararlanarak yapmanın mümkün olması bazan kullanışlı olabilmektedir. Özellikle, bir uzak makineye ssh üzerinden bağlanmak istediğinizde (şifreleme için ya da güvenlik duvarından geçebilmek için) ama bunun yanında rsync sunucusunun yeteneklerinden de yararlanmak istediğiniz durumlarda bu yararlıdır (BİR UZAK KABUKTAN BİR RSYNC SUNUCUSU ÇALIŞTIRMAK bölümüne bakınız).
Kullanıcı açısından, rsync'in bu yöntemle kullanılması, komut satırından uzak kabuk uygulamasının --rsh=komut ile belirtilmesi dışında bir rsync sunucusuna bağlanmaktan farksızdır. (Burada, RSYNC_RSH ortam değişkenine bir atama yaparak uzak kabuk uygulaması belirtmek, beklenen işlevselliği sağlamayacaktır.)
Uzak kabuk kullanıcısını, rsync sunucu kullanıcısından ayırmak için uzak kabuk komutunda '-l kullanıcı' seçeneğini kullanabilirsiniz:
rsync -av --rsh="ssh -l ssh-kullanıcısı" \ rsync-kullanıcısı@makine::modül[/yol] yerel-yol
"ssh-kullanıcısı" ssh seviyesinde kullanılmalıdır; "rsync-kullanıcısı" ise uzak makinenin rsyncd.conf dosyasından sınanacaktır.
Bir rsync sunucusu bir yapılandırma dosyası kullanılarak yapılandırılır. Daha ayrıntılı bilgi için rsyncd.conf(5) kılavuz sayfasına bakınız. rsync'i bir uzak kabuk uygulaması üzerinden ve root olarak çalıştırmadıkça, öntanımlı olarak /etc/rsyncd.conf dosyası kullanılır. Aksi takdirde, uzak makinedeki çalışma dizininde (genellikle $HOME) bulunan rsyncd.conf öntanımlıdır.
rsync sunucusu yapılandırma dosyası ile ilgili tüm bilgiyi rsyncd.conf(5) kılavuz sayfasında bulabilirsiniz.
Uzak kullanıcı root (chroot, setuid/setgid, v.s.) olmadıkça bazı yapılandırma seçenekleri kullanılamaz olacaktır. Eğer rsync sunucusunu bir uzak kabuk uygulaması üzerinden kullanıyorsanız, services dosyasında rsync sunucu portunun bulunması ya da inetd'nin yapılandırılması gerekli değildir.
Bir tek kullanımlık ssh anahtarı dışında bir rsync sunucusu çalıştırmak için rsyncd.conf(5) kılavuz sayfasındaki bu bölüme bakınız.
Burada rsync kullanımıyla ilgili bazı örnekler bulacaksınız.
Büyük MS Word dosyaları ve eposta dizinlerinden oluşan eşimin ev dizinini yedeklemek için şöyle bir cron işi çalıştırıyorum:
rsync -Cavz . arvidsjaur:backup
Her gece bir PPP bağlantısı üzerinden bu dizini ayrıca, kendi makinemin arvidsjaur dizinine kopyalıyorum.
Samba kaynak ağacını eşzamanlı tutmak için şu Makefile hedeflerini kullanıyorum:
get: rsync -avuzb --exclude '*~' samba:samba/ . put: rsync -Cavuzb . samba:samba/ sync: get put
Bu sayede bağlantının öbür ucundaki bir CVS diziniyle benimkini güncellememi sağlıyor. Uzak makinede bir takım CVS işlemleri yaptıktan sonra uzak CVS protokolü ile bunları kendi makinemde güncellemek gecikmelerden dolayı pek verimli olmuyor.
"eski" ve "yeni" ftp sitelerim arasında bir dizini şu komutla yansılıyorum:
rsync -az -e ssh --delete ~ftp/pub/samba nimbus:"~ftp/pub/tridge"
Bu komut her saat başı cron'dan çalıştırılıyor.
Burada rsync'de kullanılabilen seçeneklerin bir özetine yer verilmiştir (rsync --help komutu bu listeyi çıktılar). Bu seçenekler bir sonraki bölümde ayrıntılı olarak açıklanmıştır.
-v, --verbose çıktı daha ayrıntılı olur -q, --quiet hatalar dışında bilgi verilmez -c, --checksum sadece toplam sağlamaya bakılır, zaman ve boyut değişikliklerine bakılmaz -a, --archive arşiv kipi; -rlptgoD (-H'sız) ile aynı -r, --recursive dizinlerin alt dizinlerine inilir -R, --relative göreli dosya yolları kullanılır --no-relative --relative kapatılır --no-implied-dirs -R uygulanmış dizinler gönderilmez -b, --backup yedekleme yapılır (--suffix ve --backup-dir seçeneklerine bakın) --backup-dir=DİZİN sadece belirtilen dizinin içeriği yedeklenir --suffix=SONEK yedekleme soneki (--backup-dir yoksa ~ öntanımlıdır) -u, --update hedeftekiler daha yeniyse bu dosyalar atlanır --inplace hedef dosyaları yerinde günceller -d, --dirs altdizinlere inmeden dizinleri aktarır -l, --links sembolik bağları sembolik bağ olarak kopyalar -L, --copy-links sembolik bağ değil bağın son hedefi kopyalanır --copy-unsafe-links sadece güvensiz sembolik bağlar dönüştürülür --safe-links ağacın dışını hedefleyen sembolik bağlar yoksayılır -H, --hard-links sabit bağlar korunur -K, --keep-dirlinks sembolik bağlı dizinler alıcıda dizin yapılır -p, --perms izinler korunur -o, --owner sahip korunur (sadece root) -g, --group grup korunur -D, --devices aygıtlar korunur (sadece root) -t, --times zamanlar korunur -O, --omit-dir-times zamanlar korunurken dizinler bunun dışında tutulur -S, --sparse seyrek dosyaları en verimli şekilde elde eder -n, --dry-run işlemi yapıyormuş gibi gösterir ama yapmaz -W, --whole-file dosyaları tamamen kopyalar (rsync algoritması ile farkları değil) --no-whole-file daima arttırımlı rsync algoritması kullanılır -x, --one-file-system dosya sistemi sınırlarının dışına çıkılmaz -B, --block-size=BOYUT sabit bir blok boyunda sağlama toplamına zorlar -e, --rsh=KOMUT kullanılacak uzak kabuk uygulaması belirtilir --rsync-path=UYGULAMA uzak makinede rsnc'in çalıştıracağı uygulama --existing sadece hedefte mevcut olan dosyalar güncellenir --ignore-existing hedefte mevcut olan dosyalar yoksayılır --remove-sent-files alınan dosyalar/sembolik bağlar göndericide silinir --del --delete-during ile aynı --delete göndericide olmayan dosyalar alıcıda silinir --delete-before alıcıda aktarım öncesi silme yapılır (öntanımlı) --delete-during alıcıda aktarım sırasında silme yapılır --delete-after alıcıda aktarım sonrası silme yapılır --delete-excluded alıcıda ayrıca dışlanmış dosyalar da silinir --ignore-errors G/Ç hataları olsa da siler --force dizinler boş olmasa bile silinir --max-delete=SAYI SAYIdan fazla dosya silinmez --max-size=BOYUT BOYUTtan daha büyük dosyalar aktarılmaz --partial kısmen aktarılmış dosyalar tutulur --partial-dir=DİZİN kısmen aktarılmış dosyalar DİZİNde tutulur --delay-updates güncellenecek tüm dosyalar sona bırakılır --numeric-ids kullanıcı/grup kimliklerini isimlerle eşleştirmez --timeout=SÜRE G/Ç zamanaşımını SÜRE saniyeye ayarlar -I, --ignore-times zaman ve boyut bakımından eşleşen dosyalar atlanmaz --size-only boyutları aynı olan dosyalar atlanır --modify-window=SAYI doğruluğu arttırmak için değişiklik zamanları karşılaştırılır -T, --temp-dir=DİZİN geçici dosyaları DİZİNde oluşturur -y, --fuzzy hedefte dosya yoksa benzerini bulur --compare-dest=DİZİN alınan dosyaları ayrıca DİZİNdekilerle karşılaştırır --link-dest=DİZİN değişmediyse DİZİNdeki dosyalara sabit bağ -z, --compress aktarım sırasında dosya verisi sıkıştırılır -C, --cvs-exclude dosyalar CVS'nin yaptığı gibi yoksayılır -f, --filter=KURAL bir dosya süzme kuralı ekler -F --filter='dir-merge /.rsync-filter' ve yinelemeli: --filter='- .rsync-filter' ile aynı --exclude=KALIP KALIP ile eşleşen dosyalar dışlanır --exclude-from=DOSYA dışlama kalıpları DOSYAdan okunur --include=KALIP KALIP ile eşleşen dosyalar dışlanmaz --include-from=DOSYA dışlanmayan kalıplar DOSYAdan okunur --files-from=DOSYA aktarılacak dosyaların isimlerinin listesi DOSYAdan okunur -0, --from0 *from seçeneklerindeki dosya listeleri boş karakter sonlandırmalı kabul edilir --version sürüm numarasını basar --port=PORT başka bir port belirtmek için --blocking-io uzak kabukta engellemeli G/Ç kullanılır --no-blocking-io engellemeli G/Ç öntanımlı olduğunda bunu iptal eder --stats dosya aktarımı sırasında durum bilgileri verir --progress aktarım sırasında gelişimi gösterir -P --partial --progress ile aynı -i, --itemize-changes tüm güncellemeler için bir değişiklik özeti çıktılar --log-format=BİÇİM aktarımları belirtilen biçimde günlükler --password-file=DOSYA parola DOSYAdan okunur --list-only dosyaları kopyalamaz, sadece listeler --bwlimit=KBPS saniyede kBayt cinsinden G/Ç band genişliği --write-batch=DOSYA bir betikli güncellemeyi DOSYAya yazar --read-batch=DOSYA bir betikli güncellemeyi DOSYAdan okur --checksum-seed=SAYI blok/dosya sağlama toplamı tohumunu ayarlar -4, --ipv4 IPv4 tercih edilir -6, --ipv6 IPv6 tercih edilir -h, --help bu yardım iletisini gösterir
rsync ayrıca bir artalan süreci olarak da çalıştırılabilir. Bu durumda şu seçenekleri kabul eder:
--daemon bir rsync artalan süreci olarak çalışır --address=ADRES belirtilen adres kullanılır --bwlimit=KBPS saniyede kBayt cinsinden G/Ç band genişliği --config=DOSYA rsyncd.conf yerine kullanılacak DOSYA --no-detach üst süreçten ayrık çalışmaz --port=PORT belirtilen PORTu dinler -v, --verbose ayrıntı düzeyini arttırır -4, --ipv4 IPv4 tercih edilir -6, --ipv6 IPv6 tercih edilir -h, --help bu yardım iletisini gösterir
rsync GNU uzun seçenekler paketini kullanır. Çoğu komut satırı seçeneği hem kısa hem de uzun seçenek içerir. Bazı seçenekler ise sadece uzun seçeneklerden oluşur. `=' işareti içeren seçeneklerdeki parametreler isteğe bağlıdır; `=' yerine boşluk kullanılabilir.
Aktarılan dosya isimlerinin çıktılanmasında --log-format seçeneğinin öntanımlı olarak "%n%L" ile kullanıldığı varsayılarak sadece dosyaların isimleri ve varsa sembolik bağlar hedefleri ile belirtilir. Tek -v seviyesinden bir ayrıntıda bir dosyanın öznitelikleri değişmişse bu gösterilmez. Değiştirilen özniteliklerin öğelere göre listelenmesi isterseniz (--itemize-changes seçeneğiyle ya da --log-format seçeneğine "%i" ekleyerek), istemcideki çıktıda değiştirilen tüm öğelerin ayrıntı düzeyi arttırılır. Daha fazla bilgi için --log-format seçeneğinin açıklamasına bakınız.
Çok sayıda bağlı dosyanın varlığı pahalıya mal olacağından -a seçeneği sabit bağları korumaz. Bunu istiyorsanız -H seçeneğini ayrıca belirtmelisiniz.
rsync /foo/bar/foo.c remote:/tmp/
uzak makinede /tmp/foo.c dosyasını oluşturur. Bunun yerine şu komutu kullansaydınız,
rsync -R /foo/bar/foo.c remote:/tmp/
uzak makinede /tmp/foo/bar/foo.c dosyası oluşturulacaktı (dosya yolunun tamamı kopyalanır). Karşıya yollanacak yol uzunluğunu sınırlamak için şöyle yapabilirsiniz:
cd /foo rsync -R bar/foo.c remote:/tmp/
Bu komut uzak makinede /tmp/bar/foo.c dosyasını oluşturur.
--update seçeneğinin şu anki gerçekleniminde gönderici ve alıcı arasında dosya biçimlerinde bir fark varsa, bu, güncelleme için tarihlerden daha önemli olarak ele alınır. Başka bir deyişle, hedef bir dosyaya sahipken, kaynak bir dizin veya bir sembolik bağa sahipse, aktarım dosyalarını zaman değerlerine bakılmaksızın yapılır. Bu davranış ileride değişebilir (bu konuda bir fikriniz varsa, eposta listesinde bunu açıklamaktan çekinmeyin).
Bu seçenek blok temelli değişiklikler olan ya da sonuna ekleme yapılan çok büyük dosyalarla, disk ve ağ bakımından sınırlı sistemlerde yararlıdır.
Bu seçenek --partial (kesilmeye uğramış bir aktarımda dosya silinmez) seçeneğini uygular, fakat --partial-dir ve --delay-updates seçenekleriyle çelişir. rsync 2.6.4 öncesinde --inplace ayrıca --compare-dest ve --link-dest seçenekleriyle de çelişiyordu.
rsync'in, eğer bağın her iki parçası da dosya listesi ile gönderilmişse, sabit bağları saptayabileceğini unutmayın.
Bu seçenek işlemi yavaşlatabilir, gerçekten bu işlevselliğe ihtiyacınız varsa kullanın.
Bu seçenek olmaksızın, her yeni dosya izinlerini kaynak dosyanın izinlerine ve alıcı taraftaki umask'a göre belirlenir, diğer tüm dosyalar (güncellenenler dahil) kendi mevcut izinleriyle kalır (bu, cp gibi diğer dosya kopyalama araçlarında da böyledir).
Alt dizinlere inilmiyorsa bu seçenek etkisizdir.
Bu seçenek doğru şekilde kullanılmazsa tehlikeli olabilir. Önce --dry-run (-n) seçeneğiyle silinecek dosyaları görüp, önemli dosyaların silinmeyeceğinden emin olduktan sonra asıl işlemi başlatmak çok daha iyidir.
Gönderen tarafta bir G/Ç hatası saptandığında hedefteki dosya silme işlemi iptal edilir. Bu, gönderen tarafın alıcı taraftaki dosyaları tümden silmesi gibi geçici dosya sistemi hatalarına karşı (NFS hataları gibi) bir önlemdir. Bu davranışı --ignore-errors seçeneğiyle iptal edebilirsiniz.
--delete seçeneği silme zamanını belirten --delete-* seçenekleriyle, --delete-excluded dahil, herhangi bir sorun olmaksızın birleştirilebilir. Ancak, silme zamanını belirten --delete-* seçeneklerinden biri belirtilmemişse, rsync öntanımlı olarak --delete-before algoritmasını seçer. İleri sürümlerde bu seçim --delete-during algoritmasıyla değiştirilebilir. Ayrıca, --delete-after seçeneğine de bakınız.
Aktarımın başında silme yapılması, eğer dosya sistemi doluluk bakımından sınırda ise ve ancak fazlalıkların kaldırılmasıyla dosya aktarımı mümkün olabilecekse yararlıdır. Ancak, bu seçenek aktarımın başlamasını geciktirdiğinden aktarımın zamanaşımına uğramasına (--timeout belirtilmişse) sebep olabilir.
Bu seçenek [kullanıcı@]makine::modül/yol ile kullanılırsa, uzak makinedeki rsync sunucusunu çalıştırmak için belirtilen uzak kabuk komut'u kullanılacak ve aktarım için uzak makinede çalışan rsync suncusunun soket bağlantısı değil, uzak kabuk bağlantısı kullanılacaktır. Ayrıca, yukarıdaki BİR RSYNC SUNUCUSUNA BİR UZAK KABUKTAN BAĞLANMAK bölümüne de bakınız.
komut içinde rsync sadece tek bir argümana izin verir. Örnek:
-e "ssh -p 2234"
Uzak kabuk uygulamasını seçmek için RSYNC_RSH ortam değişkenini, -e seçeneğinde belirtilebilen bir değeri atayarak kullanabilirsiniz.
Ayrıca, bu seçenekten etkilenen --blocking-io seçeneğinin açıklamasına da bakınız.
Aşağıdaki örnekte uzak makinede --relative seçeneği ile kullanmak için farklı bir öntanımlı yol belirtilmektedir:
rsync -avR --rsync-path="cd /a/b && rsync" makine:c/d /e/
Dışlanan dosyaların listesi şöyle ilklendirilmiş olsun:
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/
$HOME/.cvsignore içindeki dosyalarla CVSIGNORE ortam değişkeninde (tüm isimler bir boşlukla ayrılarak belirtilir) listelenen her dosya bu listeye eklenecektir.
Son olarak, .cvsignore dosyası ile aynı dizindeki dosyalardan .cvsignore dosyasında listelenmiş kalıplarla eşleşen dosyalar yok sayılır. rsync'in süzme ve dışlama uyguladığı dosyaların aksine bu kalıplar boşluklarla ayrılır. Daha fazla bilgi için cvs(1) kılavuz sayfasına bakınız.
Bu seçeneği kendi --filter kurallarınızla birlikte belirtirseniz, -C seçeneğinin komut satırının neresinde olduğuna bakılmaksızın, CVS dışlananlarının sizin kurallarınızın sonuna ekleneceğini unutmayın. Bu, onlara sizin belirttiğiniz kurallara göre daha düşük öncelik verir. CVS dışlananlarının süzme kurallarınız arasındaki yerini kendiniz belirlemek isterseniz, komut satırı seçeneği olarak -C belirtmek yerine --filter=:C ve --filter=-C seçeneklerini belirtmelisiniz (bu şekilde komut satırında belirtebileceğiniz gibi bir süzme dosyasına ":C" ve "-C" kurallarını yerleştirerek de belirtebilirsiniz). İlk kural her dizinde .cvsignore dosyalarına bakılmasını, ikinci kural ise yukarıda bahsedilen CVS dışlananlarını bir seferliğine dahil edilmesini sağlar.
Dışlanacak dosyaların listesini oluşturmak içim komut satırında çok sayıda --filter seçeneği belirtebilirsiniz.
Bu seçenek hakkında daha ayrıntılı bilgi için SÜZME KURALLARI bölümüne bakınız.
--filter=': /.rsync-filter'
Bu kural, rsync'in dizin hiyerarşisi dahilinde serpiştirilmiş .rsync-filter dosyalarına bakmasını ve aktarımda bu dosyalardaki süzme kurallarını kullanmasını sağlar. -F seçeneği ikinci kez kullanılmışsa şu kuralı uygular:
--filter='- .rsync-filter'
Bu kural .rsync-filter dosyalarının aktarılmamasını sağlar.
Bu seçenek hakkında daha ayrıntılı bilgi için SÜZME KURALLARI bölümüne bakınız.
Bu seçenek hakkında daha ayrıntılı bilgi için SÜZME KURALLARI bölümüne bakınız.
Bu seçenek hakkında daha ayrıntılı bilgi için SÜZME KURALLARI bölümüne bakınız.
dosya'dan okunan dosya isimlerinin hepsi kaynak dizine göre değerlendirilir -- öğelerin başındaki "/"lar ile daha üst dizinlere çıkılmasını sağlayan "../"lar kaldırılır. Örnek:
rsync -a --files-from=/tmp/foo /usr uzak:/yedek
/tmp/foo içinde "bin" (hatta "/bin") diye bir girdi varsa, /usr/bin dizini hedefte /yedek/bin dizini olarak oluşturulur (ancak, dosya içinde dosyalar açıkça listelenmemişse ya da komut satırında -r seçeneği yoksa /usr/bin dizinindeki dosyalar aktarılmaz). Ayrıca, --relative seçeneğinin etkisini (öntanımlı olarak etkindir) sadece dosyadan okunan yol bilgisini yinelemek için saklar ancak, kaynak için belirtilmiş yolun yinelenmesine zorlamaz (örnekte /usr).
Ek olarak, eğer dosya'yı "uzak:" öneki ile belirtirseniz, bu dosya yerel makineden değil, uzak makineden okunur (uzak: ile belirtilen makine, aktarımın yapıldığı makine olmalıdır). Bir kısaltma olarak, "aktarımın yapıldığı uzak makine" anlamında sadece ":" önekini de kullanabilirsiniz. Örnek:
rsync -a --files-from=:/yol/dosya-listesi uzak:/ /tmp/kopya
Bu komut "uzak" makinesindeki /yol/dosya-listesi dosyasında listelenmiş dosyaları kopyalayacaktır.
2.6.4 sürümünden başlayarak, çok sayıda --compare-dest dizini belirtilebilmektedir. Eğer hedefte bir eşleşme bulunamazsa, dosya bu dizinlerde aranır.
Eğer dizin göreli bir dizin olarak belirtilmişse bu dizinin hedef dizinde olduğu kabul edilir. Ayrıca --link-dest seçeneğine de bakınız.
rsync -av --link-dest=$PWD/öncü-dizin \ makine:kaynak-dzn/ yeni-dzn/
2.6.4 sürümünden başlayarak, çok sayıda --link-dest dizini belirtilebilmektedir. Eğer hedefte bir eşleşme bulunamazsa, dosya bu dizinlerde aranır.
Eğer dizin göreli bir dizin olarak belirtilmişse bu dizinin hedef dizinde olduğu kabul edilir. Ayrıca --compare-dest seçeneğine de bakınız.
Öntanımlı olarak rsync, dosyaların sahibini belirlemekte kullanıcı ve grup isimlerini kullanır. Özel kullanıcı ve grup kimliği olan 0 kimliği, bu seçenek belirtilmemiş olsa bile, kullanıcı ve grup isimleriyle asla eşleştirilmez.
Eğer kullanıcı ve grup isimleri her iki uçta eşleşmiyorsa, bunların yerine kaynak sistemdeki kullanıcı ve grup kimlikleri kullanılır. chroot ayarlarının rsync'in kullanıcı ve grup isimlerini arama yeteneklerini nasıl etkilediğini ve bunları nasıl değiştirebileceğinizi öğrenmek için rsyncd.conf(5) kılavuz sayfasındaki use chroot modül seçeneğinin açıklamasına bakınız.
"%i" belirtimi 9 karakter uzunlukta şifresel bir çıktıya sahiptir. Genel biçimi UXcstpoga dizgesine benzer. Burada U karakteri yapılan güncellemenin çeşidini, X karakteri dosya türünü diğer karakterler ise güncellenmişlerse öznitelikleri belirten bir karakterle değiştirilir.
U karakterinin yerini alan güncelleme türleri şunlardır:
X karakterinin yerini alan dosya türleri şunlardır: bir dosya için f, bir dizin için d, bir sembolik bağ için L ve bir aygıt için D.
UXcstpoga dizgesinin diğer harfleri, gerçek karakterler olup, öğenin ilgili öznitelikleri güncellenmişse çıktılanırlar, aksi takdirde "." ile değiştirilirler. Bunun üç istisnası vardır:
Harflerin belirttiği öznitelikler şunlardır:
Olası diğer bir çıktı daha vardır: dosyalar silinirken silinecek her öğe için "%i" belirtimi "deleting" dizgesini çıktılar (yeterince son sürüm bir rsync ile konuşulduğu ve bunun silme işlemlerini bir ayrıntı olarak çıktılamayıp günlük kaydı tuttuğu varsayımıyla).
biçim dizgesinde --itemized-changes belirtimi (%i) kullanılmamışsa, belli bir yolla (bir dosyanın aktarılması, bir sembolik bağ veya aygıtın yeniden oluşturulması, bir dizine dokunulması) güncellenen her dosya için çıktı üretilecektir, aksi takdirde, çıktılama herhangi bir yolla güncellenen her öğeye genişletilir (alıcı tarafın sürümü en azından 2.6.4 ise). "%i" belirtiminin çıktısı ile ilgili ayrıntılar için --itemized-changes seçeneğinin açıklamasına bakınız.
--verbose seçeneği "%n%L" biçiminin uygulanmasını sağlar. --log-format seçeneğini isterseniz, -v (--verbose) seçeneğini belirtmeksizin kullanabileceğiniz gibi bu seçeneği de kullanarak her dosya için bu biçimdeki bir çıktının üretimesini de sağlayabilirsiniz.
Günlüklemenin aktarımın sonunda yapılmasını sağlayan aktarım istatistiği belirtimlerinden biri belirtilmedikçe rsync, günlük biçimi dizgesini bir dosyanın aktarımından önce çıktılayacaktır. Bu geç günlükleme etkin olduğunda ve ayrıca --progress belirtilmişse rsync ayrıca aktarılan dosyanın ismini işlem bilgisinden önce (şüphesiz, --log-format çıktısından sonra) çıktılayacaktır.
Eğer dizin mevcut değilse, rsync dizin'i oluşturacaktır (sadece son dizin, yolun tamamı değil). Bu davranışın sonucu olarak, hedef dosyanın bir dizin oluşturmayı gerektirdiği durumlarda göreli yol belirtmek (--partial-dir=.rsync-partial gibi) daha iyidir, bu takdirde eksik dosya işlem sonunda silindiğinde bu dizin de silinir.
Eğer dizin ile mutlak bir yol belirtilmemişse, mevcut dışlamalarınızın sonunda rsync ayrıca --exclude değeri olarak bir dizin ekleyecektir. Böylece dizin içindeki dosyaların aktarımı ve ayrıca alıcı tarafta bu dosyaların zamanından önce silinmesi engellenecektir. Bir örnek: yukarıdaki --partial-dir seçeneği diğer süzme kurallarının sonuna bir "--exclude=.rsync-partial/" kuralı ekleyecektir. Eğer kendiniz bir takım süzme kuralları kullanıyorsanız, bu kuralın daha yüksek öncelik alması için kendi kurallarınız içinde uygun bir yerde belirtebilirsiniz (kurallarınızın sonunda bir --exclude='*' kuralı varsa, özdevimli eklenen bir kural hiçbir zaman erişilebilir olmayacaktır).
Ayrıca dizin değerini RSYNC_PARTIAL_DIR ortam değişkeninde belirtebilirsiniz. Bu değişkene bir değerin atanmış olması --partial seçeneğinin etkin olmasını sağlamaz ama komut satırında --partial seçeneğini belirtmekle --partial-dir seçeneğine dizin belirtilmiş gibi işlem yapılması sağlanır. Örneğin, --partial-dir=.rsync-tmp ile --progress seçeneğini birlikte kullanmak yerine, kabukta RSYNC_PARTIAL_DIR=.rsync-tmp şeklinde bir atama yaptığınızı ve .rsync-tmp dizinini eksik kalan aktarımı tamamlamak için komut satırında sadece -P seçeneğini belirterek kullandığınızı varsayalım. --partial seçeneğinin bu ortam değişkenine bakmadığı durumlar, (1) --inplace seçeneğinin belirtilmiş olması (--inplace seçeneği --partial-dir ile çeliştiğinden), (2) --delay-updates seçeneğinin belirtilmiş olmasıdır (aşağıya bakınız).
Sunucu yapılandırmasının refuse options ayarı, amacı gereği --partial-dir seçeneğinin --partial seçeneğini uygulamamasına sebep olur. Bu, yani, --partial seçeneğinin reddedilmesi, --partial-dir tarafından sağlanan daha güvenilir üsluba hala izin veriyor olmakla, aktarımı yarım kalmış hedef dosyaların tekrar yazılmasına izin vermemekte kullanılabilir.
Bu seçenek alıcı tarafta biraz daha fazla bellek kullanımına (aktarılan dosya başına bir bit) ve güncellenen tüm dosyaları tutacak kadar boş disk alanına gereksinim duyar. Ayrıca, yol mutlak olduğunda güncellenen dosyaların hepsi tek bir dizine konulacağından, aktarımda dosyaların herhangi birinin aynı isimde olma olasılığının olmaması durumu dışında, --partial-dir ile mutlak dosya yolu belirtmemelisiniz.
Ayrıca, çok daha atomik bir güncelleme algortiması içeren, rsync paketinin "support" alt dizinindeki "atomic-rsync" perl betiğine de bakın (--link-dest seçeneğini ve dosyalar için paralel bir hiyerarşi kullanır).
Bir dosya aktarılırken, üretilen çıktı şöyle görünür:
782448 63% 110.64kB/s 0:00:04
Bu çıktı kullanıcıya o anki dosya boyunu, aktarılmış verinin yüzdesini (hattaki veri ile aktarılmış verinin toplamı olarak), aktarım hızını ve aktarımın tamamlanması için gerekli kalan süreyi gösterir.
Bir dosya aktarıldıktan sonra, üretilen çıktı şöyle görünür:
1238099 100% 146.38kB/s 0:00:08 (5, 57.1% of 396)
Bu çıktı kullanıcıya aktarımı biten dosyanın son boyutunu, aktarımın %100 tamamlandığını, dosyanın son aktarım hızını, dosyanın aktarımı için kullanılan süreyi ve ek olarak toplam aktarımın boyut ve adet olarak ne kadarının tamamlandığını parantez içinde gösterir.
Bir rsync sunucu başlatılırken kullanılan seçenekler:
Eğer standart girdi bir soket ise, rsync, inetd üzerinden çalıştığını varsayacaktır, aksi takdirde, uçbirimini bırakıp bir artalan süreci haline gelecektir. rsync istemcileri tarafından yapılan her bağlantı isteğinde süreç, yapılandırma dosyasını (rsyncd.conf) okuduktan sonra isteğe yanıt verecektir. Daha fazla bilgi için rsyncd.conf(5) kılavuz sayfasına bakınız.
Süzme kuralları hangi dosyaların aktarılacağını (içerileceğini - include), hangi dosyaların atlanacağını (dışlanacağını - exclude) seçmek için esnek bir yöntem sağlar. Kurallar ya doğrudan include/exclude seçenekleri ile ya da daha hassas içerme/dışlama kalıpları ile (bir dosyadan okuyarak) belirtilebilir.
rsync, aktarılacak dosya/dizinlerin listesindeki her isim için ayrı ayrı içerme/dışlama kurallarını tarar ve ilk eşleşen kalıbı uygular: bir dışlama kalıbıyla eşleşen dosya atlanır; bir içerme kalıbı ile eşleşen dosya atlanmaz; eşleşen bir kalıp yoksa dosya atlanmaz.
rsync, komut satırında belirtilen include/exclude seçeneklerinden sıralı bir süzme kuralları listesi oluşturur. Süzme kurallarının sözdizimi şöyledir:
kural [kalıp_veya_dosyaismi] kural,belirteç [kalıp_veya_dosyaismi]
kural ismi olarak, aşağıda açıklanan kısa ya da uzun kural isimlerinden birini kullanabilirsiniz. Eğer kısa isimli bir kural kullanırsanız, isteğe bağlı olan belirteç'ten kuralı bir ',' ile ayırın. kalıp veya dosyaismi'ni (varsa) bir boşluk veya altçizgiden sonra yazmalısınız. Kullanılabilecek kural önekleri:
uzun kısa açıklama -------------------------- exclude - dışlama kalıbı belirtir include + içerme kalıbı belirtir. merge . ek kuralları okumak için katıştırılacak dosya, dir-merge : bir dizin içi katıştırma dosyası belirtir. hide H aktarımdan gizlenecek dosyalar için kalıp. show S aktarımdan gizlenmeyecek dosyalar için kalıp. protect P silinmekten koruncak dosyalar için kalıp. risk R silinmekten korunmayacacak dosyalar için kalıp. clear ! o anki include/exclude listesini temizler (argümansız)
Kurallar bir dosyadan okunduğunda, "#" ile başlayan açıklama satırları ile boş satırlar yoksayılır.
--include ve --exclude komut satırı seçenekleri yukarıdaki kural sözdizimini değil, sadece kalıplarla ek olarak listeyi temizleyen ünlem (!) imini (ve kalıplar bir dosyadan okunuyorsa boş ve açıklama satırlarını) kabul ederler. Bir include seçeneği için, bir kalıp "- " (tire ve boşluk) veya "+ " (artı ve boşluk) ile başlamıyorsa, kural bir "+ " olarak değerlendirilir. Bir --exclude seçeneği için bir kalıp bir "- " ile başlamalıdır.
Bir --filter seçeneği ise kuralın başlangıcında daima bir uzun ya da kısa kural ismi içermelidir.
Ayrıca, --filter, --include ve --exclude seçenekleri tek bir kalıp/kural alabilir. Çok sayıda kalıp/kural eklemek için komut satırında bu seçenekleri tekrarlayabilir veya --filter, --include-from ve --exclude-from seçeneklerinin dosya katıştırma sözdizimini kullanabilirsiniz.
Yukarıda SÜZME KURALLARI bölümünde bahsedildiği gibi dosyaları "+", "-" gibi kalıpları kullanarak aktarabilir ya da atlayabilirsiniz. İçerme ve dışlama kurallarının herbirinde aktarılacak dosyaların isimleriyle eşleşen kalıplar belirtilir. Bu kalıplar çeşitli biçimler alabilir:
Şuna dikkat edin, --recursive (-r) seçeneğini (-a ile uygulanan) kullandığınızda, her yolun her alt bileşeni yukarıdan aşağıya ziyaret edilir, yani içerme/dışlama kalıpları altdizinlere inilerek her alt bileşenin tam ismine uygulanır (örn, "/foo/bar/baz" içerilirken "/foo" ve "/foo/bar" dışlanamaz). rsync göndereceği dosyaları ararken, dışlama kalıpları aslında dizin basamaklama aşamasını kısadevre eder. Eğer bir kalıp belli bir üst dizini dışlıyorsa, bir daha derin içerme kalıbını sonuçsuz bırakabilir, çünkü rsync, hiyerarşinin dışlanan bir bölümünden daha derine inmez. Bu özellikle "*" ile biten bir kural kullanırken önem kazanır. Örneğin, bu çalışmayacaktır:
+ /bir/yol/bu-dosya-bulunmaz + /bu-dosya-bulunur - *
Bu kural listesi, "bir" üst dizini '*' kuralından dolayı dışlayacağından başarısız olur, yani rsync, "bir" ve "bir/yol" dizinleri içindeki hiçbir dosyayı ziyaret etmez. Hiyerarşideki tüm dizinleri ziyaret ettirmenin bir yolu tek bir kuralın listeye dahil edilmesidir: "+ */" ("- *" kuralından önce herhangi bir yere yerleştirebilirsiniz). Diğer bir çözüm ise ziyaret edilmesi gereken üst dizinlerin hepsi için belirli bir içerme kuralı eklemektir. Örneğin, bu kural kümesi doğru çalışır:
+ /bir/ + /bir/yol/ + /bir/yol/bu-dosya-bulunur + /bu-dosya-da-bulunur - *
Dışlama/içerme eşleştirme örnekleri:
Yukarıda SÜZME KURALLARI bölümünde bahsedildiği gibi dosyaları bir merge (.) ya da bir dir-merge (:) süzme kuralı belirterek süzme kurallarınıza tüm dosyaları katıştırablirsiniz.
İki çeşit katıştırma dosyası vardır: tek dosyalık ('.') ve diziniçi dosyalar (':'). Tek dosyalık bir katıştırma dosyası bir defa okunur ve "." kuralındaki süzme listesi ile birlikte işleme sokulur. Diziniçi katıştırma dosyası türünde ise, rsync adım adım bütün altdizinleri tarayarak ismi belirtilen dosyayı buldukça dosya içeriğini o anki kural listesine ekler. Bu diziniçi kural dosyaları aktarım alt dizinlerinde aranması gerektinden gönderen tarafta oluşturulmalıdır. Ayrıca, bu kural dosyalarının silinmeyecek dosyaları etkilemesi isteniyorsa, alıcı tarafa aktarılmaları gerekecektir (aşağıda, Diziniçi Katıştırma Kuralları ve Silme bölümüne bakınız).
Bazı örnekler:
merge /etc/rsync/default.rules . /etc/rsync/default.rules dir-merge .per-dir-filter dir-merge,n- .non-inherited-per-dir-excludes :n- .non-inherited-per-dir-excludes
Bir merge veya dir-merge kuralı şu belirteçleri kabul eder:
Bir "+" veya "-" kuralından sonra kullanılabilecek belirteçler:
dir-merge kuralları n belirteci kullanılmadıkça katıştırma dosyasının bulunduğu her alt dizinde miras alınır. Her alt dizinin kuralları, miras alınan kurallara göre daha yüksek öncelik almak üzere üst dizindeki dir-merge kurallarının başına eklenir. Birleşik kural kümesi katıştırma dosyasının bulunduğu noktalara göre gruplanır, böylece genel kurallar listesinde evvelce belirtilmiş bir kuralın dir-merge kuralları ile değiştirilmesi mümkün olur. Bir diziniçi katıştırma dosyasında bir liste temizleme kuralına rastlandığında, sadece o katıştırma dosyasının bulunduğu noktaya kadar miras alınan kurallar temizlenir.
Bir tek dosyalık kuralın bir dir-merge dosyasından miras alınmasını engellemenin diğer bir yolu, dosyanın başına bir / getirmektir. Bir diziniçi katıştırma dosyasındaki bu tür kurallar katıştırma dosyasının bulunduğu dizine göre ele alınır, böylece bir "/foo" kalıbı dir-merge süzme kuralı dosyasının bulunduğu dizindeki "foo" dosyasıyla eşleşir.
--filter=". dosya" üzerinden belirteceğiniz örnek süzme dosyası:
merge /home/user/.global-filter - *.gz dir-merge .rules + *.[ch] - *.o
Bu, bu listenin başına /home/user/.global-filter dosyasının içeriğini ve ayrıca, bunu da alt dizinde ".rules" dosyasının sonuna ekleyecektir. Her dizinin başında önce tüm kurallar okunup üst dizinden alınan genel kurallar buna eklenir.
Eğer bir diziniçi katıştırma dosyası, ilk aktarım dizininin üst dizini olan bir dosya yolu ile belirtilmişse, rsync belirtilen dosya için, aktarım dizininin başlangıcından itibaren tüm üst dizinleri tarayacaktır. Örneğin, böyle bir süzgeç (-F seçeneğine bakınız),
--filter=': /.rsync-filter'
rsync'e .rsync-filter dosyasını kökten aşağı doğru, aktarımın bir parçası olarak gönderilen dizinlerde dosyaı normal taramaya başlamadan önce aktarımın üst dizininden itibaren tüm dizinlerde aramasını söyler (Bilgi: bir rsync sunucusu için kök dizin daima modülün dizinidir).
Diziniçi katıştırma dosyaları için bu tür öntarama örnekleri:
rsync -avF /src/path/ /dest/dir rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir
İlk iki komut ".rsync-filter" dosyasını "/src/path" içinde aramaya başlamadan önce "/" ve "/src" dizinlerinde arar. Son komut ise, üst dizin taramasından kaçınır ve ".rsync-filter" dosyasını sadece aktarımın parçası olan dizinlerde arar.
Bir ".cvsignore" dosyasının içeriğini kalıplarınıza dahil etmek isterseniz, ":C" kuralını kullanmalısınız. Bu kural, .cvsignore dosyalarını diziniçi katıştırma dosyaları haline getirir, fakat dosya CVS uyumluluğu bağlamında ayrıştırılır. --cvs-exclude (-C) seçeneğinin bulunduğu yerde etkili olmasını istiyorsanız kurallarınızın arasına bu noktada ":C" kuralını yerleştirebilirsiniz. Bu olmaksızın, rsync .cvsignore dosyası için dir-merge kuralını diğer kurallarınızın sonuna ekleyecektir (komut satırı seçeneklerinizden daha düşük bir öncelik vererek). Örnek:
cat <<EOT | rsync -avC --filter='. -' a/ b + foo.o :C - *.old EOT rsync -avC --include=foo.o -f :C --exclude='*.old' a/ b
Yukarıdaki rsync komutlarının ikisi de aynı işi yapar. Her ikisi de diziniçi .cvsignore kurallarını listenin sonuna değil, ortasına katıştıracaktır. Bu, onların dizine özel kurallarının sizin kurallarınızın tümünden daha düşük önemde olması yerine :C'ye kadar olan kuralların yerine geçmesini mümkün kılar. Diğer CVS dışlama kurallarını etkilemek için (örn, öntanımlı dışlananlar listesi, $HOME/.cvsignore dosyasının içeriği ve $CVSIGNORE değişkeninin değeri), -C komut satırı seçeneğini belirtmemeli, onun yerine kurallarınıza bir "-C" kuralı yerleştirmelisiniz; örn, "--filter=-C".
Yukarıda SÜZME KURALLARI bölümünde bahsedildiği gibi mevcut içerme/dışlama listesini "!" süzme kuralını kullanarak temizleyebilirsiniz. "Mevcut" liste ya genel kural listesi (kural, süzme seçenekleri çözümlenirken saptanmışsa) ya da diziniçi katıştırma dosyası kurallarından (bunlar kendi alt listelerinde miras alınırlar, dolayısıyla üst dizinin kurallarını bu kuralla temizleyebilirsiniz) oluşur.
Evvelce de bahsedildiği gibi, genel içerme/dışlama kalıpları aktarımın kök dizini ile ilişkilendirilebilir (katıştırma dosyasının dizini ile ilişklendirilen diziniçi kalıplarının tersine). Aktarımı, göndericiden alıcıya bir isim altağacının gönderilmesi olarak düşünürseniz, aktarımın kök dizini hedef dizinde yinelenecek olan ağaç başlangıcıdır. Bu kök, bir / ile başlayan kalıplarla ilişkilendirilir.
Eşleşme aktarımın köküne göre yapıldığından, kaynak yolun sonundaki bölü çizgisini değiştirmek ya da --relative seçeneğinin kullanımında değişiklik yapmak eşleştirmenizde kullanılması gereken yolu etkiler. Aşağıdaki örneklerde bu davranış modellenmiştir.
Biri "/home/ben/foo/bar", diğeri "/home/sen/bar/baz" olan iki dosyamız olsun. Aşağıda bu iki dosyanın çeşitli komut kullanımlarında nasıl farklı aktarıldıkları gösterilmiştir.
Örnek komut: rsync -a /home/ben /home/sen /hedef +/- kalıbı: /ben/foo/bar +/- kalıbı: /sen/bar/baz Hedef dosya: /hedef/ben/foo/bar Hedef dosya: /hedef/sen/bar/baz Örnek komut: rsync -a /home/ben/ /home/sen/ /hedef +/- kalıbı: /foo/bar (dikkat: "ben" yok) +/- kalıbı: /bar/baz (dikkat: "sen" yok) Hedef dosya: /hedef/foo/bar Hedef dosya: /hedef/bar/baz Örnek komut: rsync -a --relative /home/ben/ /home/sen /hedef +/- kalıbı: /home/ben/foo/bar (dikkat: tam dosyayolu) +/- kalıbı: /home/sen/bar/baz (keza bu da) Hedef dosya: /hedef/home/ben/foo/bar Hedef dosya: /hedef/home/sen/bar/baz Örnek komut: cd /home; rsync -a --relative ben/foo sen/ /hedef +/- kalıbı: /ben/foo/bar (belirtilen yolla başlar) +/- kalıbı: /sen/bar/baz (keza bu da) Hedef dosya: /hedef/ben/foo/bar Hedef dosya: /hedef/sen/bar/baz
Hangi ismi süzdüğünüzü görmenin en kolay yolu, --verbose kullanarak çıktıya bakmak ve ismin önüne bir / koymaktır (herhangi bir dosya kopyalamaya hazır değilseniz, --dry-run seçeneğini kullanın).
Bir silme seçeneği olmaksızın, diziniçi katıştırma dosyası kuralları sadece gönderen tarafta konuyla ilgilidir, dolayısıyla aktarımı etkilemeksizin rahatça katıştırma dosyalarını dışlayabilirsiniz. Bunu kolayca yapmanın yolu, örnekte görüldüğü gibi bu dışlamaya 'e' belirtecini eklemektir:
rsync -av --filter=': .haric' --exclude=.haric mkn:kaynak/dizin /hedef rsync -av --filter=':e .haric' mkn:kaynak/dizin /hedef
Buna rağmen, alıcı tarafta bir silme yapmak VE bazı dosyaların da silinerek dışlanmasını isterseniz, alıcı tarafın dışlanacak dosyaları bilmesini sağlamanız gerekecektir. En kolayı, aktarıma diziniçi katıştırma dosyalarını dahil etmek ve --delete-after kullanmaktır. Bu yolla, birşeyleri silmeden önce alıcı tarafta gönderen taraftaki dışlama kuralları alınmış olacaktır:
rsync -avF --delete-after mkn:kaynak/dizin /hedef
Yine de, katıştırma dosyaları aktarımın bir parçası değilse, ya bazı genel dışlama kuralları belirtmeli (komut satırında belirtilebilir) ya da alıcı tarafta diziniçi katıştırma dosyalarının bulunmasını kendiniz sağlamalısınız. İlkine bir örnek (uzak .kural dosyalarının kendilerini dışladıkları varsayılıyor):
rsync -av --filter=': .kural' --filter='. /benim/ek.kuralım' --delete mkn:kaynak/dizin /hedef
Bu örnekte ek.kuralım dosyası aktarımın her iki tarafını da etkileyebilir, fakat (gönderen tarafta) kurallar diziniçi katıştırma kuralından sonra belirtildiğinden .kural dosyasından katıştırılan kurallardan daha düşük öncelikli olurlar
Son örnekte, uzak taraf .rsync-filter dosyalarını aktarımdan dışlamaktadır, ancak biz alıcı tarafta neyin silineceğini denetim altına almak için kendi .rsync-filter dosyalarımızı kullanmak istiyoruz. Bunu yapmak için diziniçi katıştırma dosyalarını özellikle dışlamalı (böylece silinmezler) ve neyin silinip silinmeyeceğini denetim altına almak için kuralları yerel dosyalara koymalıyız. Bu komutlardan biri gibi:
rsync -av --filter=':e /.rsync-filter' --delete \ mkn:kaynak/dizin /hedef rsync -avFF --delete mkn:kaynak/dizin /hedef
Betik kipi bir çok sistem için aynı olan güncellemeleri uygularken kullanılabilir. Bir dizin ağacının çok sayıda makine üzerinde kopyalarının bulunduğunu varsayalım. Şimdi, kaynak ağacında bazı değişiklikler olduğunu ve bunların diğer makinelere de aktarılması gerektiğini varsayalım. Bu işlemi betik kipini kullarak yapmak için, rsync, kaynak ağacındaki değişiklikleri hedef ağaçlardan birinde uygulayan --write-batch seçeneği ile çalıştırılır. --write-batch seçeneği, yapılan işlemlerin aynı dizin ağacını içeren hedeflerde uygulanmak üzere bir "betik dosyası" içinde saklanmasını sağlar.
Kaydedilen değişiklikleri diğer hedef ağaçlara uygulamak için rsync, bu dosyanın ismi seçeneğe argüman olarak belirtilerek --read-batch seçeneği ile çalıştırılır. rsync, betik dosyasında saklanmış bilgileri kullanarak hedef ağacı günceller.
Rahat olsun diye, --write-batch seçeneği kullanılırken ek bir dosya daha oluşturulur. Bu dosyanın ismi, betik dosyasının isminin sonuna ".sh" eklenerek oluşturulur. Bu .sh dosyası betik dosyasını kullanarak hedefi güncelleyecek komut satırını içerir. Bir Bourne(-benzeri) kabuk kullanılarak çalıştırılabilir. İsteğe bağlı olarak özgün yol yerine hedef ağacın dosya yolu aktarılabilir. Bu, hedef ağacın kaynak ağacının yolundan farklı olduğu durumlarda yararlıdır.
Dosya durumu, sağlama toplamı sınanması ve veri bloklarının üretimi işlemleri betik dosyasına bir kere kaydedildi mi, hedef ağaçlarda defalarca kullanılabilir. Aynı verileri her konağa ayrı ayrı göndermek yerine çok sayıda konağı aynı anda güncelleyecek çok görevli aktarım protolleri de kullanılabilir.
Örnekler:
$ rsync --write-batch=foo -a mkn:/kaynak/dzn/ /hedef1/dzn/ $ scp foo* uzak: $ ssh uzak ./foo.sh /hedef2/dzn/ $ rsync --write-batch=foo -a /kaynak/dzn/ /hedef1/dzn/ $ ssh remote rsync --read-batch=- -a /hedef2/dzn/ <foo
Bu örneklerde, rsync /kaynak/dzn/'den /hedef1/dzn/'i güncellemekte kullanılmış ve bu işlemi yinelemek için işlemler "foo" ve "foo.sh" dosyalarına kaydedilmiştir. "uzak" konağı betiğe kayıtlı veri /hedef2/dzn/ dizinine gönderilerek güncellenir. Bu iki örnek arasındaki farklar betik dosyalarının hangi esneklikte kullanılabileceğini göstermek içindir:
Betik okuma seçeneği, hedef ağacın, betiğin oluşturulduğu hedefteki ağaçla aynı olacağı kabulüne dayanır. Hedef ağaçta bir fark saptandığında işlem ya bir hata verilmeksizin iptal edilir (dosya güncel görünüyorsa) ya da dosya güncellemesi yapılmaya çalışılır ve bundan sonra eğer dosyanın doğrulanması başarısız olursa işlem bir hata üretilerek iptal edilir. Bu, eğer işlem kesintiye uğratılırsa bir betik okuma işleminin yeniden başlatılmasının güvenli olması gerektiği anlamına gelir. Eğer betikli güncellemenin dosyanın boyutuna ve tarihine bakılmaksızın daima yapılabilmesini isterseniz, -I seçeneğini kullanın (betik okunurken). Eğer bir hata oluşursa, hedef ağaç bir ihtimal, kısmen güncellenmiş durumda olacaktır. Bu durumda, rsync betikli güncelleme ile değil, normal işlemle kullanılarak hedef ağaç düzeltilebilir.
Tüm hedeflerde kullanılan rsync sürümü, betik dosyasını üretmekte kullanılandan en azından biraz daha yeni olmalıdır. Eğer, betik dosyasının protokol sürümü onu okuyan rsync'in sürümünden daha yeni ise rsync bir hata vererek sonlanacaktır.
--dry-run (-n) seçeneği betik kipinde çalışmaz ve bir çalışma anı hatası ile sonlanır.
Bir betik dosyası okunurken, siz belirtmemiş olsanız bile, betik dosyası üretilirken kullanılan ve betik dosyasındaki veriler için gerekli olan bazı seçenekler zorunlu olarak kullanılacaktır. Diğer seçenekler değiştirilebilir, hatta değiştirilmelidir de. Örneğin, --write-batch seçeneği --read-batch seçeneği olarak değişmeli, --files-from kullanılmamalıdır, bunun yanında --filter/--include/--exclude seçenekleri ise --delete seçeneklerinden biri belirtilmedikçe gerekli olmaz.
betik.sh dosyasını oluşturan kod, kabuk betiğinin sonuna tek bir listeye dönüştürerek --filter/--include/--exclude seçeneklerini bir belge niteliğinde ekler. Tecrübeli bir kullanıcı bu bilgiyi --delete tarafından silinmesi istenenlerde bir değişiklik varsa, dışlama listesini değiştirmekte kullanabilir. Normal bir kullanıcı ise, bu ayrıntıları yoksayabilir ve betikli veriyi uygun --read-batch komutuyla çalıştıran kabuk betiğini kullanabilir.
rsync'deki özgün betik kipi "rsync+" üzerine inşa edilmiş olsa da en son sürümde yeni bir gerçeklenim kullanılmaktadır.
rsync kaynak dizini içinde bir sembolik bağ saptadığında üç temel davranış sözkonusudur:
rsync ayrıca, "güvenilir" ve güvensiz" sembolik bağları ayrımsayabilir. Bunun kullanıldığı yere bir örnek olarak, bir sanalyöre yansılaması yapılırken, yörenin genel bölümündeki /etc/passwd sembolik bağının aktarımda içerilmediğinden emin olunmak istenmesi gösterilebilir. --copy-unsafe-links seçeneğinin kullanımı sembolik bağların hedefindeki dosyaların kopyalanmasına sebep olacaktır. --safe-links seçeneğinin kullanımı ise güvensiz bağların atlanmasına sebep olacaktır.
Mutlak yol içeren (/ ile başlayan) sembolik bağlarla, bulunulan dizinden daha yukarıdaki dizinleri gösteren ".." bileşenlerini içeren sembolik bağlar güvensiz olarak kabul edilir.
rsync ara sıra biraz şifreli gibi görünen hata iletileri üretir. Bunlardan biri en kafa karıştıcı olan "protocol version mismatch -- is your shell clean?" (protokol sürümü yanlış -- kabuğunuz temiz mi?) iletisidir.
Bu ileti genellikle, rsync'in aktarım için kullandığı akım üzerinde istenmeyen veriler üreten uzak kabul oluşumları ya da başlatma betiklerinizden kaynaklanır. Bu soruna tanı koymanın yolu, uzak kabuğu şöyle çalıştırmaktır:
ssh uzakmakine /bin/true > out.dat
Bundan sonra oluşturulan out.dat dosyasına bakın. Herşey yolunda gitmişse dosya sıfır uzunlukta olacaktır. Eğer yukarıdaki hatayı alıyorsanız, dosya bazı veriler içerecektir. Dosyanın içeriğine bakarak bunları nelerin üretebileceğini bulmaya çalışın. Çok yapılan bir hata, etkileşimsiz oturum açmak için komutlar içeren yanlış yapılandırılmış kabuk betikleridir (.cshrc veya .profile gibi).
Süzme kalıplarında hata ayıklamak istiyorsanız, -vv seçeneğini belirtmeyi deneyin. rsync, bu ayrıntı seviyesinde dosyaların tek tek neden içerildiğini veya dışlandığını gösterecektir.
/etc/rsyncd.conf veya rsyncd.conf
Zamanlar unix time_t türünden değerler olarak aktarılır.
Dosyalar FAT dosya sistemine aktarılırken, rsync dosyalarda değişiklik yapmayabilir. --modify-window seçeneğinin açıklamasına bakınız.
Dosya izinleri, aygıtlar, vs. temel sayısal değerleriyle aktarılır.
Ayrıca, --delete seçeneğinin açıklamasına da bakınız.
Lütfen hataları raporlayınız! Hataları raporlamak için http://rsync.samba.org/ adresine bakınız.
rsync GNU kamu lisansı altında dağıtılmaktadır. Ayrıntılar için COPYING dosyasına bakınız.
Sanalyöremize http://rsync.samba.org/ adresinden erişebilirsiniz. Bu kılavuz sayfasında yanıtlarını bulamadığınız sorular için sanalyöremizde bir FAQ-O-Matic bulunmaktadır.
rsync'in ana ftp'si: ftp://rsync.samba.org/pub/rsync.
Bu uygulamayı istiyorsanız, sizden bunu duymak bizi mennun edecektir.
Bu uygulamada, Jean-loup Gailly ve Mark Adler tarafından yazılmış zlib sıkıştırma kütüphanesi kullanılmaktadır.
rsync'in yamanması, sınanması ve önerileri için Richard Brent, Brendan Mackay, Bill Waite, Stephen Rothwell ve David Bell'e teşekkür ederiz. Burada bahsetmeyi unuttuğum kişiler kalmışsa, affola.
Ayrıca, David Dykstra, Jos Backus, Sebastian Krahmer, Martin Pool, Wayne Davison ve J.W. Schultz'a özellikle teşekkür ederiz.
rsync ilk olarak Andrew Tridgell ve Paul Mackerras tarafından yazıldı. Daha sonra bir çok kişi tarafından geliştirildi.
Destek ve geliştirme için http://lists.samba.org adresindeki eposta listelerine bakınız.
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Mart 2005
28 Şubat 2005 |