1. 程式人生 > >Linux硬連結和符號連結的區別

Linux硬連結和符號連結的區別

什麼是目錄

Linux檔案系統是樹狀結構的。根目錄下存在一系列子目錄。目錄裡邊有檔案或者子目錄。
但問題在於:
1. 目錄是什麼?
2. 檔案又是什麼?

檔案是:資料+屬性(比如名字、建立時間、所有者之類)
目錄是:一個列表,列表中的每一項是:inode –> filename

Linux檔案系統把硬碟分為三個部分:超級塊、inode列表、資料區。
硬碟分塊

用法:

檔案內部結構

inode指示:該檔案的資料存放在資料區的哪些塊內。因為這個“對映”關係不能變更,因此,inode相當於或者說代表著檔案本身。(值得注意的是,檔名與檔案本身不是直接對映起來的,中間隔著inode

硬連結

建立一個硬連結,相當於在目錄列表中,新建一條記錄
比如
inode ——-> filename
47 ——-> userlist
47 ——-> userlist_2(硬連結建立的)

所謂硬連結就是第二個檔名對映著同一個inode。因此我們可以說userlist與userlist_2是完全一致的,因為inode一樣。

符號連線

因為硬連結不能跨硬碟建立。因此提供了第二種連線:符號連線。
它相當於快捷方式。這意味著什麼呢?
1. 符號連線是一個檔案,一個與被它連線的檔案不一樣的檔案。它有自己的inode。
2. (猜測)符號連線的內容應該是一個路徑,該路徑指示著它連線的檔案。這意味著如果該路徑的檔案被刪除了、改名字了,它即將訪問不到。如果該路徑下的檔案被掉包了,它將訪問錯誤的檔案。

總結

硬連結是一種對映,符號連線也是一種對映。但是硬連結更加深層,對映到inode。符號連線只是連線到一個路徑而已。