Linux 指向文件的链接

Linux 指向文件的链接,linux,shell,file,ls,file-link,Linux,Shell,File,Ls,File Link,我想知道为什么每个文件都有一个指向自身的链接 我会尽量弄清楚的 通过从bash插入命令ls-l,您将得到一个文件列表,每个文件前面都有按列划分的不同数据。指向文件的链接数在第三列中。有人能解释一下为什么文件将该信息设置为1而不是0吗 我明白为什么目录有两个,如果你探索其中一个,你会发现。还有。子目录,前者指向目录本身,而后者指向上一个目录,但文件不能包含。子目录,因为它是一个文件,所以它不应该是0吗?因为第一个硬链接没有什么特别之处,软链接是不同的,它们实际上只是包含文件文本目标的特殊文件,只是

我想知道为什么每个文件都有一个指向自身的链接

我会尽量弄清楚的

通过从bash插入命令ls-l,您将得到一个文件列表,每个文件前面都有按列划分的不同数据。指向文件的链接数在第三列中。有人能解释一下为什么文件将该信息设置为1而不是0吗

我明白为什么目录有两个,如果你探索其中一个,你会发现。还有。子目录,前者指向目录本身,而后者指向上一个目录,但文件不能包含。子目录,因为它是一个文件,所以它不应该是0吗?

因为第一个硬链接没有什么特别之处,软链接是不同的,它们实际上只是包含文件文本目标的特殊文件,只是一个指向其后面的目录项

这是决定将数据inode与对数据目录项的引用分离的结果

因此,不要将该文件视为一个目录条目,而将其他文件链接到它。想想看,不要把文件中的数据当作一件事,只要你需要引用多少个目录条目就可以。当您将目录条目a硬链接到现有的b时,实际上是将它链接到b后面的inode,它们在任何意义上都是相等的。只有当最后一个硬链接断开时,数据才会被破坏。

因为第一个硬链接没有什么特别之处,软链接是不同的,它们实际上只是包含文件文本目标的特殊文件,只是一个指向其后面的目录项

这是决定将数据inode与对数据目录项的引用分离的结果


因此,不要将该文件视为一个目录条目,而将其他文件链接到它。想想看,不要把文件中的数据当作一件事,只要你需要引用多少个目录条目就可以。当您将目录条目a硬链接到现有的b时,实际上是将它链接到b后面的inode,它们在任何意义上都是相等的。只有当数据的最终硬链接断开时,数据才会被销毁。

您看到的文件名是指向表示该文件的基础对象的硬链接,具有0个链接的文件会被文件系统自动删除。

您看到的文件名是指向表示该文件的基础对象的硬链接,文件系统会自动删除具有0个链接的链接。

您误解了指向文件索引节点的链接数量,而实际上是指向文件本身的链接点见下文

请考虑一下链接的可能性…链接是目录中的一个条目,它将名称与索引节点相关联。inode表示存储在文件或目录中的所有管理数据,并存储权限位、上次读取、上次写入或上次inode更改的日期、指向文件数据块的指针等

每个inode中都有一个整数字段,反映指向它的链接数,这就是ls所显示的。这是出于效率原因而需要的,因为它是冗余信息。只需浏览整个文件系统,我们就可以确定指向同一索引节点的目录项的数量。。。但这是不切实际的,因此每次链接或取消链接节点时都会保持链接计数。所以下一个问题是:为什么指向文件inode的目录条目的数量是必需的?这是记账的原因。为了检测何时达到零,正因为如此,内核保持指向inode的链接数,以便释放属于inode和inode本身的所有块,以便在上次计数器降至零时解除文件链接后恢复数据

通常,一个文件至少有一个这样的链接,但它可以有更多。如果执行如下命令:

ln foo bar
您正在为文件foo创建一个别名,该别名现在也称为bar。如果您现在列出目录,您将看到两个文件条目在“链接数”字段中都有2个。更多关于,如果你执行

ls -li foo bar
您将看到第一列,显示inode编号这是两个文件的文件系统中的一个文件的唯一id,作为相同的inode。。。如果您更改其中一个链接的权限,您将看到另一个文件名他的权限也更改了。。。这是因为两个文件名都是同一文件的别名

关于我的第一段,多个链接和指向它本身不是一回事。每个目录都有一个指向目录本身的索引节点的条目。这是入口。每个目录都有这个条目,这样您就可以在没有参数的情况下执行ls命令,例如,当您不指定参数时,ls命令使用。作为要列出的目录,这使得一个目录始终有2个作为 一个文件的最小值为1,加上的链接。每个目录都有一个目录,对于这个数字,检查一下这个,你会发现这是unix系统的一个不变量,目录的索引节点中有2+个\u的子目录,一个用于父目录中指向目录本身的条目,一个用于目录条目。在目录本身中,每个子目录的条目对应一个。。父目录,在该目录的子目录中检查数字,它不会失败。对于文件,是一个文件可以拥有的链接或别名的数量。在列出目录时,您无法看到具有0链接的文件,这些文件(如果存在)正在由内核处理,在清除它们的任务中释放它们使用的块目录不能有不同的别名或名称作为文件,以保留分层目录结构,只有两个例外。和这些都是允许的,并且由内核维护和强制执行。

