Linux與命令列基礎
$ echo hello > a.txt
$ ln a.txt h.txt
$ ln -s a.txt s.txt
$ rm a.txt
$ cat h.txt
$ cat s.txt依序執行上面的指令時,最後兩個 cat 的結果是下列何者?
- Ah.txt 與 s.txt 都顯示 hello
- Bh.txt 出現找不到檔案的錯誤,s.txt 顯示 hello
- Ch.txt 顯示 hello,s.txt 出現找不到檔案的錯誤
查看答案與解析
正確答案:C. h.txt 顯示 hello,s.txt 出現找不到檔案的錯誤
用 ln 建立的硬連結,是指向與原檔案相同 inode(管理檔案內容與屬性、附有編號的資訊)的另一個名稱。rm a.txt 刪除的只是 a.txt 這個名稱,由於 h.txt 這個名稱還在,內容不會消失,cat h.txt 會顯示 hello。用 ln -s 建立的符號連結,是以「a.txt」這個路徑為內容的另一個檔案,因此 a.txt 消失後就沒有可追蹤的目標,cat s.txt 會出現「No such file or directory」的錯誤。像這樣目標已消失的符號連結,會以失效連結的狀態留下來。
- A. 符號連結是追蹤路徑來開啟檔案,因此 a.txt 消失後就無法經由 s.txt 讀取。
- B. 硬連結與符號連結的性質顛倒了。只要還留有一個名稱,就能經由硬連結讀取內容。
- C. 正確。硬連結是指向同一 inode 的名稱所以會留下,符號連結則成為失效連結。