目录
前言
软连接
编辑
删除源文件
快捷应用
总结
硬链接
硬链接为何不能链接目录
为什么软连接可以
软硬链接区别
当前路径(.)和上级路径(..)
编辑
前言
- 在 Linux 中,文件的存储位置和数据(属性+内容)是由 inode 号来唯一标识的,而不是文件名。文件名主要是为了便于用户记忆和管理。系统和应用程序通过 inode 号来定位文件的数据块。基于这一点,我们可以更好地理解 Linux 中软链接和硬链接的概念,因为它们都是基于 inode 号来实现的。
- 换句话说,inode 号是文件真正的唯一标识符,它指向文件的数据块。文件名仅仅是 inode 的一个引用,使得用户能够方便地访问这些文件。
- 而软连接,硬连接连接是建立在inode上的;
软连接
将新的文件名关联到另外一个文件上,使得新的文件名也可以访问原文件;简单来说就是windows里面的快捷方式;
- 软链接有自己的 inode,并且指向目标文件的 inode。
- 如果目标文件被删除,软链接就会变成一个无效的链接,指向一个不存在的文件。
//建立软链接 -s代表soft
ln -s 源文件名 链接文件名
//删除软链接
rm 链接文件
或
unlink 链接文件
删除源文件
快捷应用
当一个文件藏在深层次时,可以设置软连接(快捷方式)方便使用
总结
- 软连接是一种特殊类型的文件,包含了另一个文件的路径信息,而不是直接指向源文件的文件数据inode;
- 当源文件被移动或删除时,软连接会失效,此时称为是悬空链接;
- 软连接可以跨文件系统,因为只保存了源文件的路径软链接包含的是另一个文件的路径,而不是直接指向文件数据的inode。
硬链接
指在文件系统中某个文件数据的指针,硬链接是文件数据的另一个名字;
- 每个硬链接都是指向同一个inode的额外文件名(重命名);
- 硬链接不创建新的inode,而是增加原有inode的链接计数(意味着不是一个独立的文件);
- 删除硬链接中任何一个不会影响文件的内容,除非所有的硬链接被删除,计数为0(cnt),此时文件的内容才是真的被释放
ln 原文件名 硬链接文件名
当创建了一个硬链接文件后,该硬链接文件和原文件的硬链接数都变成了2
硬链接为何不能链接目录
如果允许对目录创建硬链接,则可能导致循环链接的情况。
例如,如果目录 A 有一个硬链接指向目录 B,同时目录 B 也有一个硬链接指向目录 A
- 创建目录A和B
- 在A目录下创建B的硬链接
- 在B目录下创建A的硬链接
导致产生以下目录结构:
A -> B -> A -> B -> ...
这显然是一个无限循环,在文件系统中是不可能接受的。
为什么软连接可以
- 由于软链接包含路径信息而不是直接指向 inode,因此即使创建了指向目录的软链接,也不会导致循环链接的问题。
- 用户或程序可以通过解析软链接中的路径来访问目标目录。
假设有一个目录/home/user/dir,并且想要创建一个软连接到/home/user/test下,
ln -s /home/user/dir /home/user/test/my_dir
这里/home/user/test/my_dir是一个指向 /home/user/dir 的软链接。当你访问 /home/user/test/my_dir 时,系统会解析软链接中的路径,并让你能够访问 /home/user/dir/。
软硬链接区别
- 软链接是一个独立的文件,有独立的 inode,而硬链接没有独立的 inode
- 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的 inode 的映射关系,并写入当前目录
当前路径(.)和上级路径(..)
- 当新建一个普通文件时,引用计数(硬链接数)是1,因为只有一个文件名和inode号对应;
- 当建立一个目录时,引用计数是2,这是因为每个目录文件默认有当前路径(.)和上级路径(..)
(.)对应着当前目录文件,所以每个目录文件引用计数必是2,而在该目录文件下创建文件(仅直接父子关系)后,会增加引用计数,从而可判断该目录下有几个子目录