zoukankan      html  css  js  c++  java
  • 四linux 软链接和硬链接

    一、链接的概念:

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

    二、硬链接:

    是指通过索引节点来进行链接。在linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给他分配一个编号,这个编号被称为索引节点号(Inode Index)
    在Linux系统中,多个文件名指向同一个索引节点是正常且允许的。一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。为什么为文件创建了一个硬链接就会防止数据误删呢?
    因为文件系统的原理是,只要文件的索引节点还有一个以上的链接(仅仅删除了该文件指向)。只删除其中一个链接并不影响索引节点本身和其他的链接(既数据文件实体并未被删除),只有当最后一个链接呗删除的后,此时如果有新的数据存储到硬盘时。被删除文件的数据块及目录的链接才会被释放,空间被新数据占用覆盖。此时,数据就再也无法找回了。也就是说,在Linux系统中,删除文件(其实目录也是文件)的条件是与之相关的所有硬链接文件均被删除。
    

    三、软链接:

    软链接有时也被称为符号链接(Symbolic Link)。软链接文件就类似于Windows系统下的快捷方式。它实际上是一个特殊的文件。在软链接中,软链接文件实际上就是一个文本文件,这个问价中包含有软链接指向另一个文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。
    
    mkdir /test && cd /test&& touch testfile
    ln testfile testfile_hard_link
    ln -s testfile testfile_soft_link
    
    ls -li * 可以查看到inode信息
    

    总结:

     1、硬链接与原文件的inode节点号相同。而软连接的inode节点号不相同。
     2、目录无法创建硬链接,但是可以创建软连接
     3、软连接可以跨分区,硬链接不可以。
     4、硬链接原文件删除,文件依然可以访问。软连接原文件删除,链接文件失效
    

    四、链接知识拓展:

    1、软连接的生产使用案例:

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

    2、硬链接的生产使用案例:

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

    3、文件系统的知识:

    文件的访问方式:filename->index(inode)
               index->data
    
    derectory    123      345      567         789
    
    indode table  
    
    blocks
        文件系统的磁盘布局 bootBlock   block group0 .... block group N
        Blocke group0: super block、 Group Descriptrs 、Data block Bitmap、Inode Table、Data blocks
    
      "进程还占用文件,这时候断电了!"
        Kernel没有机会回收文件所占用的磁盘空间了
        磁盘空间可能仍被标记为“已用”
        文件系统可能会不一致
        死文件,谁也访问不到了:已经没有文件名指向这些空间了
        需要FSCK或其他机制回收空间
    

    五、例题:

    1、Linux同过mkdir命令创建一个新目录/test/ 它的硬链接数怎么查看

    ls -ld /test/ 权限后面的 数字为硬链接的数量为2.
    
    原因:创建的目录本身为一个硬链接     
          新建目录下的隐藏目录(点号)为创建的新目录又是一个链接,所以为2个硬链接    
          ls -lai 可以查看验证!
    

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

  • 相关阅读:
    EF CodeFirst下,当实体结构发生修改怎么更新数据库结构 【常用总结】
    基于 ASP.NET Core 的 EF Core 入门
    autofac 一个接口多个实现的情况
    C#中使用HttpClient来Post数据的内容HttpContent的各种格式
    # 使用HttpClient的post,get 封装
    C# 模拟提交带附件(input type=file)的表单
    C#使用HttpClient上传文件并附带其他参数
    2021年总结一下
    PhpStorm+Xdebug断点调试
    PHP数组排序
  • 原文地址:https://www.cnblogs.com/zhaobin-diray/p/10936161.html
Copyright © 2011-2022 走看看