“-C”标志在“scp”中到底有什么作用?

“-C”标志在“scp”中到底有什么作用?

我总是使用rsyncscp来将文件从远程计算机复制到远程计算机。最近,我在手册中发现了scp( man scp)标志-C

 -C      Compression enable.  Passes the -C flag to
         ssh(1) to enable compression.

在我发现这个标志之前,我曾经使用过zipbefore 和 then scp

只使用-C比压缩和解压缩更有效吗?什么时候使用一个或另一个进程可以使传输更快?

答案1

-C标志启用 SSH 流的 gzip 压缩。

它相当于Accept-Encoding: gzipHTTP 中的。

该标志的执行方式取决于您传输的数据类型:

  • 传输单个大文件时,性能与传输前压缩文件几乎相同(忽略 zip 与 gzip 算法的效率)。

    -C对于用户来说,使用起来更省力。

  • 当传输大量小文件时,性能会不如传输前压缩文件。

    其背后的原因是,在每次文件传输之前,SCP 服务器和客户端之间都会进行交互式通信(用于交换文件元数据,例如时间戳和权限)。因此双方都必须等待一段时间才能得到对方的响应(等待时压缩没有帮助)。对于每个传输的文件来说,这都是浪费时间。浪费多少时间取决于连接的延迟。最终,传输速度可能会慢很多。

    当您传输单个压缩文件时,该通信仅发生一次。

答案2

它永远不会真正产生任何大的区别,但是在复制文件之前对其进行压缩应该会稍微降低效率,因为使用诸如zip可以封装多个文件(如tar)之类的容器格式是不必要的,并且不可能流式传输 zip输入和输出(因此您需要一个临时文件)。

gzip另一方面,使用,而不是zip应该完全相同,因为它是ssh -C在引擎盖下所做的......除了 gzip 自己比仅仅使用更多工作ssh -C

答案3

它在 ssh 中启用 gzip 压缩(在 scp 下)。

慢的连接这会加快速度,在任何相当快的连接(100Mbit 或更快)上,压缩很可能会减慢速度。

它比 zip 效率更高或更低,具体取决于 gzip(特别是 gzip -6)是否比您选择的 zip 压缩级别效率更高或更低

相关内容