LINUX的硬链接不能链接到目录?这是为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX的硬链接不能链接到目录?这是为啥?相关的知识,希望对你有一定的参考价值。

LINUX的硬链接不能链接到目录?这是为什么?

我在新建了一个/test 但是我用

#ln /test /testhard

给这个目录创建一个硬链接是可以的啊,并且进行了对这个目录里的文件进行了复制、删除、移动等等操作,都反应出是可以做硬链接的啊。

为什么鸟哥的书上说不可以呢?

参考技术A 告诉你原理,一定要采用啊~~硬链接是和目标文件使用一个Indo,Indo会指示文件类型(目录、链接、普通文件等),如果可以为目录创建硬链接,这个文件该指示为链接还是目录呢?矛盾了,所以不能这样搞!!详细请看Linux kernel的VFS。 参考技术B 如果默认的情况下,是目录的话,又转成软连接本回答被提问者采纳

Linux的硬链接为何不能链接目录

Linux中的目录文件是特殊的文件,其中的数据是一个关联列表的,像c++中的map,或者Python中的dict,保存每个文件名(包括子目录,Linux中一切皆文件!)到iNode的映射。iNode本质是一个指针,指向文件的各种属性信息。

 

硬链接其实是“目录项”的等价词,这乍一看与我们的认知不符。我们常常认为“硬链接是为一个已有的对象创建一个额外的目录项”,但是硬链接用的最多的却是另外一种场景,就是当一个对象第一次被创建时,这时就要为这个对象创建一个目录项,这其实就是创建了一个硬链接!这就是建立了硬链接不仅可以实现从1到2的转变,更擅长实现从无到有的转变!

 

一个目录被创建时,其内部的文件数据,即目录项,中就有两个目录随即被创建,即“.”和“..”。“.”指向当前目录,“..”指向父目录,其实这是两个硬链接!,因此每个目录的硬链接数至少为2!根目录“/”的父目录“..”是其本身,其他目录则不允许其父目录是自身。在遍历目录树的过程中,如果不跟踪遍历过得iNode号就无法检测循环。虽然“..”指向父目录,但是在内核遍历目录的时候,这是单独处理的。如果其他子目录被允许链接到父目录,就会导致循环,这很容易出错。

 

以上是关于LINUX的硬链接不能链接到目录?这是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

硬链接与软链接

硬链接的关于Linux系统的硬链接

Linux下的硬链接和软链接

Linux命令学习记录

理解 Linux 的硬链接与软链接

Linux文件系统中硬链接和软链接的区别