UNIX命令mv和rm如何处理打开的文件?

问题描述 投票:13回答:2

如果我正在读取存储在NTFS文件系统上的文件,并且我尝试在该文件仍被读取时移动/重命名该文件,我将无法这样做。如果我在UNIX文件系统(例如EXT3)上尝试此操作,则会成功,并且执行读取的进程不受影响。我甚至可以将文件和阅读过程不受影响。这是如何运作的?有人可以向我解释为什么在UNIX文件系统下支持这种行为而不支持NTFS吗?我有一种模糊的感觉,它与硬链接和inode有关,但我很感激一个很好的解释。

unix filesystems ntfs mv
2个回答
28
投票

Unix文件系统使用引用计数和用于查找文件的双层体系结构。

文件名指的是称为inode的东西,用于信息节点或索引节点。 inode存储(指向)文件内容以及一些元数据,例如文件的类型(普通,目录,设备等)以及拥有它的人。

多个文件名可以引用相同的inode;然后他们被称为hard links。另外,file descriptor(fd)指的是inode。 fd是进程在打开文件时获得的对象类型。

Unix文件系统中的文件只有在最后一次引用时才会消失,因此当没有更多名称(硬链接)或fd引用它时。所以,rm实际上并没有删除文件;它删除了对文件的引用。

这个文件系统设置可能看起来令人困惑,它有时会带来问题(尤其是NFS),但它有许多应用程序不需要锁定的好处。许多Unix程序也通过打开临时文件并在之后立即删除它来利用这种情况。一旦它们终止,即使它们崩溃,临时文件也会消失。


5
投票

在unix上,文件名只是指向实际文件(inode)的链接。打开文件还会创建指向实际文件的(临时)链接。当文件的所有链接都消失后(rm和close()),文件将被删除。

在NTFS上,逻辑上文件名是文件。从文件名到文件metainfo没有间接层,它们是同一个对象。如果你打开它,它正在使用中并且无法删除,就像unix上的实际文件(inode)在使用时无法删除一样。

Unix:文件名➜FileInfo➜文件数据

NTFS:FileName +FileInfo➜文件数据

© www.soinside.com 2019 - 2024. All rights reserved.