2011-03-07 58 views
11

如果我讀出存儲在NTFS文件系統中的文件時,我嘗試在仍然讀它移動/重命名文件,我這樣做避免。如果我在UNIX文件系統(如EXT3)上嘗試這種方法,它會成功,並且讀取過程不受影響。我甚至可以讀取文件並且讀取過程不受影響。這個怎麼用?有人可以向我解釋爲什麼在UNIX文件系統下支持這種行爲,但不支持NTFS?我有一個模糊的感覺,它與硬鏈接和inode有關,但我會很感激一個很好的解釋。UNIX命令mv和rm如何與打開的文件一起使用?

回答

23

Unix文件系統使用引用計數和查找文件的兩層結構。

的文件名是指一種叫做inode,用於信息節點或索引節點。 inode存儲(指向)文件內容以及一些元數據,如文件的類型(普通,目錄,設備等)以及誰擁有它。

多個文件名可以參照相同的inode;他們然後被稱爲hard links。另外,file descriptor(fd)是指inode。 fd是進程在打開文件時獲得的對象的類型。

在Unix文件系統中的文件,只有當最後一個引用消失了消失了,所以當沒有更多的名稱(硬鏈接)或fd的引用它。所以,rm實際上並沒有刪除文件;它將刪除文件的引用。

此建立文件系統可能看起來混亂,有時提出的問題(特別是與NFS),但它有一個鎖定不需要很多的應用程序的好處。許多Unix程序也通過打開臨時文件並在之後立即刪除它們來利用這種情況。一旦它們終止,即使它們崩潰,臨時文件也不見了。

+0

在那裏,我可以移動打開的文件是否有限制?例如。只在同一個文件系統中? –

+0

@ivan_pozdeev在不同文件系統的文件上執行'mv'實際上會複製數據並刪除原始文件,在這種情況下,它類似於打開文件的'rm'。 – dsonck92

4

在unix系統中,文件名是簡單的實際文件(i節點)的鏈接。打開文件還會創建一個到臨時文件的鏈接(臨時)。當一個文件的所有鏈接都已經消失(rm和close())時,文件被刪除。

在NTFS,邏輯文件名文件。從文件名到文件metainfo沒有間接層,它們是同一個對象。如果您打開它,它正在使用中,無法刪除,就像unix上的實際文件(inode)在使用時無法刪除一樣。

Unix的: 文件名 - >的FileInfo - >文件數據

NTFS: 文件名/ FileInfo的 - >文件數據