Birisi bu rsync komutunu bana açıklayabilir mi?


11

Biri bana bunun ne yaptığını söyleyebilir mi?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

O silmek mu bkp01ve offbk2ve bir günlük gönderir offbkp01.log?


El kitabını okuyamıyor. Sizi buradaki cevapları okuduğunu düşündüren şey nedir? XD
Twinkles

2
Eğer varken kim adam sayfaları ihtiyacı explainshell.com/... ?!
Tom

Yanıtlar:


33

Bunu parçalara ayırmak için iki ana bölüm, ardından bir özet ve notlar var:

  • rsynckomut:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • rsync komutunu çalıştıran kabuk tarafından yapılan yeniden yönlendirme:
    rsync-command > ~/offbkp01.log

rsync komut:

Temel komut:

  • rsync - Bunun bir açıklama gerektirmediğini varsayıyorum (ancak istenirse sağlayacaktır).

Komut seçenekleri:

  • -uva - Bir dizi tek karakter seçeneği, (kısa sonra uzun form gösterilir):

    • -u --update- rsync'e tüm değişikliklerin yalnızca hedefte kaynakta bulunanlarla aynı yaşta (ve farklı boyutlarda) veya daha eski dosyalara uygulanması gerektiğini bildirir. Yani, rsync yalnızca hedefi güncelleyecek kaynaktan gelen değişiklikleri iletmelidir, ancak hedef dosyanın eski bir sürüm olmasını sağlayacak herhangi bir değişiklik yapmamalıdır.

      Bazı istisnalar var. Türdeki farklılıklar (örn. Biri dosya, diğeri dizin) tarihlerden bağımsız olarak güncellemeye neden olur. Simge bağlantıları ve diğer özel dosyalar bu seçeneği yok sayar. Ve daha da önemlisi, bu hangi dosyaların silineceğini etkilemez.

    • -v --verbose- rsync yürütülürken yazdırdığı bilgi miktarını artırır. Bu olmadan, rsync hiçbir şey basmaz (neredeyse?). Bu seçenek olduğu gibi, rsync size hangi dosyaların aktarıldığını söyler ve sonuna bir özet ekler. Daha fazla vs yazdırılan bilgileri artırır, ancak kılavuz sayfasında ikiden fazla vs yalnızca hata ayıklama sırasında kullanılmalıdır.
    • -a --archive- Bu, -rlptgDbirlikte paketlenen diğer birkaç seçeneğe ( ) eşdeğerdir . Uzun adından da anlaşılacağı gibi, dosyaları ve dizinleri arşivlemek için birçok yaygın seçenek belirlemenin hızlı bir yoludur. Olacak:
      • -r --recursive- rsync'e dizinleri özyineli olarak kopyalamasını söyler. Bu veya daha özel bir -d --dirsseçenek olmadan , rsync karşılaştığı tüm dizinleri atlar (ve çıktısında size söyler).
      • -l --links- Kaynak bir sembolik bağlantı olduğunda, hedefte bir sembolik bağlantı oluşturun. Diğer seçeneklere bağlı olarak, sembolik bağlantılar atlanabilir veya tam bir ayrı kopyaya (yani, sembolik bağlantı yerine içeriklerin (veya dosyanın başka bir kopyasının) bulunduğu gerçek bir dizine) dönüştürülebilir.
      • -p --perms - Hedef dosyaların izinlerini kaynak dosyalarla aynı şekilde ayarlar.
      • -t --times- Hedef dosyaların değişiklik zamanlarını kaynak dosyalarla aynı şekilde ayarlar. Bu zamanları senkronize tutmak rsync algoritmasını daha verimli hale getirdiğinden, genellikle her zaman açık veya dolaylı olarak kullanılmasını istersiniz.
      • -g --group- Hedefin grup niteliğini kaynak ile aynı olarak ayarlar. Varsayılan olarak ada göre ilişkilendirilir, ancak bazı durumlarda grup kimlik numarasına geri döner. Eğer alıcı rsync süper kullanıcı (veya onu taklit olarak çalıştırmak değildir --fake-super), rsync çağrılan kullanıcı yalnızca gruplar o alıcı tarafında olabilir kümesinin bir üyesidir. Aksi takdirde, grup daha önce belirtilen aynı kullanıcının varsayılan grubuna ayarlanır.
      • -D- Seçeneklere eşdeğer --devicesve --specialsbirlikte. Demek istediler:
        • --devices- Karakter ve blok cihaz dosyaları aktarılır. Alıcı rsync'in süper kullanıcı olarak çalıştırılmaması (veya taklit edilmesi --fake-super) durumunda etkisi yoktur .
        • --specials - Özel dosyalar (soketler gibi) aktarılır (aksi takdirde aktarılmazlar).
  • --delete- rsync'e, hedefte olan ancak kaynakta olmayan dosyaları silmesini söyler. Bu, yukarıda ayarlanan güncelleme seçeneğinden ETKİLENMEZ (aslında, çoğu dosya sistemi hangi eylemin daha yeni olduğunu görmek için gerekli verileri tutmayacağından nasıl olabilir?). Bu seçenek, joker karakter / glob genişletmesinden sonra kaynaklara etki eder , bu nedenle dir / *, dir / ile aynı değildir. Bazı önemli notlar:
    • Bu elbette tehlikelidir. Muhtemelen --dry-runilk seçenekle denemelisiniz , bu da istenmeyen değişikliklerin yapılmadığından emin olmanızı sağlayan bir taklit transferi yapar.
    • Herhangi bir G / Ç (giriş / çıkış) hatası varsa - yani, aktarım, okuma veya yazma değişiklikleri yanlış giderse, silme bu noktadan itibaren yok sayılır. Bu --ignore-errorsseçenekle geçersiz kılınabilir , ancak muhtemelen bunu yapmak istemezsiniz / istemezsiniz.
    • Silme algoritmasında, man sayfasında daha fazla okuyabileceğiniz birkaç varyasyon vardır. Alıcı rsync sürüm 3.0.0 veya daha yeni olduğunda (bu yazının yazıldığı tarih itibariyle) --delete-duringalgoritma kullanılır. Alıcı daha eskiyse --delete-beforekullanılır. Bir hata oluşursa (diğer tüm değişiklikler yapılana kadar hiçbir şeyi silmemek gibi) dosyaların belirli bir tutarlılığı sürdürmesi önemliyse, varsayılandan daha özel bir seçenek kullanmalısınız.

