Linux基础IO(八)之硬链接
文章目录
- 硬链接
- 如何理解硬链接?
- 硬链接应用场景
硬链接
ln a b 建立硬链接,后者指向前者b->a
硬链接不是一个独立的文件,因为他不是独立的inode
真正找到磁盘上文件的并不是文件名,而是inode
。
其实在linux
中可以让多个文件名对应于同一个inode
。
如何理解硬链接?
test.txt
和 hard-link
的inode
是一样的,所以两者的文件属性和文件内容都是一样的。
所以,我们可以更加确定文件名不在inode
里,因为两者文件名不一样
(如果在inode
里,文件名应该一样)。
所谓的建立硬链接,本质就是
在特定目录的数据块中
新增 文件名 和 指向文件的inode
编号 的映射关系!
也就是取别名。
inode
在,文件就在,数据块就在。
任意一个文件,无论是目录,还是普通文件,都有inode
每个inode内部,都有一个叫引用计数的计数器。
目录里面保存的是 文件名:inode
编号 的映射关系。
文件名1:inode
1234
文件名2:inode
1234
文件名3:inode
1234
文件名4:inode
1234
每个文件名都可以指向同一个inode
(指针)
引用计数表明有多少个文件指向这个inode
删掉test.txt
,硬连接数就变成了1
我们在删除文件时干了两件事情:
1.在目录中将对应的映射关系的记录删除
2.将硬连接数--
,如果为0,则将对应的文件删除。
硬链接应用场景
–> 为什么要用硬链接?
通常用来进行路径定位。
采用硬链接可以进行目录间的切换。
普通文件默认硬链接数是1(一个文件名对应一个inode
)
但是目录文件默认的链接数是2,why?
.
表示当前目录,..
表示上级目录
dir
的 inode
是50452655,进入 dir
之后,.
的inode
也是50452655
所以.
是dir
的一个硬链接。
..
的 inode
与 lesson22
的 inode
一样,所以 ..
指向上级目录。
根据inode
就可以找到该目录文件的路径。
dir
的引用计数变成了3,是因为dir
自己是1,在dir
里面的.
是2,然后在dir1里面的..
是3
根目录的引用计数是18,那么根目录里面就有16个有效目录。(软链接不算)
硬链接不允许给目录定义
可以给目录建立软链接,但是不允许建立硬链接
给目录建立软链接就是为了cd
方便,所有的软连接都是为了方便操作。
给目录建立硬链接会造成环路问题,出现系统级bug
目录内部有.
/..
就是当前目录和上级目录的硬链接。
用户不允许给目录建立硬链接,但是操作系统可以。
系统在进行搜索的时候不会对.
和..
这两个隐藏目录进行搜索。
.
/..
只是在路径定位的时候使用,不在搜索的时候使用。
所以.
/..
为了可以使用相对路径,就不用用长长的绝对路径了。