一、Linux 下的鏈接種類
- 軟鏈接:類似於 windows系統中的快捷方式,與硬鏈接不同,軟鏈接就是一個普通文件,只是數據塊內容有點特殊,文件用戶數據塊中存放的內容是另一文件的路徑名的指向,通過這個方式可以快速定位到軟連接所指向的源文件實體。
- 硬鏈接:通過文件系統的 inode 進行鏈接,類似於 windows系統中的複製,但是不產生新的文件。
二、什麼是 inode?
inode 是用來存放文件信息的,每個文件都會佔用一個 inode,並且這個 inode 號是唯一的,文件的內容都是 inode 來指定的,而不是文件名,當系統要訪問文件時,inode 就會被複制到內存,從而實現文件的快速訪問,使用 ls -i
命令則可以看到 inode 號。
三、如何創建硬鏈接?
可以用 ln 命令來建立硬連接。
格式:ln 源文件 目標文件
常用參數-f
無論目標文件是否存在都要創建連接。
在例子中我們可以發現 test1.c 和 test2.c 他們的 inode 號碼都是 44564692。因爲inode 號一樣,所有這個倆個文件的權限和屬性也是一模一樣的,也是 test1.c 和 test2.c 是倆個完全一樣的文件。
連接數也由 1 變成了 2,這個代表的是有多少個檔名鏈接到了這個 inode 號。
再創建一個硬連接。使用 ln test1.c tset3.c 命令後,則會發現我們這個連接數從2 變成了 3
使用硬鏈接的優缺點是什麼?
優點:
方便;雖然類似於 win 的複製,但是通常並不佔用實際空間。而且不管我們是修改 test1.c 或者是修改 test2.c 還是 test3.c,只要修改一個,我們的文件就會被同時修改,因爲他們的 inode 號都是相同的。
我們修改 test3.c 的內容爲如下圖所示:
test1.c 和 test2.c 的內容也被修改成了 nihao,如下圖所示:
安全:防止誤刪除,我們刪除 test1.c 或者是 test2.c 或 test3.c 任意一個,我們還是可以通過剩下的連接來訪問文件。除非都刪掉。
我們刪掉 test1.c。但是 test2.c 或 test3.c 還是可以訪問到“nihao”這個內容。
缺點:
只能在同一個文件系統纔可以創建硬連接(因爲不同的文件系統管理方式不同),並且目錄之間不能創建硬連接。(太複雜,現在還不支持)
四、如何創建軟鏈接?
可以用 ln 命令來建立軟連接。
格式:ln -s 源文件 目標文件
(必須加上-s 參數,使用 ln 如果不加任何參數的話,那麼就是 Hard Link,而且源文件要用絕對路徑)。
上圖中我們可以發現 test1.c 和 test2.c 的 inode 號是不一樣的,所以這個倆個文件是完全獨立的,總之軟連接就是創立了一個新的文件,當訪問這個連接文件的時候,系統就會發現他是一個連接文件,然後讀取連接文件找到真正要訪問的文件。
因爲類似於 win 的快捷方式,我們刪掉源文件 test2.c ,test1 就不能打開了,如下圖所示:
軟連接雖然沒有硬鏈接安全,但是限制少,所以使用範圍還是很廣泛的。