# Linux Symbolic Link ###### tags: `note`, `linux` 在這邊簡單的紀錄一下關於 symbolic link 的小筆記 linux 中 symbolic link 分為:**hard link**, **soft link** 兩種 - hard link: 為已存在的檔案 inode 建立新的 file entry - soft link: 建立一個新的檔案指向目標檔案 ## Usage ```bash # create symbolic links ln -s source_file symbolic_link ``` ```bash # create hard link ln source_file hard_link ``` ```bash # print the index number of each file ls -l --innode # in short ls -li ``` ## 實驗 建立一定大小的檔案 ```bash yes | head -c 1000 > file1 ``` 建立 symbloic link ```bash ln -s file1 file1_s ``` 建立 hard link ```bash ln file1 file1_h ``` 檢視結果 ```bash ls -lih . ```  從結果可以看出: - `file1` inode number 為 262514, 有 2 個 hard link - `file1_h` 的 indoe number 和檔案大小都與 `file1` 一模一樣 - `file1_s` 的 indoe number 為 262421 與 `file1` 不同,而檔案內容也只有 3 byte `file1_h` 與 `file1` 表面上是不同檔案,但是由於 `file1_h` 是藉由 hard link 的方式製造出來,因此兩者事實上是共用同一個檔案空間的。 有趣的是 `ls` 的檔案大小統計為 `total 4.1G`,因為 `ls` 統計總檔案大小的方式為將此 directory 下的所有檔案大小相加。而 `file1` `file1_h` `file1_s` 都被視為不同檔案,因此 `file1` 與 `file1_h` 雖然共用同樣的硬碟空間但是兩者都各被算了一次。 **使用 `du` 查看硬碟使用量**  如果我們使用 `du` 查看當前 directory 的大小了話,便會正常的顯示出 `2.1G`。 **接著我們試著刪除 `file1`** ```bash rm file1 ``` **查看當前目錄**  從 `file1_h` 的資料上可以看到 inode:262514 的 hardlink 變成只有一個了。 > 因此可以發現一個 inode 只有在他所有的 hardlink 被刪除時才會被真的刪除 > 不過實際上的細節還需要近一步的查看 linux file system 機制 **查看當前目錄的硬碟空間使用量**  一樣還是 2.1 G **使用 `cat` 查看 `file1_s`**  由於 `file1_s` 是 symbolic link,檔案系統會去試圖去查看已被刪除的 `file1`,所以會迸出 error **查看 `file1_h`**  由於 `file1_h` 是直接與 inode 連結,而不是依賴於 `file1` 因此就算刪除了 `file1`, `file1_h` 仍然是可以讀取的。 ## 應用 可用做版本切換  ubuntu snap 版 discord 使用 symbolic link ## Other - ==TODO:== 研究 inode 與 file system
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.