在写入文件时重命名文件是否 100% 安全?

在写入文件时重命名文件是否 100% 安全?

在 Ubuntu 中,与 Windows 不同,我可以在文件写入硬盘时重命名文件(例如,因为它是程序的输出或另一个文件的副本),并且我还可以重命名包含正在写入的文件的目录:系统不会发送“文件正在使用,不允许操作”之类的消息。这种重命名操作是否 100% 安全,还是存在创建损坏文件的风险?并且,在第一种情况下,与其他操作系统不同的技术原因是什么?(也许与 Linux 文件系统结构和 Inode 的使用有关,我想......?)

非常感谢。

答案1

Linux 依靠文件句柄工作,在 Linux 中重命名或移动文件不会改变文件句柄。即使删除文件也不会有问题:拥有文件句柄的进程仍然可以读写。

维基百科上有关 inode 的页面将是这方面最好的读物。

在计算中,索引节点 (inode) 是许多 Unix 文件系统中都存在的一种数据结构。每个索引节点都存储有关文件系统对象(文件、设备节点、套接字、管道等)的所有信息。除了现代文件系统中的某些情况外,它不存储文件的数据内容和文件名。

启示

当文件被移动到同一设备上的另一个目录时,或者当磁盘碎片整理(可能改变其物理位置)时,文件的 inode 编号保持不变。这也意味着,许多非 Unix 文件系统(如 FAT 及其后代)无法实现完全一致的 inode 行为,因为当文件的目录条目及其数据被移动时,它们无法存储这种不变性。


所以,是的。

相关内容