Linux软链接硬链接详解

命令

  • 参数 -s 表示软链接,没有则是硬链接
    ln [-s]  <原文件名>  <链接名>
    

软链接

  1. 先创建一个文件test.txt

    $ touch test.txt
    $ ls -lti 
    total 0
    272851 -rw-rw-r-- 1 deploy deploy 0 Jul  9 10:54 test.txt
    
    $ vi test.txt
    hello world!
    test1
    test2
    ~
    ~
    ~
    :wq
    
    
  2. 为这个文件创建两个软链接

    $ ln -s ./test.txt soft-test1.txt
    $ ln -s ./test.txt soft-test2.txt
    $ ls -lti
    total 0
    272853 lrwxrwxrwx 1 deploy deploy 10 Jul  9 10:59 soft-test2.txt -> ./test.txt
    272852 lrwxrwxrwx 1 deploy deploy 10 Jul  9 10:57 soft-test1.txt -> ./test.txt
    272851 -rw-rw-r-- 1 deploy deploy  0 Jul  9 10:54 test.txt
    
    

    可以发现这两个软链接的Inode值(第一列)不一样,分别为:272852和272853,
    如果编辑这两个软链接文件,原文件test.txt也会变化,相当于直接编辑test.txt,
    如果删除或者重命名原文件,则软链接也无效了,软链接相当于Windows的快捷方式,原文件删除了或路径变了,快捷方式也就无效了,
    但是删除软链接,不会影响原文件,只是删除快捷方式而已。
    删除软文件后



硬链接

  1. 创建两个硬链接

     $ ln ./test.txt hard-test1.txt
     $ ln ./test.txt hard-test2.txt 
    
  2. 查看文件列表:ll -i
    在这里插入图片描述

    1. 发现两个硬链接的Inode的值与原文件相同,都是272851,
    2. 但是后面的链接数由1变为3了,那是因为创建硬链接时不会生成新的Inode,但是Inode对应的链接数会累加
    3. 与软链接一样,修改硬链接时,原文件也会发生变化,因为它们对应同一个文件
  3. 删除硬链接或原文件
    rm test.txt
    ll -i
    在这里插入图片描述
    rm hard-test1.txt
    ll -i
    在这里插入图片描述

    删除硬链接或者原文件后,只是链接数减1了,文件还存在,可以用剩下的硬链接继续编辑文件
    当然如果把原文件和其所有的硬链接删除,文件肯定是被删除了的

    $ vi hard-test2.txt
    $ vi hard-test2.txt
    hello world!
    test1
    test2
    ~
    ~
    ~
    
    

总结

  1. Linux系统的每一个文件都有一个Inode,Inode是Linux文件的唯一标识,而Windows系统文件的唯一标识是文件名(包含路径),因此Linux文件在使用时(运行/编辑/读取等)可以进行重命名,而Windows则不行(因为文件名是唯一标识,文件是根据文件名打开的,重命名之后文件的标识就改变了)。

  2. 硬链接不创建新的文件,只是将原文件Inode的链接数加1 ,删除硬链接或原文件时链接数减1 ,硬链接和原文件的Inode映射到同一个数据块,性质是一样的。

  3. 软链接会创建一个新的文件(文件系统生成一个新的Inode),这个文件的内容是存储 “指向的原文件路径” 。

  4. 目录不能创建硬链接,只有文件能创建硬链接,目录和文件都可以创建软链接

    扫描二维码关注公众号,回复: 11160156 查看本文章
    $ mkdir dirtest 
    $ ln ./dirtest hard-dirtest
    ln: ‘./dirtest’: hard link not allowed for directory
    

图示

在这里插入图片描述






原创文章 21 获赞 13 访问量 8405

猜你喜欢

转载自blog.csdn.net/iteye_19045/article/details/95175451