有关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
如果rsync
将双向复制,为什么要使用scp
命令? scp
与rsync
的区别如何?
答案 0 :(得分:283)
这些工具之间的主要区别在于它们如何复制文件。
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
。如上所述,在多次调用时,它将利用已传输的数据,执行速度非常快并节省资源。它是通过网络保持两个目录同步的绝佳工具。
此外,在处理大型文件时,请使用rsync
选项-P
。如果传输中断,您可以通过重新发出命令将其恢复到停止位置。见Sid Kshatriya的answer。
答案 1 :(得分:56)
rysnc可用于在缓慢且不可靠的连接上运行。因此,如果您的下载在大文件中间中止,则rysnc将能够从再次调用时停止的位置继续。
使用rsync -vP username@host:/path/to/file .
-P选项保留部分下载的文件,并显示进度。
照常检查man rsync
答案 2 :(得分:14)
不同参数的黑白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 userid@remotehost.com:bigdata.tgz ./bigdata.tgz
-P
选项与--partial --progress
相同,从而允许rsync处理部分下载的文件。 --rsh=ssh
选项告诉rsync将ssh用作远程shell。
scp更安全。您必须使用rsync --rsh=ssh
使其与scp一样安全。
个人文档以了解更多信息:
答案 3 :(得分:3)
我认为scp
始终使用ssh(安全shell)进行加密,而rsync
不一定是加密的。更具体地说,rsync
本身不执行任何加密;它仍然能够使用其他机制(例如ssh)来执行加密。
除安全性外,加密还会对您的传输速度以及CPU开销产生重大影响。 (我的经验是rsync
可能明显快于scp
。)
查看rsync
<script>
//alert(window.screen.width);
if (window.screen.width < 250) {
// resolution is below 10 x 25
//alert(window.screen.width);
window.location = 'http://m.xyz.com/';
}
</script>
何时加密。
答案 4 :(得分:3)
footer {
background: $footer-blue;
border-top: 1px solid #4C68B9;
text-align: center;
a {
color: $white;
transition: color 0.3s;
&:hover {
color: $teal;
}
}
.social-links li {
float: left;
font-size: $smaller-heading-size;
padding: 40px 20px;
}
}
超过rsync
的一个主要功能(除了增量算法和加密,如果使用w / ssh),它会自动验证传输的文件是否已经传输正确。 Scp不会这样做,在传输较大的文件时偶尔可能会导致损坏。所以一般来说, rsync是带保证的副本。
Centos联机帮助页提到scp
选项说明的结尾:
请注意,rsync始终会验证每个传输的文件是否为 通过检查整个文件在接收端正确重建 传输文件时生成的校验和,但是 自动转移后验证与此无关 选项在转移之前“此文件是否需要更新?” 检查。
答案 5 :(得分:0)
最好在实际环境中思考。在我们的团队中,我们使用rsync -aP
替换群集中的错误cassandra主机。我们不能用scp(缓慢且没有进展保存)这样做。
答案 6 :(得分:0)
scp 最适合一个文件
OR tar
&amp;的组合压缩较小的数据集
比如资源较少的源代码树(即:images,sqlite 等)。
<小时/> 然而,当您开始处理更大卷时说:
构建一个 zip / tar.gz 文件以便在此时使用 scp 转移到物理限制是不切实际的。托管服务器。
作为练习,您可以将一些体操管道tar
加入ssh
并将结果重定向到远程文件。 (节省了构建的需要
交换或临时克隆 aka zip或tar.gz)
<强>然而强>,
rsync 简化了此过程,并允许您传输数据而不占用任何额外的磁盘空间。
,
连续(cron?)更新使用最小更改与完整克隆副本速度 随着时间的推移进行大量数据迁移。
tl;博士
scp
== 小规模(可在同一驱动器上构建压缩文件的空间)
rsync
== 大规模(需要备份大量数据而不留空间)