Linux-ln 命令

1.ln 命令:

  • 創建符號鏈接: ls -s fileName softLinkName
    • 示例: ln -s test.txt test.ln
    • 查看鏈接: ls -l test.ln
      可以看到 test.ln 是指向 test.txt 這個文件的
      view softlink
  • 創建硬鏈接: ls test.txt test
    • 示例: ln test.txt test1.ln
    • 查看鏈接: ls -l test1.ln

view hardlink
2. 符號鏈接和硬鏈接區別:

符號鏈接類似於 Windows 系統的快捷方式, 符號鏈接要佔用一個 inode 號, 符號鏈接可以連接到普通文件和文件夾; 硬鏈接不佔用 inode 號, 硬鏈接只能鏈接到普通文件.

soft and hard link

Linux 讀取文件首先是通過文件名找到對應的 inode 號, 然後根據 inode 號找到實際存放數據的 block 的位置, 然後讀取數據.

Linux 的文件是屬於某個文件夾的, 當然文件夾也是一個文件. Linux 系統創建文件夾是會分配一個 inode 和至少一個 block, 文件夾的 block 存放的數據就包括了在該文件夾下面的文件名稱.

當創建一個硬鏈接時, 只是在該鏈接的所屬的文件夾的 block 中增加了一個新的記錄, 也就是這個硬鏈接的名稱, 這個硬鏈接必然有一個指向的 inode 號, 這個 inode 號就是創建該鏈接時文件的 inode 號. 當刪除創建鏈接的文件時, 通過該鏈接仍然能夠訪問文件. 硬鏈接相當於給同一個文件取了兩個或多個名稱, 通過任意一個名稱都能訪問到該文件的內容.

當創建一個符號鏈接時, 是創建了一個新的文件, Linux 系統也會給它分配一個 inode 和 block. 但是該文件和普通文件的區別在於: 普通文件的 block 中存放的是該文件的數據, 但是該文件的 block 存放的是一個文件名, 這個文件名就是它所鏈接到的文件. Linux 訪問該鏈接時找到該鏈接所鏈接的實際文件, 然後再通過實際文件的名稱去訪問實際文件的數據. 當實際文件被刪除之後, 通過鏈接也就訪問不到文件數據了.

從編程語言的角度去理解的話, 硬鏈接就是指針, 而符號鏈接就是指針的指針. 原始的文件內容就是數組 a 指向的內容. 現在 b 也指向 a 指向的內容, b 就可稱之爲硬鏈接; 而 c 指向的是 b 而不是 b 的內容, 因此 c 可以稱之爲 符號鏈接.

int a[4] = {0};
int *b = a;
int **c = &a;
  1. 參考:
    [1] : The difference between hard and soft links
    [2] : What is the difference between a symbolic link and a hard link?
    [3] : 鳥哥的Linux私房菜
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章