Czy kiedykolwiek istnieje powód, aby używać scp zamiast rsync?

61

Czy istnieje powód, aby użyć scpzamiast rsync? Nie widzę powodu, by używać scptego ponownie, rsyncrobi wszystko, co scprobi, z większym bezpieczeństwem (może zachować dowiązania symboliczne itp.).

mikebloch
źródło
6
Krótka odpowiedź: Nie. Scp nigdy nie jest szkodliwy.
Shadur
2
@Shadur scp jest szkodliwy, ponieważ domyślnie zastępuje istniejące pliki docelowe. Podobnie rsync, ale przynajmniej pozwala ograniczyć możliwe obrażenia za pomocą -u.
Gilles
3
@Gilles Jak w przypadku każdego narzędzia, musisz zrozumieć, co robi i jak to zrobić, aby bezpiecznie z niego korzystać.
Alex Chamberlain
8
W tym kontekście regularne cpi rmbyłoby uważane za „szkodliwe” - a jeśli zdefiniujesz „szkodliwe” jako „może mnie zepsuć, jeśli zrobię coś głupiego”, rsyncnie będzie mniej szkodliwe.
Shadur
1
W systemach bez rsynczainstalowanego korzystania rsync(oczywiście) nawet nie jest możliwe.
Kusalananda

Odpowiedzi:

45

scp zapewnia metodę kopiowania plików z jednego komputera na komputer zdalny za pomocą bezpiecznego połączenia SSH.

rsync pozwala synchronizować zdalne foldery.

Są to różne programy i oba mają swoje zastosowania. scp jest zawsze bezpieczny, podczas gdy rsync musi podróżować przez SSH, aby być bezpiecznym.

Alex Chamberlain
źródło
9
Poza tym całkiem pewny jest, że rsync musi być zainstalowany na drugim końcu.
ckhan
3
@ckhan, nie, nie można skopiować bez zainstalowania niczego po drugiej stronie, będzie po prostu mniej wydajne.
mikebloch
2
Lubię prostotę scp.
Alex Chamberlain
2
@mikebloch Jak to robisz? Czy to nowa funkcja? Właśnie wypróbowałem to przy użyciu wersji 3.0.9. i narzekał, że nie można go znaleźć rsyncna pilocie.
Alexios
1
@mikebloch, musi być zainstalowany na serwerze, aby wykonać obliczenia sumy kontrolnej, co może zwiększyć obciążenie procesora na serwerze. Właśnie dlatego większość dużych witryn nie obsługuje go i dlatego zsynczostał stworzony jako alternatywa.
psusi
19

Jedną z głównych rzeczy (o której myślę, że nikt nie wspominał) jest to, że jeśli przesyłasz duże ilości danych lub plików, i jeśli transfer zostanie przerwany z jakiegokolwiek powodu, rsync odbierze go tam, gdzie go przerwał. Podczas gdy scp nie.

Używam scp, jeśli chcę przenieść jeden lub kilka plików lub katalogów. Idę do rsync po dane o rozmiarze wielu GB.

ravi
źródło
3
Warto dodać, że --partialflaga jest przydatna podczas przesyłania dużych plików. rsyncwybierze miejsce, w którym zostało przerwane w pliku, zamiast ponownie uruchomić ten plik.
Flup,
Jak wspomniano w @Flup, rsync nie pozostawia żadnych plików w drodze do wznowienia, chyba że użyjesz opcji --partial. Pliki te są domyślnie ukryte w katalogu docelowym. Możesz użyć --partial-dir, aby umieścić wszystkie te pliki w jednym katalogu.
Lester Cheung
Cóż, rsync -vP username@host:/path/to/file .też to zrobi. Zobacz tę odpowiedź na Stackoverflow
Devesh Saini
9

rsync : przenosi delty (używając swojego algorytmu transferu delta ) między:

  1. lokalne i zdalne hosty

scp : przenosi całe pliki między:

  1. lokalne i zdalne hosty
  2. zdalne i zdalne hosty

Podsumowanie: scpmoże przesyłać pliki między dwoma zdalnymi hostami, podczas gdy rsyncich nie obsługuje.

Devesh Saini
źródło
rsync może przesyłać pliki między dwoma zdalnymi hostami. W rzeczywistości rsync a host:bjest to równoważne z scp a host:b.
brandizzi
Tak napisałem, rsync może przenosić delty między lokalnymi i zdalnymi hostami, ale scp nie ogranicza się tylko do tego, może przenosić delty między dwoma zdalnymi hostami. @brandizzi
Devesh Saini
2

Użytkownik Chris z Webhosting Talk pisze:

rsyncporównuje pliki na każdym końcu i przesyła tylko zmienione części zmienionych plików. Kiedy przesyłasz pliki po raz pierwszy, zachowuje się bardzo podobnie scp, ale w przypadku drugiego transferu, w którym większość plików pozostaje niezmieniona, przesunie znacznie mniej danych niż scp. Jest to również wygodny sposób na zrestartowanie nieudanych transferów - wystarczy ponownie wydać to samo polecenie i przejdzie ono do miejsca, w którym zostało przerwane wcześniej, a scpzacznie się od nowa.

nkint
źródło
0

scpjest prostszy w użyciu, ponieważ wymaga mniej argumentów. Łapię myselv za pomocą scp zamiast rsyncgdy przesyłam tylko jeden plik. Prawdopodobnie jestem zbyt leniwy, aby zdefiniować alias do rsync ... ;-)

Nils
źródło
1
Hmmm, dlaczego tak jest? rsync a host:bjest równoważny z scp a host:btaką samą liczbą argumentów.
mikebloch
1
@mikebloch Dwie litery więcej do wpisania ... ;-) W przeszłości musiałem podać „-e ssh -a”, aby uzyskać właściwy wynik. Teraz, gdy „-e ssh” jest domyślny, może to być inna gra.
Nils,
0

Kredyty dla @tomrunia na https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids --delete --progress \
  -e "ssh -T -c [email protected] -o Compression=no -x" \
  [source_directory] user@hostname:[target_directory]/

Zwróć uwagę --delete, nie używaj go, jeśli chcesz przechowywać zbędne pliki w katalogach docelowych

Jorj
źródło