05.硬链接理解

5.1创建硬链接的方式

  • 使用ln来创建一个硬链接(ln /home/ice/demo/file1.txt link1),==实际上是创建了一个新的文件名(路径名),这个新文件名和原文件名都指向相同的文件内容(数据块)==(这样的话,就是有多个文件什么(多个inode)的共享同一个数据块,所以即使删除了一个硬链接,文件数据都还存在,只要还有其他硬链接)-> ==这也体现出来linux中,文件名和文件数据是分开存储的==

并且很少会创建一个硬链接,一般都是创建软链接(相当于快捷方式,处理那些目录结构比较深的情况),并且创建软链接要用绝对路径(因为这样不管这个软链接移动到哪里都可以使用) (==示例:ln -s <想要定位的文件的路径> <快捷方式名称> ln -s /demo/ice/test.py test.py==)

[!TIP] 还有那些Download,Document,Videos这些软链接(快捷方式)都是在/home/<用户>/.config/user-dirs.dirs中定义的

  • 效果:
  1. 多路径访问:硬链接创建多个路径名,所有路径都指向相同的文件内容。
  2. 数据一致性:修改任一路径上的文件内容,所有路径的内容都会同步更新,因为它们指向相同的文件数据块。
  3. 文件数据保护:删除一个硬链接不会影响文件数据,只要还有其他硬链接存在。
  4. 独立文件名:每个硬链接都可以在不同的目录下,提供文件数据的多路径访问。

5.2硬链接的深度解析

  • 硬链接数(Hard Link Count)指的是指向同一个文件的硬链接数量

通俗理解:

[!NOTE]

  • 文件的硬链接数:表示有多少个路径名指向同一个文件内容。
  • 目录的硬链接数:表示有多少个不同的路径(包括自身和子目录的父指针)指向这个目录。

这也意味着:

  • 文件的硬链接数:反映了文件有多少个名字(路径名)。
  • 目录的硬链接数:反映了目录的引用数量,包括它自身、它的父目录的引用、以及它的所有子目录对它的引用。

示例:

/home/user     
├── dir1     
│   ├── subdir1     
│   └── subdir2     
└── dir2

有以上的目录结构,查看硬连接数:

ls -ld /home/user/dir1

输出:

drwxr-xr-x 4 user group 4096 Jun 18 12:34 dir1

4的理解:

  • dir1 本身的引用。
  • dir1 在其父目录 /home/user 中的引用(..)。
  • subdir1 中指向 dir1 的引用(..)。
  • subdir2 中指向 dir1 的引用(..)。