一篇关于setting up Ghost blogging的文章说使用scp
从我的本地机器复制到远程服务器:
scp -r ghost-0.3 root@*your-server-ip*:~/
但是,Railscast 339: Chef Solo Basics使用scp
以相反的方向复制(从远程服务器到本地机器):
scp -r [email protected]:/var/chef .
在相同的Railscast中,当作者想要将文件复制到远程服务器时(与第一个示例相同),他使用rsync
:
rsync -r . [email protected]:/var/chef
如果rsync
将双向复制,为什么要使用scp
命令? scp
与rsync
有什么不同?
这些工具之间的主要区别在于它们如何复制文件。
scp
基本上读取源文件并将其写入目标。它在本地或通过网络执行简单的线性复制。
rsync
还在本地或通过网络复制文件。但它采用了特殊的delta transfer algorithm和一些优化来使操作更快。考虑一下电话。
rsync A host:B
rsync
将检查A和B的文件大小和修改时间戳,如果匹配则跳过任何进一步的处理。rsync
将数据写入临时文件T,然后用T替换目标文件B,以使更新看起来像“原子”到可能正在使用B的进程。他们之间的另一个区别涉及调用。 rsync
有很多命令行选项,允许用户微调其行为。它支持复杂的过滤规则,以批处理模式,守护进程模式等运行.scp
只有几个开关。
总之,使用scp
进行日常任务。您在交互式shell上偶尔键入一次的命令。它使用起来更简单,在这些情况下,rsync
优化无济于事。
对于重复性任务,如cron
工作,请使用rsync
。如上所述,在多次调用时,它将利用已传输的数据,执行速度非常快并节省资源。它是一个很好的工具,可以通过网络保持两个目录同步。
此外,在处理大文件时,请使用rsync
和-P
选项。如果传输中断,您可以通过重新发出命令将其恢复到停止位置。见Sid Kshatriya的answer。
rsync可用于在缓慢且不可靠的连接上运行。因此,如果您的下载在大文件中间中止,则rsync将能够从再次调用时停止的位置继续。
使用rsync -vP username@host:/path/to/file .
-P选项保留部分下载的文件,并显示进度。
像往常一样检查man rsync
差异b / w scp和rsync对不同参数的影响
scp
:scp的优化和速度相对较低rsync
:rsync相对更优化和速度scp
:scp命令行工具无法从丢失的网络连接恢复中止下载rsync
:如果上面的rsync会话本身被中断,您可以通过键入相同的命令来尽可能多地恢复它。 rsync将自动重新启动它停止的传输。http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html
$ scp source_file_path destination_file_path
$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh [email protected]:bigdata.tgz ./bigdata.tgz
-P
选项与--partial --progress
相同,允许rsync与部分下载的文件一起使用。 --rsh=ssh
选项告诉rsync使用ssh作为远程shell。
scp更安全。你必须使用rsync --rsh=ssh
使它像scp一样安全。
man文档了解更多:
我认为scp
总是用ssh(安全shell)加密,而rsync
不一定是加密的。更具体地说,rsync
本身不执行任何加密;它仍然能够使用其他机制(例如ssh)来执行加密。
除安全性外,加密还会对您的传输速度以及CPU开销产生重大影响。 (我的经验是,rsync
可能比scp
快得多。)
当post加密时,请查看此rsync
。
rsync
优于scp
的一个主要特征(除了delta算法和加密,如果使用w / ssh)是它自动验证传输的文件是否已正确传输。 Scp不会这样做,在传输较大的文件时偶尔可能会导致损坏。所以通常rsync是带保证的副本。
Centos联机帮助页提到了--checksum
选项描述的结尾:
请注意,rsync始终通过检查在文件传输时生成的整个文件校验和来验证每个传输的文件是否在接收端正确重建,但自动传输后验证与此选项之前无关 - 转移“此文件是否需要更新?”检查。
在实际环境中思考会更好。在我们的团队中,我们使用rsync -aP
替换我们集群中的错误cassandra主机。我们不能用scp(缓慢且没有进展保存)这样做。
scp最适合一个文件。
或者tar
和压缩的组合用于较小的数据集,例如具有小资源的源代码树(即:图像,sqlite等)。
构建一个zip / tar.gz文件以便在此时使用scp传输到托管服务器的物理限制变得不切实际。
作为练习,你可以做一些体操,如管道tar
到ssh
,并将结果重定向到远程文件。 (节省了构建交换或临时克隆aka zip或tar.gz的需要)
然而,
rsync简化了此过程,允许您传输数据而不消耗任何额外的磁盘空间。
也,
连续(cron?)更新使用最小的更改与完整克隆的副本相比,可以加速大数据迁移。
TL;博士 qazxsw poi ==小规模(可以在同一个驱动器上构建压缩文件的空间) qazxsw poi ==大规模(需要备份大数据而没有剩余空间)