网站搜索

如何使用 scp 和 rsync 在系统之间传输文件


要点

  • scp 和 rsync 都可以安全地传输文件,但 rsync 更适合定期传输和处理网络问题。
  • 使用 scp 进行手动文件传输; rsync 更适合具有压缩等高级选项的脚本和 cron 作业。
  • 两者都需要 SSH 以确保安全,但 rsync 也需要在两台计算机上安装才能使用。

有很多工具可用于在 Linux 命令行上在两台计算机之间传输文件,但 scp 和 rsync 命令几乎涵盖所有用例。以下是如何以及何时使用它们。

scp 和 rsync 有什么区别?

scp 和 rsync 命令都可以在两台计算机之间移动文件,并且两者都可以非常安全地执行此操作。这两个命令之间的主要区别不在于它们做什么,而在于它们如何执行。

scp 命令代表“安全复制”,在很多方面,它的工作方式类似于标准的 unix cp 或“复制”命令,但在两台计算机之间进行。在本例中,名称中的“安全”指的是 SSH,它用于与远程计算机进行通信的协议。

这个命令就像听起来一样简单,从一台计算机读取文件并将其写入另一台计算机。这种简单性非常符合 UNIX 的“做好一件事”的哲学。 ”

rsync 命令也能很好地完成一件事,但它采用了更细致的方法。区别在于名称。虽然 rsync 会将文件复制到另一台计算机(如果该文件尚不存在),但任何未来的操作都只会比较每台计算机上文件之间的差异。

如果您只移动一个小文件,这种差异不会很明显。也就是说,如果您使用 rsync 作为备份脚本的一部分,则仅对已更改的文件进行操作可以节省大量时间和带宽。当然,这确实需要在本地和远程计算机上都安装rsync,而scp命令只需要在运行该命令的计算机上安装。

这不是唯一的区别。 rsync 命令也更具弹性,如果在传输过程中断开连接,可以重新建立连接。再加上仅传输差异的能力,这使得它更适合更大的传输。

也就是说,rsync 与 scp 也有相似之处。例如,它还可以通过 SSH 连接,您可以使用 SSH 密钥通过任一命令连接到远程计算机。

如何使用 scp 传输文件

使用 scp 工具在计算机之间移动单个文件很简单。该命令可以如下所示:

scp <filename> username@remotehost:/path/to/directory

要将文件“foo.txt”复制到远程计算机,您可以使用以下命令:

scp foo.txt kris@some-computer:/home/kris/

要使用 scp 命令将该文件复制回我自己的计算机(出于某种原因),我可以使用以下命令:

scp kris@some-computer:/home/kris/foo.txt

当然,在许多情况下,您需要在计算机之间移动整个文件目录。幸运的是,使用 scp 与使用标准 cp 命令一样简单。只需传递 -r 标志即可递归复制目录:

scp -r dotfiles kris@some-computer:/home/kris/

或者要从远程计算机递归复制目录,请使用以下命令:

scp -r kris@some-computer:/home/kris/dotfiles

有关使用此命令可以执行的所有操作的更深入信息,请参阅我们的在 Linux 上使用 scp 命令的指南。

如何使用 rsync 传输文件

虽然 rsync 具有许多内置功能,但它使处理基本传输变得相当简单。将文件复制到远程计算机的基本命令如下:

rsync <local-filename> user@remotehost:<remote-filename>

因此,要从上面的 scp 示例中复制相同的“foo.txt”文件,您可以使用以下命令:

rsync foo.txt kris@some-computer:foo.txt

在后台,rsync 将尝试使用 SSH 连接,并询问您的用户名和密码。一旦您通过身份验证,传输就会开始。

相反,将文件复制回本地计算机也同样简单:

rsync kris@some-computer:/home/kris/foo.txt .

当然,这种操作方式并没有真正充分利用 rsync 及其各种选项的强大功能。虽然 rsync 有大量标志来设置各种选项,但您需要习惯的是 -a 或“--archive”标志。这结合了一些选项,除其他外,这些选项使 rsync 递归扫描目录、保留所有权和权限以及将符号链接复制为符号链接。

考虑到 rsync 通常推出的用例,将这些选项整合到一个易于访问的标志中是有意义的。对于绝大多数 rsync 使用,您可能需要使用 -a 标志。例如,要将目录同步到远程计算机:

rsync -av ~/dotfiles kris@some-computer:/home/kris/dotfiles

上述命令中的第二个标志是“-v”(代表“--verbose”),它将为您提供有关命令运行时进度的更详细输出。

根据您的互联网连接速度(可能还取决于您传输的具体内容),您可以通过压缩传输中的数据来加快传输速度。这使本地和远程计算机上的数据保持未压缩状态,但在传输时压缩数据。为此,请使用 -z 标志:

rsync -azv ~/dotfiles kris@some-computer:/home/kris/dotfiles

同样,这并不能保证加快传输速度,但值得研究,特别是对于备份脚本等频繁作业或其他需要大量时间的作业。

这只是 rsync 命令强大功能的冰山一角。如需更多想法,我们提供了一些 rsync 命令实际应用的有用示例。

什么时候应该使用 scp 或 rsync?

scp 和 rsync 命令都有各自的优点和缺点,但在日常使用中,确定哪个最好通常取决于您如何使用它们。有一个相当简单的经验法则,您可以使用它来帮助记住在特定情况下使用哪一个。

如果您手动使用该命令来移动文件,通常,使用 scp 命令会更容易。它更简单、更直接,并且您可能已经至少在一定程度上熟悉了使用 cp 命令的基本标志。

另一方面,如果您正在编写脚本或运行 cron 作业,则 rsync 命令可能是您的最佳选择。它更擅长处理意外的网络问题,而且其更多的同步驱动特性意味着它比相对简单的 scp 工具拥有更强大的选项。

这两个命令都非常值得了解,并且在您的基本 Linux 命令工具箱中都非常有用。毕竟,您永远不知道什么时候您可能会陷入只能访问其中一个命令的困境。在这种情况下,至少了解两者的基础知识是有好处的。

相关文章: