这两个命令之间真正的区别是什么?为什么删除文件的系统调用叫unlink
代替delete
?
你需要了解一些关于原始 Unix 文件系统的知识才能理解这个非常重要的问题。
与同时代的其他操作系统(60 年代末、70 年代初)不同,Unix 没有将文件名与实际文件名一起存储。目录信息(文件存储在磁盘上的位置)。相反,Unix 创建了一个separate "索引节点表“包含目录信息,并识别实际文件,然后允许单独的文本文件成为名称和索引节点的目录。最初,目录文件应该像所有其他文件一样作为直接文本文件进行操作,使用相同的工具(cat, cut, sed等)是 shell 程序员至今所熟悉的。
这一架构决策的一个重要后果是单个文件可以有多个名称!特定目录文件中索引节点的每次出现本质上都是linking到 inode,所以它是已知的。要将文件名连接到文件的索引节点(“实际”文件),您需要“链接”它,而当您从目录中删除该名称时,您需要“取消链接”它。
当然,取消文件名链接确实可以not自动意味着您正在从磁盘中删除/删除该文件,因为该文件在其他目录中可能仍以其他名称命名。 Inode表还包括一个链接数跟踪一个 inode(一个文件)有多少个名字;将名称链接到文件的链接计数会增加 1,取消链接则会删除链接计数。当链接计数降至零时,该文件不再在任何目录中被引用,被认为是“不需要的”,只有这样才能将其删除。
因此,按名称“删除”文件unlinks它 - 因此是系统调用的名称 - 并且还有非常重要的ln命令创建一个到文件(实际上是文件的索引节点)的附加链接,并以另一种方式显示它。
其他较新的操作系统及其文件系统必须模拟/尊重此行为才能符合 Posix 标准。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)