rsync - `scp` 与 `rsync` 有什么不同?

标签 rsync scp

一篇关于 setting up Ghost blogging 的文章说使用 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

如果 scp 可以双向复制,为什么要使用 rsync 命令? scprsync 有何不同?

最佳答案

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

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

rsync 还可以在本地或通过网络复制文件。但它采用了特殊的delta transfer algorithm以及一些使操作速度更快的优化。考虑一下这个电话。

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

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

  • rsync会将数据写入临时文件T,然后将目标文件B替换为T 使更新对于可能使用 B 的进程来说看起来是“原子的”。

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

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

对于周期性任务,例如 cron 作业,请使用 rsync。如前所述,在多次调用时,它将利用已传输的数据,执行速度非常快并节省资源。它是一个通过网络保持两个目录同步的优秀工具。

此外,在处理大文件时,请使用带有 -P 选项的 rsync。如果传输中断,您可以通过重新发出命令从停止处恢复传输。请参阅 Sid Kshatriya 的 answer .

最后,请注意 rsync:// 该协议(protocol)与普通 HTTP 类似:未加密且没有完整性检查。请务必始终通过 SSH 使用 rsync(如上面问题中的示例),而不是通过 rsync 协议(protocol),除非您真的知道自己在做什么。 scp 将始终使用 SSH 作为底层传输机制,它具有完整性和 secret 性保证,因此这是两个实用程序之间的另一个区别。

关于rsync - `scp` 与 `rsync` 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20244585/

相关文章:

eclipse - 使用 Rsync 在每次保存时上传文件

.net - Windows/Linux 之间的一致同步在传输过程中随机挂起

rsync - 如何使用rsync --list-only源列出该目录中的所有文件?

linux - 同时对同一目的地进行 rsync

linux - 目标服务器上的 rsync 命令位于与源服务器上不同的目录中。如何使用rsync?

c# - 在 C# 中使用 pscp 通过 post 请求在 Windows 和 Linux 之间传输文件

linux - 从远程服务器并行复制小文件

linux - scp和ssh的使用

unix - 将远程文件scp转换为hadoop,而不将其复制到边缘节点

c++ - 用于 ssh 和 scp 的面向对象的 C++ 库