将文件移动到正在读取的文件


10

当文件被移动并且目标文件已经存在并且正在被读取时,该操作成功吗?是否取决于对目标文件的读取操作持续多长时间?

Answers:


9

读取操作将成功完成,无论完成读取操作所花费的时间如何。

为什么以及如何运作?

当读取操作开始时,文件的Inode用作从中读取文件内容的句柄。

当将另一个文件移动到目标文件时,结果将是一个新的inode,这意味着磁盘上文件的物理内容将放置在其他位置,并且不会触碰正在读取的文件的原始内容。

它们唯一的共同点是它们的路径/文件名,而磁盘上的基础信息节点和物理位置会改变。

读取操作完成后(如果没有其他进程在旧文件上仍然具有打开的文件句柄,并且没有其他硬链接引用其inode),则旧数据将被丢弃。

移动操作完成后,文件将具有新的索引节点索引号。

您可以使用显示文件索引节点索引号ls -i /tmp/some-file

出于与上述相同的原因,可以删除应用程序仍在使用的文件,因为使用该文件的应用程序将仅从inode读取(指向磁盘上的实际文件内容),同时引用这些文件在文件系统中被删除。


1
您忘了提到硬链接:读取操作完成时,如果该inode是从另一个目录条目链接的,则该数据将不会被删除(因为它仍然具有名称)。
cjm

感谢您指出这一点,编辑并添加了我的答案。
Elias Probst
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.