Linux下的硬鏈結和符號鏈結

2021-06-05 15:07:42 字數 4140 閱讀 5249

硬鏈結和符號鏈結(軟鏈結):

硬鏈結只能引用同一檔案系統中的檔案。它引用的是檔案在檔案系統中的物理索引(也稱為 inode)。當您移動或刪除原始檔案時,硬鏈結不會被破壞,因為它所引用的是檔案的物理資料而不是檔案在檔案結構中的位置。硬鏈結的檔案不需要使用者有訪問原始檔案的許可權,也不會顯示原始檔案的位置,這樣有助於檔案的安全。如果您刪除的檔案有相應的硬鏈結,那麼這個檔案依然會保留,直到所有對它的引用都被刪除。

軟連線,其實就是新建立乙個檔案,這個檔案就是專門用來指向別的檔案的(那就和windows 下的快捷方式的那個檔案有很接近的意味)。軟連線產生的是乙個新的檔案,但這個檔案的作用就是專門指向某個檔案的,刪了這個軟連線檔案,那就等於不需要這個連線,和原來的存在的實體原檔案沒有任何關係,但刪除原來的檔案,則相應的軟連線不可用(cat那個軟鏈結檔案,則提示「沒有該檔案或目錄「)。

硬鏈結與軟鏈結的區別;

硬連線是不會建立inode的,他只是在檔案原來的inode link count域再增加1而已,也因此硬鏈結是不可以跨越檔案系統的。相反都是軟連線會重新建立乙個inode,當然inode的結構跟其他的不一樣,他只是乙個指明原始檔的字串資訊。一旦刪除原始檔,那麼軟連線將變得毫無意義。而硬鏈結刪除的時候,系統呼叫會檢查inode link count的數值,如果他大於等於1,那麼inode不會被**。因此檔案的內容不會被刪除。

硬鏈結實際上是為檔案建乙個別名,鏈結檔案和原檔案實際上是同乙個檔案。可以通過ls -i來檢視一下,這兩個檔案的inode號是同乙個,說明它們是同乙個檔案;而軟鏈結建立的是乙個指向,即鏈結檔案內的內容是指向原檔案的指標,它們是兩個檔案。

軟鏈結可以跨檔案系統,硬鏈結不可以;軟鏈結可以對乙個不存在的檔名(filename)進行鏈結(當然此時如果你vi這個軟鏈結檔案,linux會自動新建乙個檔名為filename的檔案),硬鏈結不可以(其檔案必須存在,inode必須存在);軟鏈結可以對目錄進行連線,硬鏈結不可以。兩種鏈結都可以通過命令 ln 來建立。ln 預設建立的是硬鏈結。使用 -s 開關可以建立軟鏈結。

現在研究一下硬鏈結和符號鏈結的建立和性質

首先用cp和ln命令都可以建立硬鏈結和符號鏈結。

[guo@guo ~]$ cp -l link link.back

[guo@guo ~]$ln link link.back1

[guo@guo ~]$ ls -al |grep 'link*'

-rw-rw-r-- 3 guo guo 38 4月 8 20:24 link

-rw-rw-r-- 3 guo guo 38 4月 8 20:24 link.back

-rw-rw-r-- 1 guo guo 38 4月 8 20:26 link.back1

建立的硬鏈結檔案與原檔案的檔案大小相同,檔案屬性為普通檔案。

當修改任意個檔案內容均可是三個檔案內容同時改變。

[guo@guo ~]$ cat link

shell

[guo@guo ~]$ cat link.back*

shell

shell

[guo@guo ~]$ cat link

shell

[guo@guo ~]$ cat link.back

shell

[guo@guo ~]$ cat link.back1

shell

[guo@guo ~]$ echo "shell" >>link.back

[guo@guo ~]$ cat link.back

shell

shell

[guo@guo ~]$ cat link.back1

shell

shell

[guo@guo ~]$ cat link

shell

shell

當刪除原檔案的時候硬鏈結檔案仍然存在,且內容不變。

