如何使用 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 命令工具箱中都非常有用。毕竟,您永远不知道什么时候您可能会陷入只能访问其中一个命令的困境。在这种情况下,至少了解两者的基础知识是有好处的。


