我创建了一个.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!