“scp”和“rsync”有什么不同?
有关设置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
基本上读取源文件并将其写入目标。 它在本地或通过networking执行简单的线性复制。
rsync
也可以在本地或通过networking复制文件。 但它采用了特殊的delta转换algorithm和一些优化,使操作更快。 考虑这个电话。
rsync A host:B
-
rsync
将检查A和B的文件大小和修改时间戳,如果匹配,则跳过任何进一步的处理。 -
如果目标文件B已经存在,增量转换algorithm将确保只有A和B之间的差异通过线路发送。
-
rsync
会将数据写入临时文件T ,然后用Treplace目标文件B ,以使更新对于可能正在使用B的进程显得“primefaces”。
他们之间的另一个区别涉及调用。 rsync
有大量的命令行选项,允许用户微调其行为。 它支持复杂的过滤规则,以批处理模式运行,守护进程模式等scp
只有几个开关。
总之,使用scp
来进行日常任务。 您在交互式shell中稍后键入一次的命令。 使用起来更简单,在这种情况下, rsync
优化不会有太大帮助。
对于定期任务,如cron
作业,请使用rsync
。 如上所述,在多次调用中,它将利用已经传输的数据,快速执行并节省资源。 这是一个很好的工具来保持两个目录在networking上同步。
另外,在处理大文件时,使用rsync
和-P
选项。 如果传输中断,您可以通过重新发出命令将其恢复到停止位置。 见Sid Kshatriya的答案 。
rysnc可以在缓慢和不可靠的连接上运行。 因此,如果您的下载在大文件中间中止,那么再次调用时,rysnc将能够从停止的地方继续。
使用rsync -vP username@host:/path/to/file .
-P选项保留部分下载的文件,并显示进度。
像往常一样检查man rsync
对我来说有一个区别是scp
总是用ssh(安全shell)encryption,而rsync
不一定是encryption的。 更具体地说, rsync
本身不执行任何encryption。 它仍然能够使用其他机制(例如ssh)来执行encryption。
除了安全性,encryption还会对传输速度以及CPU开销产生重大影响。 (我的经验是, rsync
可以比scp
快得多。)
看看这个post ,当rsync
encryption上。
最好是在实际的环境下思考。 在我们的团队中,我们使用rsync -aP
replace集群中的一个糟糕的cassandra主机。 我们不能用scp来做这个(缓慢且没有进度保存)。
rsync(除deltaalgorithm之外)的一个主要function是自动validation传输的文件是否已正确传输。 Scp不会这样做,当传输更大的文件时偶尔会导致损坏。 所以一般来说rsync是一个有保证的副本。
在--checksum
选项结尾处,请参阅(centos)手册页说明:
请注意,rsync通过检查在传输文件时生成的整个文件校验和来validation每个传输的文件是否在接收端正确重build,但是自动传输后validation与该选项的before-传送“这个文件是否需要更新?”检查。