一篇关于设置 Ghost 博客的文章说使用scp从我的本地机器复制到远程服务器:
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
rsync -r . root@178.xxx.xxx.xxx:/var/chef
为什么要使用rsync命令 ifscp将双向复制?与有何scp不同?rsync
这些工具之间的主要区别在于它们复制文件的方式。
scp基本上读取源文件并将其写入目标。它在本地或通过网络执行纯线性复制。
rsync还可以在本地或通过网络复制文件。但它采用了一种特殊的增量传输算法和一些优化来使操作更快。考虑电话。
rsync A host:B
rsync 将检查A 和 B 的文件大小和修改时间戳,如果它们匹配则跳过任何进一步的处理。
如果目标文件 B 已经存在,则增量传输算法将确保仅通过线路发送 A 和 B之间的差异。
rsync会将数据写入临时文件 T ,然后将目标文件 B 替换为 T以使更新对于可能正在使用 B 的进程看起来是“原子的” 。
它们之间的另一个区别涉及调用。rsync有大量的命令行选项,允许用户微调其行为。它支持复杂的过滤规则,以批处理模式、守护模式等运行,scp只有几个开关。
总之,scp用于您的日常任务。您偶尔在交互式 shell 上键入的命令。它使用起来更简单,在这些情况下rsync优化不会有太大帮助。
对于重复性任务,例如cron作业,请使用rsync. 如前所述,在多次调用时,它将利用已传输的数据,非常快速地执行并节省资源。它是通过网络保持两个目录同步的绝佳工具。
cron
此外,在处理大文件时,请使用rsync该-P选项。如果传输中断,您可以通过重新发出命令从停止的位置恢复传输。见席德·刹帝利的回答。
-P
最后,请注意rsync://该协议类似于纯 HTTP:未加密且没有完整性检查。确保始终rsync通过 SSH 使用(如上面问题中的示例),而不是通过 rsync 协议,除非您真的知道自己在做什么。scp将始终使用 SSH 作为具有完整性和机密性保证的底层传输机制,因此这是两个实用程序之间的另一个区别。
rsync://