scp和rsync有何不同?


241

有关设置Ghost博客的文章说,该文章可用于scp从本地计算机复制到远程服务器:

scp -r ghost-0.3 root@*your-server-ip*:~/

但是,Railscast 339:Chef Solo Basics使用scp相反的方向(从远程服务器到本地计算机)进行复制:

scp -r root@178.xxx.xxx.xxx:/var/chef .

在同一Railscast中,当作者要将文件复制到远程服务器时(与第一个示例相同的方向),他使用rsync

rsync -r . root@178.xxx.xxx.xxx:/var/chef

rsync如果scp要双向复制,为什么要使用该命令?如何scp从不同rsync


除了更简单和始终加密外,没有人指出scp可以比“ rsync -aA”做得更好。我更喜欢“ rsync -aAX --delete source dest”。签出bsync进行双向同步。
Tomachi

Answers:


345

这些工具之间的主要区别在于它们如何复制文件。

scp基本上是读取源文件并将其写入目标。它可以在本地或通过网络执行纯线性复制。

rsync还可以在本地或通过网络复制文件。但是它采用了特殊的增量传输算法和一些优化措施,以使操作更快。考虑通话。

rsync A host:B
  • rsync将检查文件AB的大小和修改时间戳,如果它们匹配,则跳过任何进一步的处理。

  • 如果目标文件B已经存在,则增量传输算法将确保仅通过有线发送AB之间差异。

  • rsync将数据写入到一个临时文件牛逼,然后替换目标文件牛逼,使更新一下“原子”,以所有可能使用过程中

它们之间的另一个区别涉及调用。rsync有大量的命令行选项,允许用户微调其行为。它支持复杂的过滤器规则,以批处理模式,守护程序模式等运行,scp只有几个开关。

总之,scp用于您的日常任务。您偶尔在交互式shell上键入的命令。它使用起来更简单,在这种情况下,rsync优化不会有太大帮助。

对于诸如cron工作之类的重复性任务,请使用rsync。如前所述,在多次调用中,它将利用已经传输的数据,非常快速地执行并节省资源。这是使两个目录通过网络保持同步的出色工具。

另外,在处理大文件时,请rsync-P选项一起使用。如果传输中断,则可以通过重新发出命令在停止的地方继续传输。请参阅Sid Kshatriya的答案


14
您说要在日常任务中使用scp。根据您的解释和操作,看来这两个工具在没有选项的情况下的界​​面是相同的。如果rsync具有更好的实现,并且接口相同,那么为什么不总是使用rsync?
Alex

5
即使没有选项,它们的界面也不一样。Rsync对source参数的末尾斜杠有特殊的解释(将目录本身与其内容进行同步)。我不确定它可能还有其他陷阱。
拉法2014年

2
另外,我猜想scp更可能在类似Unix的系统上使用,因此您可以时不时地避免令人讨厌的“找不到命令”。
拉法2014年

2
@ erikb85 rsync具有-P标志,该标志将显示进度条并允许从部分完成的传输中恢复。digitalocean.com/community/tutorials/...

1
scprsyncrsync -ascp -rp保留修改时间和权限之间的另一个接口区别。
拉法

71

rysnc在缓慢且不可靠的连接上运行可能很有用。因此,如果您的下载在大文件中间中断,则rysnc将能够从再次调用时停止的地方继续。

rsync -vP username@host:/path/to/file .

-P选项保留部分下载的文件,并显示进度。

和往常一样检查 man rsync


32

不同参数的黑白scp和rsync

1.性能超过延迟

  • scp :scp的优化和速度相对较少

  • rsync :rsync相对更优化和更快

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2.中断处理

  • scp :scp命令行工具无法从丢失的网络连接恢复中止的下载

  • rsync:如果上述rsync会话本身被中断,则可以通过键入相同的命令将其恢复任意多次。rsync将自动从中断处重新开始传输。

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3.命令示例

scp

$ scp source_file_path destination_file_path

同步

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

-P选项与相同--partial --progress,从而允许rsync处理部分下载的文件。该--rsh=ssh选项告诉rsync将ssh用作远程shell。

4.安全性:

scp更安全。您必须使用rsync --rsh=ssh它来使它像scp一样安全。

man文档了解更多:

绩效图


感谢您提供这个新答案,特别是对于安全性部分。
zhihong

在许多系统上,默认情况下使用ssh。serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr19年

2
关于安全性,来自openSSH 8.0发行说明The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
下行

6

rsyncover的主要功能scp(除了delta算法和加密(如果使用w / ssh的话)之外)还可以自动验证传输的文件是否已正确传输。Scp不会这样做,这有时会在传输较大文件时导致损坏。因此,通常rsync是带有保证的副本

Centos的联机帮助页在--checksum选项说明的结尾提到了这一点:

请注意,rsync始终通过检查在传输文件时生成的整个文件校验和来验证接收方是否正确重建了每个传输文件,但是自动传输后验证与该选项的之前无关-传输“该文件是否需要更新?” 检查。


5

对我来说,scp总是使用ssh(安全外壳)rsync进行加密,而不必进行加密。更具体地说,rsync它本身不执行任何加密。它仍然能够使用其他机制(例如ssh)执行加密。

除安全性外,加密还对传输速度以及CPU开销产生重大影响。(我的经验是,rsync这样做的速度可能大大快于scp。)

查看此帖子以了解何时启用rsync了加密。


1

scp最适合一个文件。
tar&压缩的组合用于较小的数据集,例如具有较小资源的源代码树(:图像,sqlite )。


然而,当你开始处理更大体积的说:

  • 媒体文件夹(40 GB)
  • 数据库备份(28 GB)
  • mp3库(100 GB)

此时,构建一个zip / tar.gz文件以通过scp传输到托管服务器的物理限制变得不切实际。

作为练习,您可以进行一些体操训练,例如将结果传递tar到管道中ssh并将结果重定向到远程文件中。(省去了构建交换或临时克隆(又名 zip或tar.gz)的需要)

但是

rsync简化了此过程,使您可以在不占用任何额外磁盘空间的情况下传输数据

还有

连续(cron?)更新使用的更改最少,而完整克隆的副本则随着时间的推移加快了大数据迁移的速度。

tl; dr
scp == 小规模(有空间在同一驱动器上构建压缩文件)
rsync== 大规模(有必要备份大数据且没有剩余空间)


-1

最好在实际情况下进行思考。在我们的团队中,我们rsync -aP用来替换群集中的坏Cassandra主机。我们无法使用scp做到这一点(速度慢且没有进度保留)。


没有真正带来其他答案中未提及的任何内容。另外,我们甚至不应该回答题外的问题。
Dan Cornilescu '16

1
@DanCornilescu在一个真实的场景中描述了一个用例,这使得其他人很容易理解它们之间的区别。我没有看到其他类似的答案
del bao

2
请参阅Sid和Rafa的答案中的-P解释以及与速度/速度有关的注释。
Dan Cornilescu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.