linux 软链接_Liunx 命令之链接操作
Liunx 命令之鏈接操作
Linux 系統中有軟鏈接和硬鏈接兩種特殊的“文件”。
軟鏈接可以看作是Windows中的快捷方式,可以讓你快速鏈接到目標檔案或目錄。
硬鏈接則透過文件系統的inode來產生新檔名,而不是產生新檔案。
1、創建方法
軟鏈接(符號鏈接) ln -s source target
硬鏈接 (實體鏈接)ln source target
2、inode
要解釋清楚兩者的區別和聯系需要先說清楚 linux 文件系統中的 inode 這個東西。
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。
這里值得重復一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。
對于系統來說,文件名只是inode號碼便于識別的別稱或者綽號。
表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:
首先,系統找到這個文件名對應的inode號碼;
其次,通過inode號碼,獲取inode信息;
最后,根據inode信息,找到文件數據所在的block,讀出數據。
當劃分磁盤分區并格式化的時候,整個分區會被劃分為兩個部分,即inode區和data block(實際數據放置在數據區域中)
這個inode即是(目錄、檔案)文件在一個文件系統中的唯一標識,需要訪問這個文件的時候必須先找到并讀取這個文件的 inode。
Inode 里面存儲了文件的很多重要參數,其中唯一標識稱作 Inumber, 其他信息還有創建時間(ctime)、修改時間(mtime) 、文件大小、屬主、歸屬的用戶組、讀寫權限、數據所在block號等信息。
inode本身并不記錄文件名
文件名記錄在目錄文件的block當中,所以新增、刪除、更改文件名與目錄的寫權限有關。
因此當我們要讀某個檔案時,就務必經過其目錄的inode和block,然后才能夠找到待讀取檔案的inode號,最終才會讀到正確的檔案block內的數據。
系統是通過索引節點(而不是文件名)來定位每一個文件。
3、硬鏈接解析
當前目錄下有兩個文件soft_sourcefile和hard_sourcefile
這里我們注意在創建鏈接前,hard_sourcefile顯示的鏈接數目為1,創建鏈接后
1.hard_sourcefile和hard_sourcefile_hardlink的鏈接數目都變為2。
2.hard_sourcefile和hard_sourcefile_hardlink的inode號是一樣的,都是492911。
3.hard_sourcefile和hard_sourcefile_hardlink顯示的文件大小也是一樣,都是16B。
可見進行了ln命令的操作結果:
1)hard_sourcefile和hard_sourcefile_hardlink是同一個文件的兩個名字,
2)它們具有同樣的索引節點號和文件屬性,建立文件hard_sourcefile的硬鏈接,就是為 hard_sourcefile的文件索引節點在當前目錄上建立一個新指針。
3)你可以刪除其中任何一個,如rm hard_sourcefile,每次只會刪除一個指針,鏈接數同時減一,只有將所有指向文件內容的指針,也即鏈接數減為0時,內核才會把文件內容從磁盤上刪除。
多個文件名對應同一個inode,硬鏈接只是在某個目錄下新增一筆文件名鏈接到某個inode號碼的關聯記錄而已。
hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會增加 inode 也不會耗用 block 數量
不過,一般 hard link 所用掉的關連數據量很小,所以通常不會改變 inode與磁盤空間的大小
你可以透過xxxxxx 或yyyyyy的文件名之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode 去讀取到最終數據
如果將上圖中任何一個檔名刪除,檔案的inode與block都還存在,依然還可以通過另一個檔名來讀取正確的檔 案數據。
此外,不論用哪一個檔名來編輯,最終的結果都會寫入相同的inode和block中,因此均能進行數據的修改。
盡管硬鏈接節省空間,也是Linux系統整合文件系統的傳統方式,但是存在一些不足之處:
1)不允許給目錄創建硬鏈接。
2)不可以在不同文件系統的文件間建立鏈接。因為 inode 是這個文件在當前分區中的索引值,是相對于這個分區的,當然不能跨越文件系統了。
4、軟鏈接解析
從上面鏈接后的結果可以看出來軟鏈接與硬鏈接,區別不僅僅是在概念上,在實現上也是完全不同的。
軟連接就是建立一個獨立的文件,而這個文件會讓數據的讀取指向它link的那個檔案的文件名,由于只是作為指向的動作,所以當來源檔案被刪除之后,軟連接的檔案無法開啟,因為找不到原始檔名。
連結檔的內容只有文件名,根據檔名鏈接到正確的目錄進一步取得目標檔案的inode,最終就能夠讀取到正確的數據。如果目標檔案的原始檔名被刪除了那么整個環節就進行不下去了。
5、軟鏈接和硬鏈接的區別:
1)硬鏈接原文件/鏈接文件公用一個inode號,說明他們是同一個文件,而軟鏈接原文件/鏈接文件擁有不同的inode號,表明他們是兩個不同的文件;
2)在文件屬性上軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出來,因為在本質上硬鏈接文件和原文件是完全平等關系;
3)鏈接數目是不一樣的,軟鏈接的鏈接數目不會增加;
4)文件大小是不一樣的,硬鏈接文件顯示的大小是跟原文件是一樣的。而這里軟鏈接顯示的大小與原文件就不同了,soft_sourcefile大小是16B,而soft_sourcefile_symbolic是15B。
5)軟鏈接沒有任何文件系統的限制,任何用戶可以創建指向目錄的符號鏈接
總之,建立軟鏈接就是建立了一個新文件。當訪問鏈接文件時,系統就會發現他是個鏈接文件,它讀取鏈接文件找到真正要訪問的文件。
當然軟鏈接也有硬鏈接沒有的缺點:
1)因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統就找不到了,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移;
2)還有它要系統分配額外的空間用于建立新的索引節點和保存原文件的路徑。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的linux 软链接_Liunx 命令之链接操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中and和or的惰性求值特点
- 下一篇: 雷军被重新任命为金山软件董事会副主席