Io
將文件移動到正在讀取的文件
當一個文件被移動並且目標文件已經存在並且正在被讀取時,操作會成功嗎?這將取決於對目標文件的讀取操作持續多長時間?
讀取操作將成功,無論完成讀取操作所花費的時間。
為什麼以及如何工作?
當讀取操作開始時,文件的Inode用作讀取文件內容的句柄。
當將另一個文件移動到目標文件時,結果將是一個新的inode,這意味著磁碟上文件的物理內容將被放在其他地方,並且正在讀取的文件的原始內容不會被觸及。
它們唯一的共同點是它們的路徑/文件名,而磁碟上的底層 inode 和物理位置會發生變化。
一旦讀取操作完成(假設沒有其他程序在舊文件上仍然有打開的文件句柄,並且沒有其他硬連結引用其 inode),舊數據將被丟棄。
一旦移動操作完成,文件就會有一個新的 inode 索引號。
您可以使用顯示文件 inode 索引號
ls -i /tmp/some-file
。出於與上述相同的原因,可以刪除應用程序仍在使用的文件,因為使用該文件的應用程序只會從 inode 讀取(指向磁碟上的實際文件內容),而文件的引用在文件系統中被刪除。