[guo@guo ~]$ cat link 

shell

shell

[guo@guo ~]$ cat link.back

shell

shell

[guo@guo ~]$ rm link

rm:是否刪除普通檔案 "link"?y

[guo@guo ~]$ cat link.back1

shell

shell

[guo@guo ~]$ cat link.back

shell

shell

普通使用者可以給超級使用者的檔案進行建立硬鏈結。

[guo@guo ~]$ ls -al |grep 'file2'

-rw-r--r-- 2 root root 89 4月 6 21:51 file2

[guo@guo ~]$ cp -l file2 file2.back

[guo@guo ~]$ ln file2 file2.back1

[guo@guo ~]$ ls -al |grep 'file2*'

-rw-r--r-- 4 root root 89 4月 6 21:51 file2

-rw-r--r-- 4 root root 89 4月 6 21:51 file2.back

-rw-r--r-- 4 root root 89 4月 6 21:51 file2.back1

但是由於原檔案為root使用者而且對其它使用者無寫的許可權,所以其他使用者不能修改原檔案和硬鏈結檔案,但可以對鏈結檔案進行刪除。

[guo@guo ~]$ rm file2.back

rm:是否刪除有寫保護的普通檔案 "file2.back"?y

[guo@guo ~]$ rm file2.back1

rm:是否刪除有寫保護的普通檔案 "file2.back1"?y

由上面可以看出鏈結的檔案寫有保護。

[guo@guo ~]$ cp -s link link.back

[guo@guo ~]$ ln -s link link.back1

[guo@guo ~]$ ls -al |grep 'link*'

-rw-rw-r-- 2 guo guo 12 4月 8 20:37 link

lrwxrwxrwx 1 guo guo 4 4月 8 20:51 link.back -> link

lrwxrwxrwx 1 guo guo 4 4月 8 20:51 link.back1 -> link

注意此時鏈結的檔案屬性為l,軟檔案大小與原檔案大小也不一樣。

與硬鏈結一樣,當修改任

意個檔案內容均可是三個檔案內容同時改變,此處不在舉例。

對於軟鏈結當刪除原檔案後鏈結檔案不能再開啟。

[guo@guo ~]$ cat link

shell

shell

[guo@guo ~]$ cat link.back

shell

shell

[guo@guo ~]$ rm link

rm:是否刪除普通檔案 "link"?y

[guo@guo ~]$ ls -al |grep 'link.back*'

lrwxrwxrwx 1 guo guo 4 4月 8 21:02 link.back -> link

lrwxrwxrwx 1 guo guo 4 4月 8 21:02 link.back1 -> link

[guo@guo ~]$ cat link.back

cat: link.back: 沒有那個檔案或目錄

[guo@guo ~]$ cat link.back1

cat: link.back1: 沒有那個檔案或目錄

普通使用者可以給超級使用者的檔案進行建立軟鏈結,與硬鏈結類似,此處不再舉例。

軟鏈結可以建立目錄鏈結,可以跨檔案系統進行鏈結。

硬鏈結和符號鏈結詳解

檔案屬性軟硬連線 鏈結有兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 建立硬鏈結時,鏈結檔案和被鏈結檔案必須位於同乙個檔案系統中,並且不能建立指向目錄的硬鏈結。而對符號鏈結,則不存在這個問題。預設情況下,ln產生硬鏈結。在硬鏈結的情況下,引數中的 目標...

Linus 符號鏈結和硬鏈結

新建立的硬鏈結與檔案本身其實沒有什麼區別,僅僅是為檔案建立了另外乙個目錄條目,可以理解成乙個檔案具有兩個名稱。當使用者刪除其中乙個名稱,另外乙個名稱依然存在,使用者仍然可以通過該名稱訪問檔案,直到該檔案的所有名稱都被刪除,檔案才會被系統刪除。硬鏈結 只能引用同一檔案系統中的檔案。它引用的是檔案在檔案...

硬鏈結和符號鏈結的區別

首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。一 硬鏈結 硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配inode。可...