Linux的硬链接和软连接

软链接与硬链接的区别(通俗):
                     硬链接可认为是一个文件拥有两个文件名;而软链接则是系统新建一个链接

                     文件,此文件指向其所要指的文件。
                     此外,软链接可对文件和文件夹,而硬链接仅针对文件。

查看索引节点号命令行:ls -li
一、硬链接(Hard Link 实体链接)
    为了说清原理,这要从分区说起,一块分区要想使用,首先要格式化。而格式化是要做两件事的。

一件是将分区分成等大小的数据块;另一件就是建立一个分区表,在这个表中会给每个文件建立一行它

的相关数据,比如会包括它的i节点号,修改时间,存储的位置等。
    硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防

止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接

并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会

被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

     我们看下面的一张图:

                         

软连接 centos 查看_软连接 centos 查看


    比如我们建立的一个文件,那么当我们想读取这个文件的时候,它不是直接到存储中找。而且先通

过i节点号确定到分区表中的位置,然后找到分区表中这个文件的存储位置,然后按照指引到存储中找到

这个文件的数据,也就是图中分区里被打红色勾的那些数据块。最后将这个数据块返回即可。
    了解到这些东西。那么我们创建出这个文件的硬链接,当我们通过这个硬链接读取文件的时候,它的

查找过程是怎么样的呢?如下图:

                   

软连接 centos 查看_硬链接_02


  通过这个硬链接读取文件的查找过程如图中蓝色线条所示。也就是说硬链接和原来的文件的i节点号相同,

因此定位到分区表中相同的数据,自然通过相同的指引找到存储中相同的数据块来返回。
  那么硬链接和原文件到底是什么关系的,其实就相当于一个文件的两个名字。也就是一份文件,你给它命

名了不同的名字而已。或者做一个形象的比喻,就是一间教室的两扇门,无论你推开哪一道门都会进入教室。

那么如果你封掉一个门,通过另一道门仍然可以进入教室。对应于如果你删掉原文件,那么通过硬链接仍旧

可以读取数据。如果你修改数据,那么无论通过原文件还是硬链接来读取访问,都是生效的。但是不能跨分

区创建硬链接,这就好比一间教室的门不可能开在另外一栋楼上。
     下面总结一下硬链接的特征:
     (1)和原文件拥有相同的i节点和block块,相当于同一个文件。
     (2)可通过i节点识别
     (3)不能跨分区
     (4)不能针对目录使用
二、软连接(Symbolic Link 符号连接
    下面说一说软链接,一句话就可以概括,软链接和windows下的快捷方式是一样的。

    继续看一张图,如下:

         

软连接 centos 查看_软链接_03

   

   在这里,创建的是文件的一个软链接。通过它读取文件的过程如上图粉红色线所示。从图

中可以看到软链接的i节点和原文件的i节点不一样,在分区表中它有自己的数据。其实软

链接拥有自己的i节点和数据块,在它的数据块中存储的是原文件的文件名和i节点。在通

过软链接读取的时候就是先通过软链接的数据块找到原文件的i节点,然后按照指引再最终

找到存储中的数据。说白了,这跟windows中的快捷方式是一样的。
  那么软链接的特征呢?如下:
 (1)类似于windows快捷方式
 (2)软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,     

   并没有实际的文件数据。
 (3)原文件和软链接,修改任意一个,对方都会发生改变
 (4)删除了原文件,软链接不可用。

三、四点不同
 (1)软连接可以 跨文件系统 ,硬连接不可以 。
  实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录下bb。ln -s aa.txt
  /root/bb 连接成功 。ln aa.txt /root/bb 失败 。
 (2)关于 I节点的问题 。硬连接不管有多少个,都指向的是同一个I节点,会把 结点连接数增加 ,只要结

  点的连接数不是 0,文件就一直存在 ,不管你删除的是源文件还是连接的文件。只要有一个存在 ,文件就

  存在(其实也不分什么源文件连接文件的,因为他们指向都是同一个 I节点)。当你修改源文件或者连接文件
  任何一个的时候 ,其他的 文件都会做同步的修改 。软链接不直接使用i节点号作为文件指针,而是使用文件路

  径名作为指针。所以 删除连接文件 对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件 。

  软链接有自己的inode,并在磁盘上有一小片空间存放路径名。
 (3)软连接可以对一个不存在的文件名进行连接 。
 (4)软连接可以对目录进行连接。

备注:I节点:它是UNIX内部用于描述文件特性的数据结构。我们通常称I节点为文件索引结点(信息结点)。i节点

        含有关于文件的大部分的重要信息,包括文件数据块在磁盘上的地址。每一个I节点有它自己的标志号,我们

        称为文件顺序号。I节点包含的信息 1.文件类型 2.文件属主关系 3.文件的访问权限 4.文件的时间截。

四、ln命令的使用:
    ln [参数][源文件或目录][目标文件或目录]
       命令参数
       必要参数:
               -b 删除,覆盖以前建立的链接
               -d 允许超级用户制作目录的硬链接
               -f 强制执行
               -i 交互模式,文件存在则提示用户是否覆盖
               -n 把符号链接视为一般目录
               -s 软链接(符号链接)
               -v 显示详细的处理过程
       选择参数:
               -S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>"
               -V "-V<备份方式>"或"--version-control=<备份方式>"
               --help 显示帮助信息
               --version 显示版本信息