一篇关于设置幽灵博客的文章说使用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传输算法,并进行了一些优化,使操作速度大大提高。考虑一下电话。
rsync A host:B
rsync将检查A和B的文件大小和修改时间戳,如果匹配则跳过任何进一步的处理。
如果目标文件B已经存在,增量传输算法将确保只有A和B之间的差异被通过网络发送。
rsync将把数据写入临时文件T,然后用T替换目标文件B,以使更新对于可能正在使用B的进程来说看起来是“原子的”。
它们之间的另一个区别是调用。Rsync有大量的命令行选项,允许用户微调其行为。它支持复杂的过滤规则,运行在批处理模式,守护进程模式等。scp只有几个开关。
总之,使用scp完成日常任务。您在交互式shell上偶尔键入的命令。它使用起来更简单,在这种情况下,rsync优化不会有太大帮助。
对于循环任务,如cron作业,使用rsync。如前所述,在多次调用中,它将利用已经传输的数据,执行速度非常快,并节省资源。它是一种通过网络保持两个目录同步的优秀工具。
同样,在处理大文件时,使用带-P选项的rsync。如果传输中断,您可以通过重新发出命令在停止传输的地方恢复传输。请看Sid Kshatriya的回答。
最后,请注意rsync://协议类似于普通的HTTP:不加密,没有完整性检查。一定要始终通过SSH使用rsync(就像上面问题中的例子一样),而不是通过rsync协议,除非您确实知道自己在做什么。scp将始终使用SSH作为底层传输机制,它具有完整性和机密性保证,因此这是两个实用程序之间的另一个区别。
这些工具之间的主要区别是它们复制文件的方式。
SCP基本上读取源文件并将其写入目标文件。它在本地或网络上执行普通线性复制。
Rsync还可以在本地或通过网络复制文件。但它采用了一种特殊的delta传输算法,并进行了一些优化,使操作速度大大提高。考虑一下电话。
rsync A host:B
rsync将检查A和B的文件大小和修改时间戳,如果匹配则跳过任何进一步的处理。
如果目标文件B已经存在,增量传输算法将确保只有A和B之间的差异被通过网络发送。
rsync将把数据写入临时文件T,然后用T替换目标文件B,以使更新对于可能正在使用B的进程来说看起来是“原子的”。
它们之间的另一个区别是调用。Rsync有大量的命令行选项,允许用户微调其行为。它支持复杂的过滤规则,运行在批处理模式,守护进程模式等。scp只有几个开关。
总之,使用scp完成日常任务。您在交互式shell上偶尔键入的命令。它使用起来更简单,在这种情况下,rsync优化不会有太大帮助。
对于循环任务,如cron作业,使用rsync。如前所述,在多次调用中,它将利用已经传输的数据,执行速度非常快,并节省资源。它是一种通过网络保持两个目录同步的优秀工具。
同样,在处理大文件时,使用带-P选项的rsync。如果传输中断,您可以通过重新发出命令在停止传输的地方恢复传输。请看Sid Kshatriya的回答。
最后,请注意rsync://协议类似于普通的HTTP:不加密,没有完整性检查。一定要始终通过SSH使用rsync(就像上面问题中的例子一样),而不是通过rsync协议,除非您确实知道自己在做什么。scp将始终使用SSH作为底层传输机制,它具有完整性和机密性保证,因此这是两个实用程序之间的另一个区别。
不同参数下的b/w 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
rsync
$ 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文档了解更多:
scp: http://www.manpagez.com/man/scp/
rsync: http://www.manpagez.com/man/1/rsync/