unix与unm的区别

这两个命令真的有什么不同? 为什么系统调用删除名为unlink而不是删除的文件?

你需要了解一些关于原始的Unix文件系统来理解这个非常重要的问题。

不同于其它时代的操作系统(60年代末,70年代初),Unix并没有将文件名与实际的目录信息(文件存储在磁盘上的位置)一起存储。相反,Unix创建了一个单独的Inode表 ”包含目录信息并标识实际文件,然后允许单独的文本文件成为名称和inode的目录。 最初,目录文件的目的是像所有其他文件一样,以直接的文本文件的形式进行操作,使用与shell程序员熟悉的相同的工具( catcutsed等)。

这个架构决定的一个重要结果是一个文件可以有多个名字! 每个在特定目录文件中出现的inode实际上都是连接到inode,所以它是已知的。 要将文件名连接到文件的inode(“实际”文件),请“链接”该文件,并在从目录中删除该名称时将其“取消关联”。

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

由于这个原因,通过名称“删除”一个文件将取消它的链接 – 因此是系统调用的名称 – 还有一个非常重要的ln命令来创建文件的附加链接(实际上是文件的inode),并让它以另一种方式被知道。

另外,较新的操作系统及其文件系统必须模拟/遵守这种行为,以符合Posix标准。