Czy ktoś może mi wyjaśnić to polecenie rsync?

11

Czy ktoś może mi powiedzieć, co to robi?

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

To usunąć bkp01i offbk2i wysyła dziennik offbkp01.log?

użytkownik276049
źródło
Nie umie czytać stron podręcznika. Co sprawia, że ​​myślisz, że on tutaj czyta odpowiedzi? XD
Twinkles
2
Komu potrzebne są strony podręcznika man, gdy masz wyjaśnienia.com ?
Tom

Odpowiedzi:

33

Aby podzielić to na części, istnieją dwie główne sekcje, a następnie podsumowanie i uwagi:

  • rsyncPolecenie:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • przekierowanie wyjścia wykonane przez powłokę uruchamiającą polecenie rsync:
    rsync-command > ~/offbkp01.log

rsync Komenda:

Polecenie podstawowe:

  • rsync - Zakładam, że nie wymaga to wyjaśnienia (ale dostarczy na żądanie).

Opcje poleceń:

  • -uva - Zestaw opcji pojedynczych znaków, (krótka, a następnie długa forma):

    • -u --update- Mówi rsync, że wszystkie modyfikacje powinny dotyczyć tylko plików w miejscu docelowym, które są w tym samym wieku (i różnych rozmiarach) lub starsze niż pliki w źródle. Oznacza to, że rsync powinien przekazywać tylko zmiany ze źródła, które zaktualizowałyby miejsce docelowe, ale nie powinien wprowadzać żadnych zmian, które spowodowałyby, że plik docelowy stałby się starszą wersją.

      Jest kilka wyjątków. Różnice w typie (np. Jeden to plik, drugi to katalog) spowoduje aktualizację bez względu na daty. Dowiązania symboliczne i inne pliki specjalne ignorują tę opcję. Co ważne, nie wpływa to na to, które pliki zostaną usunięte.

    • -v --verbose- Zwiększa ilość informacji drukowanych przez rsync podczas wykonywania. Bez tego rsync nic nie wydrukuje (prawie?). Po wybraniu tej opcji rsync powie ci, które pliki są przesyłane, i umieści podsumowanie na końcu. Więcej vzwiększa drukowane informacje, chociaż strona podręcznika mówi, że więcej niż dwa vs powinny być używane tylko podczas debugowania.
    • -a --archive- Jest to równoważne z kilkoma innymi opcjami ( -rlptgD) spakowanymi razem. Jak sugeruje długa nazwa, jest to szybki sposób na ustawienie wielu typowych opcji archiwizacji plików i katalogów. To będzie:
      • -r --recursive- Mówi rsync, aby rekurencyjnie kopiowało katalogi. Bez tej lub bardziej szczegółowej -d --dirsopcji rsync po prostu pominie wszystkie napotkane katalogi (i powie ci o tym w wynikach).
      • -l --links- Gdy źródłem jest dowiązanie symboliczne, utwórz dowiązanie symboliczne w miejscu docelowym. W zależności od innych opcji, dowiązania symboliczne mogą zostać pominięte lub przekształcone w pełną oddzielną kopię (tj. Prawdziwy katalog z zawartością (lub inną kopią pliku) zamiast dowiązania symbolicznego).
      • -p --perms - Ustawia uprawnienia plików docelowych na takie same jak pliki źródłowe.
      • -t --times- Ustawia czasy modyfikacji plików docelowych na takie same jak pliki źródłowe. Ponieważ utrzymywanie tych czasów w synchronizacji sprawia, że ​​algorytm rsync jest bardziej wydajny, zazwyczaj zawsze chcesz, aby był on używany, jawnie lub niejawnie.
      • -g --group- Ustawia atrybut grupy miejsca docelowego na taki sam jak źródło. Domyślnie kojarzy się z nazwy, ale w niektórych okolicznościach wróci do numeru identyfikacyjnego grupy. Jeśli odbierający rsync nie jest uruchamiany jako superużytkownik (lub udaje go --fake-super), można ustawić tylko grupy, których członkiem jest użytkownik, który wywołał rsync po stronie odbierającej . W przeciwnym razie grupa zostanie po prostu ustawiona na domyślną grupę tego samego użytkownika wspomnianego wcześniej.
      • -D- Odpowiednik opcji --devicesi --specialsrazem. Oni mają na myśli:
        • --devices- Pliki urządzeń znakowych i blokowych są przesyłane. Nie ma wpływu, jeśli odbierający rsync nie jest uruchamiany jako superużytkownik (lub udaje go --fake-super).
        • --specials - Przesyłane są pliki specjalne (takie jak gniazda) (inaczej nie byłyby).
  • --delete- Informuje rsync, aby usunął pliki znajdujące się w miejscu docelowym, ale nie w źródle. NIE ma na to wpływu powyższa opcja aktualizacji (w rzeczywistości, jak to możliwe, ponieważ większość systemów plików nie zachowa potrzebnych danych, aby zobaczyć, która akcja była nowsza?). Ta opcja działa na źródła po rozwinięciu symboli wieloznacznych / glob, więc katalog / * nie jest tym samym, co katalog /. Kilka ważnych uwag:
    • Jest to oczywiście niebezpieczne. Najprawdopodobniej powinieneś --dry-runnajpierw wypróbować tę opcję, która spowoduje udany transfer, który pozwala upewnić się, że nie zostaną wprowadzone żadne niezamierzone zmiany.
    • Jeśli wystąpią jakiekolwiek błędy We / Wy (wejścia / wyjścia) - to znaczy, jeśli coś pójdzie nie tak, przesyłając, odczytując lub zapisując zmiany - usunięcie zostanie zignorowane od tego momentu. Można to zastąpić --ignore-errorsopcją, chociaż prawdopodobnie nie chcesz tego zrobić.
    • Istnieje kilka odmian algorytmu usuwania, o których więcej można przeczytać na stronie podręcznika. Gdy odbierający rsync jest w wersji 3.0.0 lub nowszej (w momencie pisania) --delete-duringalgorytm jest używany. Jeśli odbiornik jest starszy, wówczas --delete-beforejest używany. Jeśli ważne jest, aby pliki zachowały pewną spójność w przypadku wystąpienia błędu (na przykład nie usuwając niczego, dopóki nie zostaną wprowadzone inne zmiany), należy użyć opcji bardziej szczegółowej niż domyślna.

