目錄
軟硬鏈接
軟鏈接
硬鏈接
軟硬鏈接的區別
硬鏈接場景
軟連接場景
軟硬鏈接
軟鏈接
我們可以通過以下命令創建一個文件的軟連接
ln -s mytest softlink-mytest
通過 ls -i -l 命令我們可以看到,軟鏈接文件的inode號與源文件的inode號是不同的,并且軟鏈接文件的大小比源文件的大小要小得多
軟連接又叫符號鏈接,軟鏈接文件相對于源文件來說是一個獨立的文件,該文件有自己的inode編號,但是該文件只包含了源文件的路徑名,所以軟連接文件相比于源文件要小很多。軟連接就相當于Windows操作系統當中的快捷方式
軟鏈接文件只是其源文件的一個標記,當刪除了源文件后,鏈接文件不能獨立存在,雖然仍保留文件名,但卻不能執行或是查看軟鏈接的內容了
硬鏈接
我們可以通過以下命令創建一個文件的硬鏈接
ln mytest hardlink-mytest
通過 ls -i -l 命令我們可以看到,硬鏈接文件的inode編號和源文件是相同的,并且硬鏈接文件大小與源文件大小也是相同的,特別注意的是,當創建了一個硬鏈接文件后,該硬鏈接文件和源文件的硬鏈接數(引用計數)都變成了2
硬鏈接文件就是源文件的一個別名,一個文件有幾個文件名,該文件的硬鏈接數就是多少,這里inode號為412561的文件有mytest和hardlink-mytest兩個文件名,因此該文件的硬鏈接數為2
硬鏈接數
任意一個文件,無論目錄還是普通文件,都有inode,每一個inode內部,都有一個叫做引用計數得計數器
目錄中保存的是文件名:inode編號的映射關系
例如:
文件1:inode 1234
文件2:inode 1234
文件3:inode 1234
文件4:inode 1234
不同文件可以映射同一個inode編號,這里使用的引用計數
這樣的映射關系很像 “指針”
與軟連接不同的是,當硬鏈接的源文件被刪除,硬鏈接文件依舊能正常執行,只是文件的硬鏈接數減少了一個,因為此時該文件的文件名少了一個,所謂的建立硬鏈接,本質就是在特定目錄的數據塊中新增文件名和指向文件名的inode編號的映射關系
硬鏈接就是讓多個不在或者同在一個目錄下的文件名,同時能夠修改同一個文件,其中一個修改后,所有與其有硬鏈接的文件都一起修改了
tips: 刪除軟硬鏈接,我們使用unlink + 軟硬鏈接文件
為什么剛剛創建的目錄的硬鏈接數是2?
我們創建一個普通文件,該普通文件的硬鏈接數是1,因為此時該文件至于一個文件名。
為什么我們創建一個目錄之后,該目錄的硬鏈接數為2?
因為每個目錄創建后,該目錄默認會有兩個隱含文件?. 和 .. ,它們分別代表當前目錄和上一級目錄,因此這里創建的目錄有兩個名字一個dir另一個就是該目錄下的 . ,所以剛創建的目錄的硬鏈接數是2,通過命令我們也可以看到dir和該目錄下的 . 的inode編號是一樣的,也就可以說明它們代表的實際上是同一個文件
tips:該目錄下有效目錄的個數等于該目錄的硬鏈接數減2
軟硬鏈接的區別
1. 軟連接是一個獨立的文件,有獨立的inode,而硬鏈接沒有獨立的inode
2. 軟鏈接相等于快捷方式,硬鏈接本質沒有創建文件,只是建立了一個文件名和已有的inode的映射關系,并寫入當前目錄的數塊
硬鏈接場景
硬鏈接用來維護整個目錄結構,路徑定位采用硬鏈接,可以進行目錄間切換
注意:不允許目錄進行硬鏈接,但是可以進行軟鏈接
如果對目錄采用硬鏈接可能會產生環路問題,操作系統是不允許的
難道? . 和 .. 不是硬鏈接?,它是操作系統設置好的進行搜索時不能使用
軟連接場景
例如:我創建了一個項目,但是指向文件藏得很深,這樣給用戶使用就很不方便,所以這時我們就可以創建一個軟連接給用戶