unix上unlink和rm的区别

unix上unlink和rm的区别,unix,ubuntu,system,delete-file,unlink,Unix,Ubuntu,System,Delete File,Unlink,这两个命令的真正区别是什么?为什么系统调用删除一个名为unlink的文件而不是delete?要理解这个非常重要的问题,您需要了解一些关于原始Unix文件系统的信息 与同时代(60年代末、70年代初)的其他操作系统不同,Unix没有将文件名与实际目录信息(文件存储在磁盘上的位置)一起存储。相反,Unix创建了一个单独的“Inode table”来包含目录信息,并标识实际文件,然后允许单独的文本文件作为名称和索引节点的目录。最初,目录文件与所有其他文件一样作为纯文本文件进行操作,使用的工具(cat、

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

要理解这个非常重要的问题,您需要了解一些关于原始Unix文件系统的信息

与同时代(60年代末、70年代初)的其他操作系统不同,Unix没有将文件名与实际目录信息(文件存储在磁盘上的位置)一起存储。相反,Unix创建了一个单独的“Inode table”来包含目录信息,并标识实际文件,然后允许单独的文本文件作为名称和索引节点的目录。最初,目录文件与所有其他文件一样作为纯文本文件进行操作,使用的工具(cat、cut、sed等)与shell程序员至今所熟悉的工具相同

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

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

出于这个原因,按名称“删除”一个文件会使其取消链接(因此系统调用的名称),还有一个非常重要的ln命令,用于创建指向文件的附加链接(实际上是文件的索引节点),并以另一种方式将其公开


其他较新的操作系统及其文件系统必须模仿/尊重这种行为,以符合Posix标准。

您所指的这个函数名为
delete()
?呃,delete()函数类似于remove(),您可能指的是
rm
命令吗?