Contents

在Linux中恢复复制文件传输

1. 概述

SCP 或安全复制协议是一种文件传输协议,用于将文件从一台主机安全地传输到另一台主机。但由于scp仅支持完整文件传输,不支持部分传输,因此无法恢复下载部分下载的文件。

在本教程中,我们将了解如何在 Linux 中恢复复制文件

2. 使用rsync

rsync 或远程同步是类 Unix 系统的实用程序。它使我们能够高效地将文件和目录同步到本地和远程主机。它通过比较文件大小和修改时间来实现。它通常用于在两个不同系统之间同步文件或目录。

运行rsync命令后,它会使用SSH 连接到远程主机。连接成功后,它会调用远程rsync进程。然后两者协商需要传输哪些文件的哪些部分。他们通过比较文件来做到这一点。

2.1. 上传中

此命令将使用用户itcodingman将位于*/home/itcodingman/file.txt的文件发送 到 blogdemo.com 。该文件将上传到/home/blogdemo*的路径:

$ rsync -P /home/itcodingman/file.txt itcodingman@blogdemo.com:/home/blogdemo

选项*-P用于确保rsync*在传输中断时保留任何部分传输的文件。保留部分文件将使后续传输更快。如果传输中断,我们只需使用相同的命令从中断处继续。

2.2. 下载中

让我们从远程下载它,而不是将文件上传到远程主机。

此命令会将*/home/blogdemo/file.txt*中的文件下载到 /home/itcodingman/ 中的本地主机:

$ rsync -P itcodingman@blogdemo.com:/home/blogdemo/file.txt /home/itcodingman

与上传一样,如果传输中断,我们可以使用相同的命令从中断的地方继续。

3.使用SFTP

在类 Unix 系统上,SFTP 是使用安全文件传输协议的命令行界面。它是 FTP 的加密版本。由于所有 SFTP 连接都是加密的,因此始终需要身份验证。

如果我们的服务器不允许通过 SSH 登录,此解决方案很有用。在那种情况下,使用rsync是行不通的。

3.1. 上传中

此命令将名为file.txt的文件上传到远程服务器的目录*/home/blogdemo*:

$ echo "put -a /home/itcodingman/file.txt" | sftp -r itcodingman@blogdemo.com:/home/blogdemo

选项*-a* 将恢复现有文件的部分传输。

3.2. 下载中

这会将*/home/itcodingman的远程目录复制到我们当前的本地目录。目录itcodingman*将在我们的当前目录中创建:

$ echo "get -a /home/itcodingman/" | sftp -r itcodingman@blogdemo.com

4. 处理停滞的scp进程

虽然我们已经研究了一些恢复中止复制进程的解决方法,但scp 可能仍然是我们首选的文件复制解决方案。让我们看看为什么它会停止以及如何修复它。

4.1. 防止scp进程停止

scp进程有时会停滞。这是因为当scp传输文件时,它会尝试使用尽可能多的带宽。这意味着延迟,例如,由防火墙或繁忙的网络引起的延迟,可能会使它停止。为了阻止这种情况发生,我们可以尝试限制分配的带宽

$ scp -l 8192 /home/itcodingman itcodingman@blogdemo.com:/home/blogdemo

此命令与选项*-l 一起,*将有助于将带宽限制为 1 MB/s (8192 Kbit/s)。

4.2. 恢复挂起的scp进程

如果我们当前打开了一个停滞的scp进程,则以下内容可能会帮助我们,而无需停止文件传输。

首先,我们需要按下组合键ctrl + z。这将暂停该过程并将其保留在后台。

接下来,我们需要通过ssh连接到接收服务器,登录,然后退出。现在我们需要使用命令fg将当前 shell 中的后台作业带到前台。之后,scp应该恢复。