unix上的unlink和rm之间的区别

时间:2014-06-01 08:13:47

标签: unix ubuntu system delete-file unlink

这两个命令之间的真正区别是什么?为什么系统调用删除名为unlink而不是delete的文件?

1 个答案:

答案 0 :(得分:6)

您需要了解一下原始Unix文件系统,以了解这个非常重要的问题。

与其时代的其他操作系统(60年代末,70年代初)不同,Unix没有将文件名与实际的目录信息(文件存储在磁盘上的位置)一起存储。 ,Unix创建了一个单独的 Inode表”来包含目录信息,并识别实际文件,然后允许单独的文本文件成为名称和inode的目录。最初,目录文件应该像所有其他文件一样被操作为直接文本文件,使用相同的工具( cat cut sed , shell程序员至今都熟悉它。

这个架构决策的一个重要结果是单个文件可能有多个名称!特定目录文件中每次出现的inode基本上都是链接到inode,因此它是已知的。要将文件名连接到文件的inode(“实际”文件),您将其“链接”起来,当您从一个目录中删除该名称时,您将其“取消链接”。

当然,取消链接文件名 not 自动意味着您正在从磁盘中删除/删除该文件,因为该文件可能仍然被其他目录中的其他名称所知。 Inode表还包含链接计数,以跟踪inode(文件)已知的名称数;将名称链接到文件会在链接计数中添加一个,取消链接会删除一个。当链接数降至零时,该文件不再被引用到任何目录中,被认为是“不需要的”,只有这样才能被删除。

因此,按名称“删除”文件取消链接 - 因此系统调用的名称 - 并且还有非常重要的 ln 命令创建一个文件的附加链接(实际上,文件的inode),让它以另一种方式被人知道。

其他较新的操作系统及其文件系统必须模拟/尊重此行为才能符合Posix标准。