Komut konumları:

  • /srv/bkp01- Kaynak dosya veya dizin. Dizinin sonunda eğik çizgi olup olmadığı ve diğer dizinin mevcut olup olmadığı hakkında bazı ayrıntılı kurallar vardır. Görebilirsiniz KULLANIM detayları için adam sayfasının bölümünü, ama burada bir sondaki eğik çizgi olmaması bunun anlamı dizin bu dizinin yerine, hedefe kopyalanır içeriği hedefe içine kopyalanan. Bu bir dizin yerine bir dosya ise aynıdır.
  • /srv/offbk2/- Hedef dizin. Genel olarak, komutta başka bir yerde belirtmek için bir seçenek kullanılmazsa, bu her zaman rsync komut bölümünde listelenen son öğe olacaktır.

Shell'in çıktı yönlendirmesi:

Kabuk komutları:

  • >- Bu, stdout'u (standart çıktı) soldaki dosyadan sağdaki dosyaya yönlendirir, içeriği haline gelir ve zaten yoksa dosyayı oluşturur (mümkünse). Bazı notlar:
    • Ayrıca şunları da yapabilirsiniz aynı dosyaya yönlendirme Stderr (standart hata çıkışı) ekleyerek 2>&1yukarıda komuta sonuna kadar. Düzen önemlidir, bu yüzden nereye koyacağınızı genelleştirmeye dikkat edin. Sihirli sayı 1stdout'u, 2stderr'i ifade eder &, (esasen) "adresi" dir ve tam komut snippet'i "stderr çıkışını stdout akışına yönlendirir" anlamına gelir.
    • Günlük dosyasına değiştirmek yerine eklemek istiyorsanız, >>bunun yerine kullanabilirsiniz . Stderr'ı aynı yere yönlendirme yöntemi aynı kalır.
    • Stdout ve stderr'i kullanarak farklı yerlere gönderebilirsiniz 1> stdout_file 2> stderr_file. Değiştirmek yerine ekleyerek bunu yapmak için bu komutun >>yerine de kullanabilirsiniz >.

Kabuk değişkenleri / özel semboller:

  • ~ - Bu, geçerli kullanıcının giriş dizini için kestirimdir ve sonraki bitin bir parçasını oluşturur.

Kabuk düzeyinde yerler:

  • ~/offbkp01.log- geçerli kullanıcının giriş dizinindeki offbkp01.log dosyası. Burada yeniden yönlendirme nedeniyle rsync komutunun çıktısı verilecektir >.

Özet:

Özetle, bu komut:

  • Kopya tüm düzenli dosyaları, dizinleri, sembolik, özel dosyalar ve cihaz dosyaları
  • önemli dosya özniteliklerinin tümü olmasa da çoğunun yanı sıra ,
  • itibaren /srv/bkp01 ,
  • için /srv/offbk2/bkp01 ,
  • ve içinde /srv/offbk2/olmayan her şeyi/srv/bkp01 aşağıdaki koşullarla siler :

    • Eğer bir normal bir dosya, dizin veya sembolik link (?) Bir sahip değiştirme zamanı üzerinde /srv/offbk2/ o daha yeni üzerindeki modifikasyon zamandan daha /srv/bkp01, güncellenmesi olmayacak , eğer her iki ürün hala aynı tip ((düzenli dosya, dizin veya symlink? )).
  • Buna ek olarak, rsync kabuğun dosyaya yazacağı (özellikle hangi dosyaların aktarıldığını ve son bir özeti ) hakkında bazı bilgiler yazdıracaktır . Bu günlük dosyası zaten yoksa yeniden oluşturulur ve zaten varsa üzerine yazılır. ~/offbkp01.log


