Có bao giờ một lý do để sử dụng scp thay vì rsync?


62

Có một lý do để sử dụng scpthay vì rsync? Tôi có thể thấy không có lý do gì để sử dụng scpmột lần nữa, rsynclàm mọi thứ mà scpvới sự an toàn hơn (có thể bảo tồn các liên kết tượng trưng, ​​v.v.).


6
Câu trả lời ngắn gọn: Số scp không bao giờ có hại.
Shadur

2
@Shadur scp có hại ở chỗ nó ghi đè lên các tệp mục tiêu hiện có theo mặc định. Đó là rsync, nhưng ít nhất nó cho phép hạn chế thiệt hại có thể xảy ra với -u.
Gilles 'SO- ngừng trở nên xấu xa'

3
@Gilles Như với bất kỳ công cụ nào, bạn phải hiểu những gì nó làm và làm thế nào để sử dụng nó một cách an toàn.
Alex Chamberlain

8
Trong bối cảnh đó, thường xuyên cprmsẽ được coi là "có hại" - và nếu bạn định nghĩa "có hại" là "có thể làm tôi khó chịu nếu tôi làm điều gì đó ngu ngốc", thì rsyncsẽ không có hại gì.
Shadur

1
Trên các hệ thống không rsyncđược cài đặt, sử dụng rsynclà (rõ ràng) thậm chí không thể.
Kusalananda

Câu trả lời:


46

scp cung cấp một phương thức giống như cp để sao chép các tệp từ một máy sang một máy từ xa qua kết nối SSH an toàn.

rsync cho phép bạn đồng bộ hóa các thư mục từ xa.

Chúng là các chương trình khác nhau và cả hai đều có công dụng của chúng. scp luôn được bảo mật, trong khi rsync phải truyền qua SSH để được bảo mật.


9
Ngoài ra, khá chắc chắn rsync phải được cài đặt ở đầu bên kia.
ckhan

3
@ckhan, không có nó có thể sao chép mà không có bất cứ thứ gì được cài đặt ở phía bên kia, nó sẽ chỉ kém hiệu quả hơn.
mikebloch

2
Tôi thích sự đơn giản của scp.
Alex Chamberlain

2
@mikebloch Làm thế nào để bạn làm điều đó? Đây có phải là một tính năng mới? Chỉ cần thử điều này bằng phiên bản 3.0.9. và nó phàn nàn nó không thể tìm thấy rsynctrên điều khiển từ xa.
Alexios

1
@mikebloch, nó phải được cài đặt trên máy chủ để thực hiện tính toán tổng kiểm tra, có thể thêm rất nhiều tải cpu cho máy chủ. Đây là lý do tại sao hầu hết các trang web lớn không hỗ trợ nó và tại sao zsyncđược tạo như một giải pháp thay thế.
psusi

19

Một trong những điều chính (mà tôi nghĩ không ai nhắc đến) là nếu bạn đang truyền một lượng lớn dữ liệu hoặc tệp và nếu việc truyền bị ngắt kết nối trước khi hoàn thành vì bất kỳ lý do gì, rsync sẽ chọn nó ở nơi mà nó dừng lại. Trong khi đó scp không.

Tôi sử dụng scp nếu tôi muốn chuyển một hoặc vài tệp hoặc thư mục. Tôi đi đến rsync cho dữ liệu kích thước nhiều GB.


3
Có thể đáng để thêm rằng --partialcờ rất hữu ích khi chuyển các tệp lớn. rsyncsẽ chọn nơi nó rời khỏi tệp chứ không phải bắt đầu lại tệp đó.
Flup

Như @Flup đã đề cập, rsync sẽ không để lại bất kỳ tập tin chuyển tiếp nào để bạn tiếp tục trừ khi bạn sử dụng tùy chọn --partial. Các tệp này theo mặc định được ẩn trong thư mục đích. Bạn có thể sử dụng --partial-dir để đặt tất cả các tệp này vào một thư mục.
Lester Cheung

Vâng, rsync -vP username@host:/path/to/file .sẽ làm điều này quá. Xem câu trả lời này trên Stackoverflow
Devesh Saini

9

rsync : Chuyển deltas (sử dụng Thuật toán chuyển Delta ) giữa:

  1. máy chủ lưu trữ cục bộtừ xa

scp : Chuyển toàn bộ tập tin giữa:

  1. máy chủ lưu trữ cục bộtừ xa
  2. từ xahẻo lánh host

Tóm tắt: scpcó thể chuyển tệp giữa hai máy chủ từ xa trong khi rsynckhông hỗ trợ.


rsync có thể chuyển tập tin giữa hai máy chủ từ xa. Trong thực tế, rsync a host:blà tương đương với scp a host:b.
brandizzi

Đó là những gì tôi đã viết, rsync có thể chuyển các vùng đồng bằng giữa các máy chủ cục bộ và máy chủ từ xa nhưng scp không bị giới hạn bởi điều đó, nó có thể chuyển các vùng đồng bằng giữa hai máy chủ từ xa. @brandizzi
Devesh Saini

2

Người dùng Chris tại Webhosting Talk viết:

rsyncso sánh các tệp ở mỗi đầu và chỉ chuyển các phần đã thay đổi của các tệp đã thay đổi. Khi bạn truyền tệp lần đầu tiên, nó hoạt động khá giống scp, nhưng đối với lần chuyển thứ hai, trong đó hầu hết các tệp không thay đổi, nó sẽ đẩy dữ liệu ít hơn rất nhiều so với scp. Đây cũng là một cách thuận tiện để khởi động lại các lần chuyển thất bại - bạn chỉ cần phát hành lại cùng một lệnh và nó sẽ chọn nơi mà nó rời khỏi thời gian trước đó, trong khi đó scpsẽ bắt đầu lại từ đầu.


0

scpsử dụng đơn giản hơn vì nó cần ít đối số hơn. Tôi bắt myselv bằng scp thay vì rsyncnếu tôi chỉ chuyển một tập tin duy nhất. Có lẽ tôi chỉ lười biếng định nghĩa bí danh cho rsync ... ;-)


1
Hmmm, tại sao nó như vậy? rsync a host:btương đương với scp a host:b, cùng số lượng đối số.
mikebloch

1
@mikebloch Hai chữ cái nữa để gõ ... ;-) Trước đây tôi phải cung cấp "-e ssh -a" để có kết quả chính xác. Bây giờ "-e ssh" được mặc định, đây có thể là một trò chơi khác.
Nils

0

Tín dụng cho @tomrunia tại https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids --delete --progress \
  -e "ssh -T -c aes128-gcm@openssh.com -o Compression=no -x" \
  [source_directory] user@hostname:[target_directory]/

Hãy chú ý --delete, đừng sử dụng nó nếu bạn muốn giữ các tệp không liên quan trong các dir dir

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.