您误解了指向文件inode的链接数量,而事实上,指向文件inode本身的链接点见下文

请考虑一下链接的可能性…链接是目录中的一个条目,它将名称与索引节点相关联。inode表示存储在文件或目录中的所有管理数据,并存储权限位、上次读取、上次写入或上次inode更改的日期、指向文件数据块的指针等

每个inode中都有一个整数字段,反映指向它的链接数,这就是ls所显示的。这是出于效率原因而需要的,因为它是冗余信息。只需浏览整个文件系统,我们就可以确定指向同一索引节点的目录项的数量。。。但这是不切实际的,因此每次链接或取消链接节点时都会保持链接计数。所以下一个问题是:为什么指向文件inode的目录条目的数量是必需的?这是记账的原因。为了检测何时达到零,正因为如此,内核保持指向inode的链接数,以便释放属于inode和inode本身的所有块,以便在上次计数器降至零时解除文件链接后恢复数据

通常,一个文件至少有一个这样的链接,但它可以有更多。如果执行如下命令:

ln foo bar
您正在为文件foo创建一个别名,该别名现在也称为bar。如果您现在列出目录,您将看到两个文件条目在“链接数”字段中都有2个。更多关于,如果你执行

ls -li foo bar
您将看到第一列,显示inode编号这是两个文件的文件系统中的一个文件的唯一id,作为相同的inode。。。如果您更改其中一个链接的权限,您将看到另一个文件名他的权限也更改了。。。这是因为两个文件名都是同一文件的别名


关于我的第一段,多个链接和指向它本身不是一回事。每个目录都有一个指向目录本身的索引节点的条目。这是入口。每个目录都有这个条目,这样您就可以在没有参数的情况下执行ls命令,例如,当您不指定参数时,ls命令使用。作为要列出的目录,这使得一个目录始终至少有2个,即您为一个文件观察到的1,加上的链接。每个目录都有一个目录,对于这个数字,检查一下这个,你会发现这是unix系统的一个不变量,目录的索引节点中有2+个\u的子目录,一个用于父目录中指向目录本身的条目,一个用于目录条目。在目录本身中,每个子目录的条目对应一个。。父目录,在该目录的子目录中检查数字,它不会失败。对于文件,是一个文件可以拥有的链接或别名的数量。在列出目录时,您无法看到具有0链接的文件,这些文件(如果存在)正在由内核处理,在清除它们的任务中释放它们使用的块目录不能有不同的别名或名称作为文件,以保留分层目录结构,只有两个例外。和是允许的,并且由内核维护和实施。

Ok,那么在目录中什么是。链接?目录只是一个包含名称的文件。。是parentOk的名称,那么在目录中什么是。链接?目录只是一个包含名称的文件。。我喜欢你的解释,非常感谢。让我直说吧,如果我们谈论的是目录,那么第一个硬链接是从目录条目到条目的数据inode a.k.a,而第二个链接是前一个目录和条目数据之间的链接,即。后者是什么
链接的nd是什么?对于子目录,它们的链接是什么?如果我添加了一个符号链接,计数器会增加吗?有人告诉我,这很难计算links@B.Castarunza:符号链接对链接计数没有影响,它们是在很久以后添加的。但请记住:inode(无论是目录还是常规文件)没有固有的名称,它只是磁盘上的数据,由inode编号标识。目录条目映射名称,包括。和到一个inode。命令mkdir/tmp/qq将使用目录条目/tmp/dd和/tmp/dd/中的两个链接创建该目录,并且/tmp的链接计数将由于/tmp/dd/而增加。。。由touch/tmp/ff创建的文件只有一个,来自目录条目/tmp/ff,或者更清晰。链接计数只是指引用基础数据/inode的目录项的数量。这个计数在功能上属于inode本身,而不是引用它的单个目录项。明白了,所以每个指向inode的硬链接都有相同的计数器值。我喜欢你的解释,非常感谢。让我直说吧,如果我们谈论的是目录,那么第一个硬链接是从目录条目到条目的数据inode a.k.a,而第二个链接是前一个目录和条目数据之间的链接,即。后者是什么样的链接?对于子目录,它们的链接是什么?如果我添加了一个符号链接,计数器会增加吗?有人告诉我,这很难计算links@B.Castarunza:符号链接对链接计数没有影响,它们是在很久以后添加的。但请记住:inode(无论是目录还是常规文件)没有固有的名称,它只是磁盘上的数据,由inode编号标识。目录条目映射名称,包括。和到一个inode。命令mkdir/tmp/qq将使用目录条目/tmp/dd和/tmp/dd/中的两个链接创建该目录,并且/tmp的链接计数将由于/tmp/dd/而增加。。。由touch/tmp/ff创建的文件只有一个,来自目录条目/tmp/ff,或者更清晰。链接计数只是指引用基础数据/inode的目录项的数量。该计数在功能上属于inode本身,而不是引用它的单个目录项。明白了,因此指向inode的每个硬链接都将具有相同的计数器值