Io

將文件移動到正在讀取的文件

  • December 8, 2013

當一個文件被移動並且目標文件已經存在並且正在被讀取時,操作會成功嗎?這將取決於對目標文件的讀取操作持續多長時間?

讀取操作將成功,無論完成讀取操作所花費的時間。

為什麼以及如何工作?

當讀取操作開始時,文件的Inode用作讀取文件內容的句柄。

當將另一個文件移動到目標文件時,結果將是一個新的inode,這意味著磁碟上文件的物理內容將被放在其他地方,並且正在讀取的文件的原始內容不會被觸及。

它們唯一的共同點是它們的路徑/文件名,而磁碟上的底層 inode 和物理位置會發生變化。

一旦讀取操作完成(假設沒有其他程序在舊文件上仍然有打開的文件句柄,並且沒有其他硬連結引用其 inode),舊數據將被丟棄。

一旦移動操作完成,文件就會有一個新的 inode 索引號。

您可以使用顯示文件 inode 索引號ls -i /tmp/some-file

出於與上述相同的原因,可以刪除應用程序仍在使用的文件,因為使用該文件的應用程序只會從 inode 讀取(指向磁碟上的實際文件內容),而文件的引用在文件系統中被刪除。

引用自:https://unix.stackexchange.com/questions/103271