Not: --fake-superrsync'in süper kullanıcı etkinliklerini simüle etmesine neden olan bir seçenektir. Bunu, daha büyük ayrıcalıklara sahip olmadan ayarlayamadığı öznitelikleri saklamak için dosyaların genişletilmiş özniteliklerini kullanarak yapar. Her özelliğin gerçek sürümü, seçenekler ve ayrıcalıklar göz önüne alındığında anlamlı olan her şeye ayarlanır. Bu, süper kullanıcı ayrıcalıklarına sahip olmasanız bile bazı yedeklemeler yapmayı kolaylaştırsa da, gerçek güvenlik öznitelikleri ayarlanamayabileceğinden, genel olarak rsync kullanımından daha büyük bir güvenlik riski oluşturabileceğini de unutmamak gerekir. onlar hakkındaki bilgiler yedeklenmiş olsa bile


Kaynak: rsync ile çalışmak ve kılavuz sayfasını okumak için çok zaman .


8
Bu etkileyici bir ilk gönderi. Umarım etrafta dolaşırsın!
terdon

Ben ikinci terim .. Lanet olsun! yanıyor. Sıkı çalışmaya devam dostum. Bu gerçekten etkileyici bir cevap.
AzkerM

Cevap "sherlock holmes" gibi görünüyor, açıklama stilinizi seviyorum ..
Rahul Patil

9

Kılavuzdan:

--delete

Bu, rsync'e alıcı dosyaları (gönderen tarafta olmayanlar), ancak yalnızca senkronize edilen dizinler için yabancı dosyaları silmesini söyler. Joker karakter kabuk tarafından genişletildiğinden rsync bir istek aldığından, dizinin içeriğini (örneğin "dir / *") joker karakter kullanmadan tüm dizini (örneğin "dir" veya "dir /") göndermek için rsync'i kullanmalısınız. dosyaların üst dizinini değil, tek tek dosyaları aktarmak için. --Delete-excluded seçeneğini kullanmazsanız veya kuralları yalnızca gönderen tarafta eşleşiyor olarak işaretlemezseniz, aktarım dışında bırakılan dosyalar da silinemez. (FİLTRE KURALLARI bölümüne ekleme / hariç tutma değiştiricilerine bakın).

Dolayısıyla, joker karakterler kullanmadıysanız, hedef dizinin orijinal parçası olmayan dosyaları siler.

Kaynak dizin:

1.txt
2.txt
3.txt

Hedef dizini:

4.txt

4. txt rsync'den sonra gider ve 1.txt, 2.txt ve 3.txt hedefte olur.


Diğer şeylerle ilgili olarak:

uva
  • dosyaları güncelle
  • ayrıntılı: yankı sonuçlarını terminale aktarır (yani, günlük dosyanıza yönlendirerek son soruya evet)
  • arşiv: arşiv modu; -rlptgoD'ye eşittir (-H, -A, -X yok)


3

Hayır, yalnızca yabancı dosyaları dizinden siler bkp01.

Ayrıca:

  • -u, --update- alıcıda daha yeni olan dosyaları atla
  • -v, --verbose- ayrıntı düzeyini artırın
  • -a, --archive- arşiv modu; -rlptgoD'ye eşittir (-H, -A, -X yok)

rsync -uva --delete /srv/bkp01 /srv/offbk2/Komutun çıktısı, terminalinize yazdırılmak yerine yeniden yönlendirme operatörü ( )~/offbkp01.log kullanılarak dosyaya gönderilir . Dosya mevcut değilse oluşturulur. Dosya varsa, eski içerik silinir.>

Daha man rsyncfazla bilgi için bakınız .


3
Hiçbir şey silmez bkp01. Sadece yabancı dosyaları (yani kaynakta bulunmayan dosyaları) hedeften siler.
Matt Nordhoff

Bkp01'den hiçbir dosya silinmeyecek.
Xavier J

1
rsync 

Uzak dosya kopyalama - Dosya ağaçlarını yerel diskler, dizinler veya ağ üzerinde eşitleyin.

-u update 

-v verbose

-a archive


--delete --> delete

Burada offbk2 içindeki dosyaları siler .

Daha sonra sonucun çıktısı (başarı ya da değil) bu günlük dosyasına yönlendirilir.


Bkp01'den hiçbir dosya silinmeyecek.
Xavier J
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.