Windows文件系统中的软硬链接(实现文件夹不同磁盘存储):
https://blog.csdn.net/qq_41941900/article/details/143106885
文章目录 |
一、引言
在文件系统中,链接(Link)是一个重要的概念,它允许用户或系统通过不同的路径名访问同一文件或目录。链接分为硬链接(Hard Link)和软链接(Soft Link)两种。
二、软硬链接的创建
在Linux中,要制作链接文件就必须要使用 ln 这个指令。
ln 目标文件 硬链接文件
-s :如果不加任何参数就进行链接,那就是硬链接,至于 -s 就是软链接。
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!
1、硬链接(Hard Link)的创建:
创建硬链接的语法是:
ln 目标文件 硬链接文件
例如,要将test.txt
硬链接到link_hard
,可以执行以下命令:
ln test.txt link_hard
这样就在当前目录下创建了一个名为link_hard
的硬链接文件,它指向test.txt
。
2、软链接(Soft Link)的创建:
软链接是一个特殊的文件,它包含了另一个文件的路径名。创建软链接的语法是:
ln -s 目标文件或目录 软链接的文件或目录
例如,要将test.txt
软链接到link_soft
,可以执行以下命令:
ln -s test.txt link_soft
这样就在当前目录下创建了一个名为link_soft
的软链接文件,它指向test.txt
。
三、硬链接(Hard Link)详解
1、硬链接的定义
硬链接允许一个文件拥有多个文件名。这些文件名指向同一个inode,而该inode节点包含了文件的元信息(如文件大小、权限、所有者等)以及指向文件数据的指针,且文件所在的目录的inode与block的容量不发生改变。
简而言之,硬链接创建的是文件的一个别名,而不是文件的副本。
2、硬链接的工作原理
a、inode节点与硬链接的关系
每个文件在文件系统中都有一个唯一的inode编号,而文件名只是inode节点的一个引用。当创建一个硬链接时,实际上是在文件系统的目录结构中为同一个inode节点创建了一个新的引用。因此,一个文件可以有多个文件名,而它们指向的都是同一个文件数据。
由于硬链接和原文件指向同一个inode节点,它们具有相同的属性(如权限、所有者等),并且任何对硬链接的修改都会影响到原文件。同时,只有当最后一个指向该文件的硬链接被删除时,文件数据才会被真正删除。这是因为inode节点的引用计数会跟踪指向它的硬链接数量,只有当引用计数减至零时,系统才会释放文件数据所占用的磁盘空间。
b、引用计数与硬链接
引用计数是文件系统中inode节点的一个属性,用于跟踪指向该inode节点的硬链接数量。
上图标红的地方是其所在行的文件的引用计数。引用计数确保了在所有指向文件的硬链接都被删除之前,文件的数据不会被系统删除或回收。
下图将test.txt
硬链接到link_hard
:
从图中我们易观察出:删除test.txt文件后,引用计数减一,文件中的数据仍然存在。
- 创建硬链接:当为一个文件创建一个新的硬链接时,该文件的inode节点的引用计数会增加。这是因为新的硬链接(即新的文件名)也指向了同一个inode节点。
- 删除硬链接:当删除一个硬链接时,文件的 inode 节点的引用计数会减1。但文件的数据仍然保留在磁盘上,因为还有其他硬链接指向它。
- 删除文件:当文件的最后一个硬链接被删除时(即引用计数减至零),文件的inode bitmap和block bitmap 会将其所在位置为0,当前inode可以被分配给其他的新建文件。即,文件并没有真正的删除,只有覆盖才有可能真正的删除(即新建的文件恰好使用该块存储数据即把原来的数据覆盖了)。
3、硬链接的特点
硬链接(Hard Link)一些主要特点:
- 相同的文件数据:硬链接指向的是文件的实际数据,而不是文件的名称或位置。因此,所有指向同一inode节点的硬链接都访问相同的文件数据。
- 无额外磁盘空间:与软链接不同,硬链接不会为文件创建新的磁盘空间。它只是为文件在文件系统的目录结构中创建了一个新的引用或别名。因此,无论一个文件有多少个硬链接,它只占用磁盘上的一份数据空间。
- 引用计数:每个inode节点都有一个引用计数,表示指向该inode节点的硬链接数量。当创建一个新的硬链接时,引用计数增加;当删除一个硬链接时,引用计数减少。只有当引用计数减至零时,系统才会删除文件并释放其占用的磁盘空间。
- 不可跨文件系统:硬链接只能在同一个文件系统中创建,因为inode节点号是文件系统特有的。如果尝试在不同的文件系统之间创建硬链接,系统会报错并拒绝该操作。
- 不能链接到目录:通常不允许为目录创建硬链接,因为这可能导致循环引用和文件系统不一致。如果尝试为目录创建硬链接,系统会报错并拒绝该操作。
这是因为如果使用硬链接到目录时, 链接的数据需要连同被链接目录下面的所有数据都创建链接,举例来说,如果你要将/etc 使用实体链接创建一个 /etc_hd 的目录时,那么在 /etc_hd 下面的所有文件名同时都与 /etc 下面的文件名要创建 hard link 的,而不是仅链接到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd 下面创建新文件时,连带的, /etc 下面的数据又得要创建一次硬链接,因此造成环境相当大的复杂度。 - 修改影响所有硬链接:由于硬链接指向的是相同的文件数据,因此对任何一个硬链接的修改都会影响到所有其他的硬链接。例如,如果修改了一个硬链接的文件内容,那么所有其他硬链接的文件内容也会被修改。
- 删除非最后一个硬链接无影响:如果删除了一个文件的非最后一个硬链接,那么该文件仍然保留在磁盘上,并且可以通过其他剩余的硬链接来访问。只有当删除了文件的最后一个硬链接时,文件才会被真正删除。
这些特点使得硬链接在某些场景下非常有用,例如备份文件、创建文件的多个访问点或共享文件等。然而,在使用硬链接时也需要注意其限制和潜在的问题,以避免数据丢失或文件系统损坏。
当使用mkdir
命令创建一个新的目录时,该目录在文件系统中会有一个对应的inode,并且这个inode的硬链接数(link count)通常是2。这是因为:
- 目录本身(
.
):每个目录都有一个指向自己的硬链接,表示为其名字是.。这是对该目录自身的引用。 - 父目录中的新建目录名:在创建新目录的父目录中,会新增一个指向新目录的条目,这个条目的名字是新目录的名字,并且它有一个指向新目录inode的硬链接。
同时,新目录内部也有一个指向父目录的硬链接,名字是..
。这个..
硬链接是在新目录创建时由文件系统自动添加的。
所以,一个新建的目录至少有两个硬链接:一个来自它自己(.
),另一个来自其父目录中的条目(通过名字和新目录的inode关联)。因此,当使用ls -ld 目录名
或stat 目录名
等命令查看目录的详细信息时,会发现其硬链接数(link count)是2。那么我们可以推断出, 一个目录下有多少个子目录。即,硬链接数减2得到。
四、软链接(Soft Link)详解
1、软链接的定义
软链接是一种特殊的文件类型,它保存了另一个文件的路径名。与硬链接不同,软链接不直接指向文件的inode节点,而是通过路径名来访问文件。因此,软链接允许跨文件系统的链接,且当被链接的文件被移动、重命名或删除时,软链接可能会失效(即成为“死链接”)。软链接的主要优点是灵活性,它允许用户在不移动文件本身的情况下,通过修改软链接来改变文件的访问路径。类似windows中的快捷方式。
2、软链接的工作原理
a、符号引用与目标文件的关系
相对于硬链接 ,软链接就是在创建一个独立的文件,具有自己的inode和权限等属性,但它并不包含目标文件或目录的实际数据。而这个文件会让数据的读取指向他 link 的那个文件的文件名。由于只是利用文件来做为指向的动作, 所以,当来源文件被删除之后,软链接的文件会“开不了”, 会一直说“无法打开某文件!”。实际上就是找不到原始“文件名”。
图中先建立一个名为empty.soft
的软链接,然后移动empty
目录,此时,尝试进入 empty.soft
目录的命令 cd empty.soft
失败,并显示错误消息 -bash: cd:empty.soft:No such file or directory
。这是因为 empty.soft
是一个软链接,并且它指向的路径不存在,所以 cd
命令无法进入该目录。
b、路径解析过程
当用户尝试访问软链接时,系统首先会识别出这是一个软链接文件,并读取其内容(即目标文件或目录的路径名)。然后,系统会使用这个路径名来查找实际的目标文件或目录。这个过程被称为路径解析。如果路径解析成功,系统就会像访问普通文件或目录一样,继续执行后续的操作(如读取数据、执行命令等)。如果路径解析失败(例如,目标文件或目录不存在、权限不足等),系统就会返回一个错误消息。
3、软链接的特点
软链接(Symbolic Link)具有一些独特的特点,这些特点使得软链接在文件管理和系统配置中非常有用。以下是软链接的一些主要特点:
-
跨文件系统
软链接可以跨越不同的文件系统。由于软链接只是保存了目标文件或目录的路径名,而不是直接指向inode,因此它可以引用位于另一个文件系统中的文件或目录。这使得软链接在处理分布在多个文件系统中的文件时特别有用。 -
链接到目录
软链接可以指向目录,而不仅仅是文件。这使得用户可以为目录创建别名或快捷方式,方便在不同的位置访问同一个目录。 -
路径名可更改
软链接所保存的路径名可以更改,这意味着可以重新定位软链接以指向不同的文件或目录。只需编辑软链接文件的内容,将其指向新的路径名即可。这种灵活性使得软链接在需要更改文件或目录位置时非常有用。
-
链接断开
如果软链接所指向的目标文件或目录被移动、重命名或删除,软链接就会成为一个“死链接”。此时,尝试访问软链接将会导致错误,因为系统无法找到它所引用的目标文件或目录。然而,这并不意味着软链接本身被删除,只是它不再指向有效的目标。 -
权限和所有权
软链接的权限和所有权与它所指向的文件或目录无关。软链接本身具有自己的权限和所有权,这些权限决定了哪些用户可以读取、写入或执行软链接。然而,访问软链接所指向的文件或目录时,仍然需要遵守目标文件或目录的权限和所有权规则。 -
易于创建和删除
在Linux系统中,可以使用ln -s命令轻松创建软链接。同样地,使用rm命令可以像删除普通文件一样删除软链接。这使得软链接的创建和删除变得非常简单和直观。 -
符号引用
软链接通过符号引用指向目标文件或目录。这意味着软链接实际上是一个指向目标文件或目录路径名的特殊文件。这种符号引用的方式使得软链接在处理文件路径时更加灵活和方便。 -
透明性
对于大多数应用程序和命令来说,软链接是透明的。这意味着当应用程序或命令访问软链接时,它们会自动解析软链接并访问目标文件或目录。用户通常不需要知道他们正在与软链接交互,而是可以直接使用它们就像使用普通文件或目录一样。
这些特点使得软链接在文件管理和系统配置中非常有用,它们可以帮助用户更好地组织文件、创建快捷方式、实现文件共享和跨文件系统引用等功能。
五、软硬链接的对比
-
工作原理:
- 硬链接通过多个目录项指向同一个inode来实现。
- 软链接则通过保存目标文件或目录的路径名来实现。
-
跨文件系统:
- 硬链接只能在同一文件系统中创建,因为它们直接指向inode。
- 软链接可以跨文件系统创建,因为它们只是保存了路径名。
-
链接到目录:
-
硬链接不能链接到目录。为了保护文件系统的完整性,Linux系统禁止创建指向目录的硬链接。
-
Linux中不允许给目录建立硬链接,这主要是基于以下几个原因:
- 防止目录循环引用:硬链接与源文件共享相同的inode(inode节点)号。如果允许目录建立硬链接,可能会导致多个等效的入口点指向同一个目录,从而在目录树中形成环形结构。这样的结构会使得像文件遍历这样的操作陷入无限循环,可能导致文件系统损坏。
- 保护文件系统的结构完整性:Linux的文件系统是一个树形结构,根目录为根节点。如果允许目录建立硬链接,可能会破坏这个结构,甚至形成循环,这对于需要遍历目录树的命令来说是致命的。为了避免对目录树结构的破坏,Linux不允许对目录建立硬链接。
- 简化文件系统的设计:引入对目录的硬链接可能导致文件系统设计和维护的复杂性增加。由于硬链接和原始文件或目录共享相同的inode,系统无法准确地判断目录的链接数目,给文件系统的维护带来困难。
- 保持文件系统的一致性和数据的安全:如果允许硬链接到目录,可能会导致文件系统的循环链接,使得文件系统无法正常工作,甚至可能导致数据丢失。为了保证文件系统的一致性和数据的安全,Linux不允许对目录建立硬链接。
综上,Linux不允许给目录建立硬链接是为了防止目录循环引用、保护文件系统的结构完整性、简化文件系统的设计以及保持文件系统的一致性和数据的安全。除非系统自己给目录建立硬链接。
-
-
软链接支持对目录创建。
-
-
对原文件的依赖关系:
- 硬链接和原文件是平等的,它们共享相同的inode和数据块。删除任何一个硬链接都不会影响其他硬链接或原文件,只有当所有指向该inode的硬链接都被删除时,inode和数据块才会被释放。
- 软链接依赖于原文件。如果删除软链接所指向的原文件或目录,软链接就会失效(成为死链接)。但删除软链接本身不会影响原文件或目录。
-
inode编号:
- 硬链接的inode编号是相同的。
- 软链接的inode编号与它所指向的目标文件或目录的inode编号不同。
-
磁盘空间占用:
- 硬链接不占用额外的磁盘空间。因为硬链接只是文件的一个别名,它们共享相同的inode和数据块。
- 软链接占用少量的磁盘空间。软链接是一个特殊的文件,它包含了指向目标文件或目录的路径信息,所以需要一定的磁盘空间来存储这个路径信息。
Windows文件系统中的软硬链接(实现文件夹不同磁盘存储):
https://blog.csdn.net/qq_41941900/article/details/143106885
总结
1:工欲善其事必先利其器,先下载好所有需要的工具
2:教程中混插这图文注释,不便之处多情谅解
3:这么保姆级的系统教学了,点个赞再走呗 ❤️