当移动文件时,目标文件已经存在并且正在读取,操作会成功吗?是否取决于对目标文件的读取操作持续多长时间?
答案1
无论完成读取操作所需的时间如何,读取操作都会成功。
为什么以及如何运作?
当读取操作开始时,文件的索引节点用作读取文件内容的句柄。
当将另一个文件移动到目标文件时,结果将是一个新的索引节点,这意味着磁盘上文件的物理内容将被放置在其他位置,并且正在读取的文件的原始内容不会被触及。
它们唯一的共同点是它们的路径/文件名,而磁盘上的底层 inode 和物理位置会发生变化。
一旦读取操作完成(假设没有其他进程仍然拥有旧文件上的打开文件句柄,并且没有其他硬链接引用其 inode),旧数据将被丢弃。
一旦移动操作完成,文件就会有一个新的inode索引号。
您可以使用 显示文件 inode 索引号ls -i /tmp/some-file
。
出于与上述相同的原因,可以删除应用程序仍在使用的文件,因为使用该文件的应用程序将仅从 inode(指向磁盘上的实际文件内容)读取,而文件的引用文件系统中的内容被删除。