我意外删除了一个仍在通过 SCP 传输的文件。会发生什么情况?

我意外删除了一个仍在通过 SCP 传输的文件。会发生什么情况?

我创建了一个.tar.gz文件用于备份。当它仍在通过 SCP 传输时(它是一个 6 GB 的文件),我在 SSH 会话中意外删除了它。

SCP 传输仍在运行。在这种情况下会发生什么?文件会没问题吗?为什么?它会被破坏吗?如果是这样,为什么文件传输不会中断?

答案1

scp将毫无问题地复制您的文件。

如果你删除了由某个进程打开的影片,则只有文件名被删除,但文件仍然存在。您可以通过符号链接访问已删除的文件,其中/proc/$PID/fd$PID使用该文件的进程的进程 ID。

答案2

我有一个好主意,我想我自己已经想出来了:

# lsof | grep www
sftp-serv 2490  root  3r  REG  253,0 6878784186   14549364 /mnt/var/www.tar.gz (deleted)

对我来说,这意味着 SCP 仍在访问该文件,并且仍具有有效的文件句柄。对于其他任何人来说,该文件都会被删除,如括号中所示。因此,其他人将不再获得该已删除文件句柄的有效文件句柄。


现在,由于 SCP 下载已完成,我可以再次检查:

# lsof | grep www

注意结果为空,文件句柄已被关闭。

在我的客户端上,我能够.tar.gz使用 7Zip (Windows) 解压文件。它没有抱怨校验和损坏或其他问题。这支持了上述理论。

做得好,Linux!

相关内容