Miejsca dowodzenia:

  • /srv/bkp01- Plik lub katalog źródłowy. Istnieją pewne szczegółowe zasady dotyczące tego, co oznacza, że ​​na końcu katalogu znajduje się / nie jest ukośnikiem, a jeśli inny katalog istnieje. Możesz zobaczyć sekcję UŻYTKOWANIE strony podręcznika dla szczegółów, ale tutaj brak ukośnika końcowego oznacza, że ​​ten katalog zostanie skopiowany do miejsca docelowego, a nie zawartość tego katalogu zostanie skopiowana do miejsca docelowego. To samo, jeśli jest to plik, a nie katalog.
  • /srv/offbk2/- Katalog docelowy. Zasadniczo będzie to zawsze ostatni element wymieniony w sekcji polecenia rsync, chyba że zostanie użyta opcja określająca go w innym miejscu polecenia.

Przekierowanie wyjścia powłoki:

Polecenia powłoki:

  • >- To przekierowuje standardowe wyjście (standardowe wyjście) z dowolnego pliku po lewej stronie do pliku po prawej, stając się jego zawartością i tworząc plik (jeśli to możliwe), jeśli jeszcze nie istnieje. Niektóre uwagi:
    • Możesz również przekierować stderr (standardowe wyjście błędu) do tego samego pliku , dodając 2>&1do samego końca powyższej komendy. Porządek jest ważny, więc bądź ostrożny uogólniając, gdzie to umieścić. Magiczna liczba 1odnosi się do stdout, 2odnosi się do stderr, &jest (zasadniczo) „adresem”, a pełny fragment polecenia oznacza „przekierowanie wyjścia stderr do strumienia stdout”.
    • Jeśli chcesz dołączyć do pliku dziennika zamiast go zastąpić, możesz użyć >>zamiast tego. Metoda przekierowania stderr w to samo miejsce pozostaje taka sama.
    • Możesz wysłać stdout i stderr do różnych miejsc za pomocą 1> stdout_file 2> stderr_file. Możesz również użyć >>zamiast >tego polecenia, aby to zrobić, dodając zamiast zastępując.

Zmienne powłoki / symbole specjalne:

  • ~ - Jest to skrót od katalogu domowego bieżącego użytkownika i stanowi część następnego bitu.

Lokalizacje na poziomie muszli:

  • ~/offbkp01.log- plik offbkp01.log w katalogu osobistym bieżącego użytkownika. W tym miejscu zostaną umieszczone dane wyjściowe polecenia rsync z powodu przekierowania za pomocą >.

Streszczenie:

Podsumowując, polecenie to:

  • Skopiuj wszystkie zwykłe pliki, katalogi, dowiązania symboliczne, pliki specjalne i pliki urządzeń
  • a także większość, jeśli nie wszystkie, ważne atrybuty pliku ,
  • z /srv/bkp01 ,
  • do /srv/offbk2/bkp01 ,
  • i usunie wszystko, /srv/offbk2/co nie jest w/srv/bkp01 , z następującymi warunkami:

    • Jeśli zwykły plik, katalog lub dowiązanie (?) Ma czas modyfikacji na /srv/offbk2/ który jest nowszy niż jego modyfikacji czasu /srv/bkp01, to nie będą aktualizowane , jeśli oba elementy są jeszcze tego samego typu (zwykły plik, katalog lub dowiązanie (? )).
  • Dodatkowo rsync wydrukuje pewne informacje o tym, co robi (w szczególności, które pliki są przesyłane, oraz końcowe podsumowanie ), które powłoka zapisze w pliku ~/offbkp01.log . Ten plik dziennika zostanie utworzony od nowa, jeśli jeszcze nie istnieje, i zostanie zastąpiony, jeśli już istnieje.


