您的位置首页>企业动态>

Linux系统中软链接和硬链接到底有什么区别

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux系统中软链接和硬链接到底有什么区别问题。我们知道文件有文件名和数据,在Lin

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux系统中软链接和硬链接到底有什么区别问题。

我们知道文件有文件名和数据,在Linux上分为两部分:用户数据和元数据。记录文件真实内容的用户,即文件数据块;元数据是文件的附加属性,例如文件大小、创建时间、所有者和其他信息。在Linux中,元数据中的索引节点号(索引节点是文件元数据的一部分,但它不包含文件名,索引节点号是索引节点号)是文件的唯一标识符,而不是文件名。文件名只是为了方便人们的记忆和使用,系统或程序通过索引节点号搜索正确的文件数据块。而且有一种方法可以快速找到数据元素,那就是软硬链接,我们来看看。

什么是链接?

简单地说,链接实际上是一种文件共享的方式,这是POSIX中的一个概念。主流文件系统都支持链接文件。

它是用来做什么的?

你可以简单的把链接理解为Windows中常见的快捷方式(或者OS X的body double),在Linux中经常用来解决一些库版本的问题,通常会把一些目录层次比较深的文件链接到一个更容易访问的目录。出于这些目的,我们通常使用软链接(也称为符号链接)。

内容

软链接和硬链接有什么区别?让我们言归正传,讨论一下软链接和硬链接的区别。

首先,从使用的角度来看,两者没有区别。它们都支持读写,就像普通的文件访问方法一样,如果是可执行文件,可以直接执行。

那有什么区别呢?关于基本原则。

为了解释清楚,我们首先在自己的一个工作目录中创建一个文件,然后创建一个指向该文件的链接:

$ touch myfile echo“这是一个纯文本文件。”这是一个纯文本文件。

现在我们已经创建了一个不能再普通的文件。然后我们创建一个硬链接并检查当前目录:

$ ln my file hard $ ls-Li 25869085-rw-r-r-2 UNIX zii员工27 7 8 17:39 hard 25869085-rw-r-r-2 UNIX zii员工27 7 8 17:39 myfile

在ls结果的最左边一列,它是文件的索引节点值,在c语言中你可以简单地认为它是一个指针。它指向物理硬盘的一个块。事实上,文件系统维护一个引用计数。只要一个文件指向这个块,它就不会从硬盘上消失。

如您所见,这两个文件就像一个文件,具有相同的索引节点值,并且指向相同的数据块。

然后我们修改刚刚创建的硬链接文件:

$ echo 'New line' hard $ cat myfile这是一个纯文本文件。换行

可见这两个文件确实是一个文件。我们来看看软链接(即符号链接)和它的区别。

$ ln -s myfile soft $

诶,你会发现这个软链接的inode其实是不一样的,它的file属性也有一个l标志,也就是说和我们之前创建的两个文件不是一个类型。

ent: 2em;">下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:

$ rm myfile $ cat hard This is a plain text file. New line $ cat soft cat: soft: No such file or directory

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。 然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

为验证这一猜想,我们再向这个软链接写点东西:

$ echo"Something">> soft $ ls hard myfile soft

可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。

总结

总结到这里我们其实可以总结一下了:

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。而有一种方法可以快速的寻找到数据元,那就是软硬链接,让我们一起来看一下吧。

什么是链接?

链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

它是用来干什么的?

你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS X 中的替身),Linux 中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。在这些用途上,我们通常会使用到软链接(也称符号链接)。

内容

软链接和硬链接的区别是?下面我们进入正题,来探讨一下软硬两种链接到底有什么区别?

首先,从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。

那区别在哪呢?在底层的原理上。

为了解释清楚,我们首先在自己的一个工作目录下创建一个文件,然后对这个文件进行链接的创建:

$ touch myfile && echo"This is a plain text file."> myfile $ cat myfile This is a plain text file.

现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查看一下当前目录:

$ ln myfile hard $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile

在 ls 结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

你也看到了,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。

然后我们修改一下刚才创建的 hard 链接文件:

$ echo"New line">> hard $ cat myfile This is a plain text file. New line

可以看到,这两个文件果真就是一个文件。 下面我们看看软链接(也就是符号链接)和它有什么区别。

$ ln -s myfile soft $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 hard 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile 25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft ->myfile

诶,你会发现,这个软链接的 inode 竟然不一样啊,并且它的文件属性上也有一个 l 的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。

下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:

$ rm myfile $ cat hard This is a plain text file. New line $ cat soft cat: soft: No such file or directory

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。 然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

为验证这一猜想,我们再向这个软链接写点东西:

$ echo"Something">> soft $ ls hard myfile soft

可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。

总结

总结到这里我们其实可以总结一下了:

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content:"广告"; } .dfma img { display: block; }
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。