在Linux系统中,一定会遇到这样一种文件,当我们使用ll 或者ls -l命令来查看他的时候,他的权限这一项中会显示的第一个英文字母为l,这便是代表他是链接文件。
而链接文件有分为软链接和硬链接两种,那他们有什么区别呢?我这就来从以下八个方面来为大家介绍一下他们的区别。

  • 1.链接文件与原文件是否是同一个文件?
    要想回答这个问题,首先要知道的是何为硬链接,何为软链接。硬链接呢,通俗的来讲,就是给一个文件起了另外一个名字,就和咱们一样,也许都有自己的外号,但是无论叫哪一个名字,喊得都是自己,而软链接,就相当于Windows系统中的快捷方式,他不是文件本身,只不过是一个指向原文件的指针,唯一和Windows快捷方式不同的就是,Windows的快捷方式是图标,而它不是。
    当我们知道了这一点,刚开始的问题也就迎刃而解了:

    • 硬链接:他与原文件是同一个文件,只不过是另一种名字
    • 软链接:他与原文件不是同一个文件,他只是一个指向标
  • 2.inode Number(i节点)是否相同?
    所谓的i节点就是每个文件与目录在创建的时候,就会有一个编号贴在他们身上,和我们的身份证号码一样,i节点也就是他们的身份证,而它们在每一个分区中都是唯一的,在一个挂载点之下,便是一个分区,因为硬链接他们本身就是同一个文件,所以他们的i节点也是相同的,这一点很好理解,不同外号的人,身份证号码一样。而软链接就不一样了,因为软链接本身就是一个链接文件,和它指向的文件简然不同,所以他也有属于自己的i节点。
    这里还有一个小知识要说:

    • 在CentOS7上i节点编号为64的是分区挂载点
    • 在CentOS6上i节点编号为2的才是分区挂载点
      i节点=1的是proc与sys这两个虚拟内存
  • 3.原始文件删除,链接文件是否可以访问?
    要想明白这一点,我们需要画个简单的图:
    Linux 软链接与硬链接区别_软链接
    这便是硬链接,他们两个名字指向的是磁盘里面的同一块区域,里面的内容也都一样。
    而我们删除了硬链接的原始文件,只不过是断了一条联系,而硬链接靠自己的这一条也可以找到硬盘存放文件的位置,所以它依旧可以访问。

    Linux 软链接与硬链接区别_linux_02

    而软链接就不一样了,如同:
    Linux 软链接与硬链接区别_运维_03
    软链接文件s先指向原文件,然后才通过原文件找到磁盘存放文件的位置,一旦原文件被删除,这条顺藤摸瓜的路便被拦腰斩短,所以也就不可访问了。

  • 4.是否可以跨分区创建?
    因为硬链接的本质是同一块硬盘地址,所以一个文件不能在其他分区创建自己的硬链接,硬盘的分区不同,他们自然也就不能诞生了。而软链接,不管你的原文件在哪,只要告诉软链接路径,他就能跨越山和大海,隔着分区来拥抱你的原文件,这便是他们在这一点的区别。

  • 5.原文件的链接数是否增加?
    在创建硬链接之后,文件多了一个名字,便多了一个链接数,所谓的链接数就是在你输入ls -l或者ll的时候,显示在第二列的内容,他就是显示文件名称的个数,而软链接没有重新起名字,所以它的链接数不增加。这里要说一点:你可以发现,目录的链接数为2,这是为什么呢?难道它们自动创建了链接吗?我们一会来说。

  • 6.他们的大小是否有明显区别?
    硬链接是文件本身,所以原文件有多大,他就是多大,而软链接只不过是一个指示标,它的大小是有它的路径名称大小决定的,所以一般来说也就几KB,或者十几KB。

  • 7.是否支持对目录创建?
    我们在反回来谈这一点,硬链接是不支持对目录创建的,这是因为系统采用的数据结构和算法的限制,防止进入死循环,它是和i节点相关联的,而i节点和文件相关,所以一个硬连接只能对应一个文件。如果想让一个硬连接到一个目录,就只能对这个目录下的所有文件都建立硬连接,如果将来这个目录下又有新文件了,就又要创建硬连接,这便是死循环。但是软链接就不一样了,它指向原文件,所以对软链接的操作都实际上是在操作它所指向的原文件,这又有什么不可的呢?其实说到底,只不过是由它们的底层原理所造成的。现在来回答一样刚才的问题,目录文件的两个链接数是哪来的呢?那是因为在每个文件夹下面,都有两个隐藏起来的小东西,".“和”…",你可以通过ls -a命令来找到它。这是表示当前目录和上级目录的相对路径,如果一个目录有上级目录也有下级目录,他的链接数就会为3。

  • 8.相对路径的写法是否一样?
    对于硬链接来说,他的相对路径是相对于当前目录来说的,但是对于软链接来说,是指原文件相对于软链接位置的相对路径,不能是相对于当前目录的相对路径,意思就是从软链接的位置开始一直倒退回根目录,然后在前进到原文件所在目录
    举个例子吧:
    在根下的/tmp/XL/a 下有一个a文件,我们想把软链接创建在/tmp/d1/d2/d3/下为a-soft,具体操作为这样:
    ln -s …/…/…/…/…/tmp/LX/a /d1/d2/d3/a-soft
    这便是软链接的相对路径创建法。

好啦,说了这么多,相信大家已经对这软硬链接也有了自己的理解了,我写的Linux基础学习与网络教程已经全部更新完啦,有兴趣的可以去看看!!!