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. 目錄不能創建硬鏈接,只有文件能創建硬鏈接,目錄和文件都可以創建軟鏈接

    $ mkdir dirtest 
    $ ln ./dirtest hard-dirtest
    ln: ‘./dirtest’: hard link not allowed for directory
    

圖示

在這裏插入圖片描述






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章