前言:
今天學習了文件系統,簡單的接觸到文件系統構成的原理。原來我們不管在linux和win上面刪除某個文件只是刪除一個鏈接而已。而linux把鏈接分為軟鏈接和硬鏈接。接下來我們就從文件系統構成的基本原理出發來說明下linux軟鏈接和硬鏈接的區別。
文件系統簡述:
linux的哲學就是一切皆文件。為了方便人們的使用,我們可以通過看文件名來區分不同的文件。但作為只識別0 1 的機器,讓它識別一串文字肯定復雜的多。所以linux文件系統用一串數字來標識一個文件,而且這個數字在文件所處的分區中是唯一存在的。這串數字就是inode號。那inode是什么? 文件主要有兩個部分數據構成,即元數據(metadata)和數據(data)。數據就是我們向往文件中保存的數據,元數據則是一些與文件內容本身無關,但為了管理文件或者操作文件所必要的一些信息。比如:文件的大小,文件的權限等等。我們把數據以文件系統規定的方式存儲在規定的地方(此內容在具體介紹文件系統時再深入了解),把元數據存儲在一個叫做inode的局域。全稱index node(索引節點)。inode也保存的元數據中包含了文件數據的位置。這也是系統能通過inode號找到文件的原因。
前文已經提到我們我們所能看到的文件名只是為了方便我們自己,而linux系統內部是不使用文件名,是使用inode號碼來識別文件的。我們把文件保存在目錄中。目錄文件的結構非常簡單,就是一系列項的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。一定得明白目錄的本質。這樣才有利于明白后面目錄的讀,寫,執行權限。現在我們就可以好好說道說道,用戶通過文件名,打開文件到底發生了什么。實際上,系統內部這個過程分成三步,首先,系統通過目錄文件中的對應項,找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最后,根據inode信息,找到文件數據在什么為位置,讀取數據。
硬鏈接:
雖然文件包含了元數據和數據。但是這個兩個數據并不是存儲在一起的。分別劃分兩個專門的區域,一個區域(inode)保存元數據,一個區域保存數據。若一個inode號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名,即以不同的名字指向了同一個文件。因為inode號只在本分區中唯一,所以硬鏈接不能跨分區,而且硬鏈接不能指向一個目錄文件。元數據中還保存了文件的硬鏈接個數,當我們刪除一個硬鏈接時,文件的硬鏈接個數就減一,當硬鏈接個數為零時,這個文件所占有的空間就會釋放。文件釋放也僅僅是沒有了指向數據的鏈接。數據本身依然還存在于磁盤中。所以我們一般刪除文件的操作只是刪除一個指向文件的鏈接而已。
軟連接:
硬鏈接有自身的限制,比如;不能跨分區創建,不能對目錄創建。而軟鏈接則天生沒有這樣的問題,軟連接是一個單獨的文件有不同于被鏈接文件的inode號,而且軟連接指向的不是文件的數據,而只是指向文件名,它并不關心文件的內容是什么。所以軟連接會存在無效鏈接的情況,就是找不到被鏈接的文件。因為inode是占磁盤空間的,所以軟連接文件本身也是有文件大小的并且會占用一個inode號,inode號本身也是有限資源。
原創文章,作者:M21-陜西-李賢,如若轉載,請注明出處:http://www.www58058.com/52950