一篇关于 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
命令? scp
与 rsync
有何不同?
最佳答案
这些工具之间的主要区别在于它们复制文件的方式。
scp
基本上读取源文件并将其写入目标。它在本地或通过网络执行简单的线性复制。
rsync
还可以在本地或通过网络复制文件。但它采用了特殊的delta transfer algorithm以及一些使操作速度更快的优化。考虑一下这个电话。
rsync A host:B
rsync
将检查 A 和 B 的文件大小和修改时间戳,如果匹配则跳过任何进一步的处理。如果目标文件B已存在,增量传输算法将确保仅发送A和B之间的差异通过电线。
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/