`scp`与`rsync`有什么不同?

Lea*_*cim 211 rsync scp

有关设置Ghost博客的文章说使用scp从本地计算机复制到远程服务器:

scp -r ghost-0.3 root@*your-server-ip*:~/
Run Code Online (Sandbox Code Playgroud)

但是,Railscast 339:Chef Solo Basics用于scp向相反方向复制(从远程服务器到本地机器):

scp -r root@178.xxx.xxx.xxx:/var/chef .
Run Code Online (Sandbox Code Playgroud)

在相同的Railscast中,当作者想要将文件复制到远程服务器时(与第一个示例相同),他使用rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef
Run Code Online (Sandbox Code Playgroud)

rsync如果scp要在两个方向上复制,为什么要使用该命令?有scp什么不同rsync

Raf*_*afa 314

这些工具之间的主要区别在于它们如何复制文件.

scp基本上读取源文件并将其写入目标.它在本地或通过网络执行简单的线性复制.

rsync还可以在本地或通过网络复制文件.但它采用了特殊的delta传输算法和一些优化来使操作更快.考虑一下电话.

rsync A host:B
Run Code Online (Sandbox Code Playgroud)
  • rsync将检查AB的文件大小和修改时间戳,如果匹配则跳过任何进一步的处理.

  • 如果目标文件B已存在,则增量传输算法将确保仅通过线路发送AB之间差异.

  • rsync将数据写入到一个临时文件牛逼,然后替换目标文件牛逼,使更新一下"原子",以所有可能使用过程中.

他们之间的另一个区别涉及调用.rsync有很多命令行选项,允许用户微调其行为.它支持复杂的过滤规则,以批处理模式运行,守护进程模式等scp只有几个开关.

总之,scp用于您的日常任务.您在交互式shell上偶尔键入一次的命令.它使用起来更简单,在这些情况下,rsync优化也无济于事.

对于重复性任务,如cron工作,请使用rsync.如上所述,在多次调用时,它将利用已传输的数据,执行速度非常快并节省资源.它是一个很好的工具,可以通过网络保持两个目录同步.

此外,在处理大文件时,请使用rsync-P选项.如果传输中断,您可以通过重新发出命令将其恢复到停止位置.见Sid Kshatriya的回答.

  • 你说使用scp来完成你的日常任务.根据您的解释和OP,似乎在没有选项的情况下使用这两个工具的界面是相同的.如果rsync具有优越的实现并且接口是相同的,为什么不总是使用rsync? (10认同)
  • 即使没有选项,它们的界面也不尽相同.Rsync对源参数的尾部斜杠有特殊解释(同步目录本身与其内容).它可能有其他陷阱,我不确定. (5认同)
  • 另外,我猜想`scp`更有可能在类Unix系统上可用,所以你偶尔会阻止一个恼人的"命令找不到". (2认同)
  • @ erikb85 rsync具有-P标志,该标志将显示进度条并允许从部分完成的传输中恢复.https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps (2认同)
  • `scp` 和 `rsync` 之间的另一个接口差异:`rsync -a` 与 `scp -rp` 以保留修改时间和权限。 (2认同)

Sid*_*iya 65

rysnc可用于在缓慢且不可靠的连接上运行.因此,如果您的下载在大文件中间中止,则rysnc将能够在再次调用时从其停止的位置继续.

使用 rsync -vP username@host:/path/to/file .

-P选项保留部分下载的文件,并显示进度.

像往常一样检查 man rsync

  • `-P`是一个很棒的选择,谢谢. (5认同)

Ami*_*esh 24

差异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
Run Code Online (Sandbox Code Playgroud)

rsync的

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz 
Run Code Online (Sandbox Code Playgroud)

-P选项与--partial --progress允许rsync与部分下载的文件一起使用相同.该--rsh=ssh选项告诉rsync使用ssh作为远程shell.

4.安全:

scp更安全.你必须使用rsync --rsh=ssh它来像scp一样安全.

man文档了解更多:

绩效图表

  • 关于安全性,摘自 [openSSH 8.0 发行说明](https://www.openssh.com/txt/release-8.0):`scp 协议已经过时、不灵活且不易修复。我们建议使用更现代的协议(例如 sftp 和 rsync)来进行文件传输。 (6认同)

Sam*_* Li 5

对我来说,scp总是使用ssh(安全外壳)rsync进行加密,而不必进行加密。更具体地说,rsync它本身不执行任何加密;它仍然能够使用其他机制(例如ssh)执行加密。

除了安全性,加密还对您的传输速度以及CPU开销有重要影响。(我的经验是,rsync这样做的速度可能比明显更快scp。)

查看此帖子以了解何时启用rsync了加密。


cou*_*nt0 5

rsyncover的主要功能scp(除了delta算法和加密(如果使用w / ssh的话)之外)还可以自动验证传输的文件是否已正确传输。Scp不会这样做,这有时可能会导致传输较大文件时损坏。因此,通常rsync是带有保证的副本

Centos的联机帮助页在--checksum选项说明的结尾提到了这一点:

请注意,rsync始终通过检查在传输文件时生成的整个文件校验和来验证接收方是否正确重建了每个传输文件,但是自动传输后验证与该选项的之前无关-传输“是否需要更新此文件?”检查。