NB: --fake-superjest opcją używaną do spowodowania, aby rsync symulował działania superużytkownika. Robi to za pomocą rozszerzonych atrybutów plików do przechowywania atrybutów, których nie można ustawić bez większych uprawnień. Rzeczywista wersja każdego atrybutu jest ustawiona na cokolwiek sensownego, biorąc pod uwagę dostępne opcje i uprawnienia. Chociaż sprawia to, że wygodne jest tworzenie kopii zapasowych, nawet jeśli nie masz uprawnień superużytkownika, należy również pamiętać, że może to stwarzać ryzyko bezpieczeństwa większe niż użycie rsync w ogóle, ponieważ rzeczywiste atrybuty bezpieczeństwa mogą nie być ustawione właściwie, mimo że informacje na ich temat zostały zapisane.


Źródło: dużo czasu pracując z rsync i czytając jego stronę podręcznika .

Matthew Wirth
źródło
8
To jeden imponujący pierwszy post. Mam nadzieję, że zostaniesz!
terdon
Popieram @terdon .. Cholera! on się pali. Bądź na bieżąco z dobrym kolegą z pracy. To rzeczywiście imponująca odpowiedź.
AzkerM
Odpowiedź wydaje się być jak „Sherlock Holmes”. Uwielbiam twój styl objaśniania.
Rahul Patil
9

Z instrukcji:

--kasować

To każe rsync usunąć niepotrzebne pliki ze strony odbierającej (te, które nie są po stronie wysyłającej), ale tylko dla synchronizowanych katalogów. Musisz wysłać rsync, aby wysłać cały katalog (np. „Katalog” lub „katalog /”) bez użycia znaku zastępczego dla zawartości katalogu (np. „Katalog / *”), ponieważ znak zastępczy jest rozszerzany przez powłokę, a zatem rsync otrzymuje żądanie do przesyłania pojedynczych plików, a nie katalogu macierzystego plików. Pliki wykluczone z transferu są również wykluczone z usunięcia, chyba że użyjesz opcji --delete-wykluczone lub zaznaczysz reguły jako pasujące tylko po stronie wysyłającej (zobacz modyfikatory włączania / wyłączania w sekcji ZASADY FILTRA).

Więc usunie pliki z miejsca docelowego, które nie są częścią oryginalnego katalogu, jeśli nie użyłeś symboli wieloznacznych.

Katalog źródłowy:

1.txt
2.txt
3.txt

Katalog docelowy:

4.txt

4.txt zniknie po tym, jak rsync i 1.txt, 2.txt i 3.txt będą w miejscu docelowym.


Jeśli chodzi o inne rzeczy:

uva
  • zaktualizuj pliki
  • verbose: echo wyniki do terminala (tj. przekieruj go do pliku dziennika, więc tak do ostatniego pytania)
  • archiwum: tryb archiwizacji; równa się -rlptgoD (bez -H, -A, -X)
Rinzwind
źródło
Źródło:man rsync
Sammitch,
3

Nie, usuwa tylko niepotrzebne pliki z bkp01katalogu.

Również:

  • -u, --update- pomiń pliki, które są nowsze w odbiorniku
  • -v, --verbose- zwiększyć gadatliwość
  • -a, --archive- tryb archiwizacji; równa się -rlptgoD (bez -H, -A, -X)

Dane wyjściowe rsync -uva --delete /srv/bkp01 /srv/offbk2/polecenia są wysyłane do ~/offbkp01.logpliku za pomocą operatora przekierowania ( >) zamiast tego do wydrukowania w twoim terminalu. Jeśli plik nie istnieje, zostanie utworzony. Jeśli plik istnieje, stara zawartość zostanie usunięta.

Zobacz man rsyncwięcej informacji.

Radu Rădeanu
źródło
3
Nie usuwa niczego z bkp01. Po prostu usuwa zbędne pliki - tj. Te, które nie istnieją w źródle - z miejsca docelowego.
Matt Nordhoff
Żadne pliki nie zostaną usunięte z bkp01.
Xavier J
1
rsync 

Zdalne kopiowanie plików - Synchronizuj drzewa plików na dyskach lokalnych, katalogach lub w sieci.

-u update 

-v verbose

-a archive


--delete --> delete

Tutaj usunie pliki wewnątrz offbk2 .

Następnie wynik (sukces lub nie) zostanie przekierowany do tego pliku dziennika.

nux
źródło
Żadne pliki nie zostaną usunięte z bkp01.
Xavier J