【发布时间】:2015-07-20 07:59:38
【问题描述】:
如果我在同一分区上移动一个文件,当我移动时,我是否应该将 i-node 的引用计数更新为 2(因为我是第一次复制),然后再次将其减为 1(当我删除目录项)?
或者在移动过程中引用计数没有被触及?
【问题讨论】:
标签: memory memory-management inode
如果我在同一分区上移动一个文件,当我移动时,我是否应该将 i-node 的引用计数更新为 2(因为我是第一次复制),然后再次将其减为 1(当我删除目录项)?
或者在移动过程中引用计数没有被触及?
【问题讨论】:
标签: memory memory-management inode
没有。
当一个文件被“移动”时,真正发生的是文件命名层中对 inode 的引用正在改变,就是这样。事实上,文件并没有被复制。
意识到文件命名层纯粹是为了您的方便。文件系统本身实际上只关心 inode。通常,甚至目录也是文件命名层的虚构。 (确实有些文件系统实际上是在文件系统层按层次组织目录,但例如 ext2 和 ext3 就不是这样)。
虽然从技术上讲,在极短的时间内在命名层中没有引用或两次引用文件是正确的,但从系统调用到内核的角度来看,这实际上是一个原子事务,即正在制作中,因此它实际上并不重要,也不会成为您的竞争条件。
【讨论】:
ls -i 查看目录中文件的inode。使用mv 将其中一个移动到另一个目录,然后在新目录中的该文件上尝试ls -i。您将看到 inode 编号 没有 更改。