一:链接的概念

    在Linux系统中,链接可分为两种:一种被称为硬链接(Hard Link),另一种称为软链接或符号链接(Symbolic Link)。在默认不带参数情况下,执行ln命令创建的链接是硬链接。



硬链接

    硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)或者(Inode)。

    在Linux系统中,多个文件名指向同一索引节点(Inode)是正常允许的。一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。为什么为文件建立了硬链接就会防止数据误删呢?

    国为文件系统的原理是,只要文件的索引节点(Inode Index)还有一个以上的链接(仅仅删除了该文件指向)。只删除其中一个链接并不影响索引节点本身和其它的链接(即数据文件实体并未被删除),只有当最后一个链接被删除后,此时如果有新数据要存储到硬盘时。被删除文件的数据块及目录的链接才会被释放,空间被新数据占用覆盖。此时,数据就再也无法找回了。也就是说,在linux系统中,删除文件(其实目录也是文件)的条件是与之相关的所有硬链接文件均被删除(暂时这样理解,后文会讲和进程占用也有关)。

    提示:硬链接就相当于文件的另一个入口。


软链接

    软链接有时也被称为符号链接(Symbolic Link)。软链接文件就类似于windows系统中的快捷方式。它实际上是一个特殊的文件。在软链接中,软链接文件实际上是一个文本文件,这个文件中包含有软链接指向另一文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。


    文件示例:

    [root@gin ~]# mkdir -p /test/ginvip     //创建一个ginvip目录

    [root@gin ~]# cd /test/ginvip

    [root@gin ginvip]# touch ginvipfile     //在ginvip目录下创建一个ginvipfile 文件

    [root@gin ginvip]# ln ginvipfile ginvipfile_hard_link   //为ginvipfile文件添加硬链接

    [root@gin ginvip]# ln -s ginvipfile ginvipfile_soft_link   //为ginvipfile文件添加软链接

    [root@gin ginvip]# ls -li    //查看刚创建的文件

    文件截图:Linux系统硬链接与软链接知识详细介绍_硬链接     总结:从上面的示例结果可以看出,硬链接ginvip_hard_link与原文件ginvipfile的inode节点号相同,均为2673861,而软链接文件ginvipfile_soft_link的inode节点号与原文件ginvipfile不同,为2673862。

    

    目录示例:

    [root@gin ginvip]# mkdir madsale

    [root@gin ginvip]# ln madsale madsale_hard_link   //为目录创建硬链接时提示如下:

    ln: `madsale': hard link not allowed for directory  //不允许在目录上创建硬链接

    [root@gin ginvip]# ln -s madsale madsale_soft_link  //为目录创建软链接

Linux系统硬链接与软链接知识详细介绍_Linux系统_02

    红色部分为本示例

    总结:ln命令不能对目录创建硬链接,但可以对目录创建软链接,对于目录的软链接也是生产场景运维中常用的功能。


    删除示例:

    [root@gin ginvip]# rm -f ginvipfile    //删除原文件  Linux系统硬链接与软链接知识详细介绍_硬链接_03

    提示:原文件ginvipfile被删除,但是ginvipfile_hard_link 硬链接还存在,因此即使删除了原文件仍有硬链接指向着文件的inode节点,所以此时,文件才不会被释放被删除,当删除原文件时,仅仅是删除了原文件ginvipfile到该文件inode节点的链接而已。

    原文件被删除,但看到ginvipfile_soft_link 软链接还在并处于闪烁状态,一直闪烁,表示链接失效。

    总结:通过上面的测试可以看出:当删除原始文件ginvipfile后,硬链接ginvipfile_hard_link不受影响,但软链接文件ginvipfile_soft_link失效!


链接总结

    有关文件:

    通过以上的测试,可以得到以下几个结论:

    1.删除软链接ginvipfile_soft_link,对 ginvipfile , ginvipfile_hard_link 没有影响;

    2.删除硬链接ginvipfile_hard_link, 对 ginvipfile , ginvipfile_soft_link 也没有影响;

    3.删除原文件ginvipfile, 对硬链接 ginvipfile_hard_link,没有影响,但会导致软链接失效

    4.同时删除ginvipfile, 及硬链接 ginvipfile_hard_link,整个文件才会真正的被删除。

    5.很多硬件设备中的快照功能,就是利用了硬链接的原理。

    有关目录:

    1.对于目录,不可以创建硬链接,但可以创建软链接。

    2.对于目录的软链接是生产场景运维中常用的技巧。


二:链接知识拓展


    软链接的生产使用案例

    如在后文我们编译apache软件时,编译路径带着版本号/application/apache2.2.21(为了区分版本,因此路径比较长),而在访问目录时又希望简便,此时就可以通过建立一个简单的软链接路径文件 ln -s /application/apache 2.2.21 /application/apache,来达到方便访问的目的。

    硬链接的生产使用案例

    硬件存储的快照功能。或者为备份数据创建多个硬链接,防止误删除数据。