inode是什么?
??認(rèn)識(shí)inode之前,先來看一下一個(gè)文件在磁盤里面是怎么存儲(chǔ)的。
??首先一個(gè)物理的圓盤形狀且多層的一個(gè)磁盤會(huì)被邏輯化成為一個(gè)數(shù)組,找到一個(gè)文件在這個(gè)數(shù)組里面叫做LBA尋址。
??這個(gè)數(shù)組會(huì)被劃分為一個(gè)一個(gè)的block,所以磁盤也會(huì)被稱為塊設(shè)備。一個(gè)個(gè)的block的大小是在格式化的時(shí)候就確定好了的,并且不能更改。一般來說,初次使用磁盤的時(shí)候就會(huì)格式化磁盤。
??一個(gè)文件系統(tǒng)會(huì)包含多個(gè)block。
如下:
??上面這個(gè)圖片叫做塊組(Block group)。里面有一部分叫做inode Table.里面存放著一個(gè)個(gè)的inode,一個(gè)inode里面包含一個(gè)文件的屬性,每一個(gè)inode都有一個(gè)inode編號(hào)。另外,Data blocks 里面有一部分叫做數(shù)據(jù)項(xiàng),其中包含了 文件名和inode
的一一對(duì)應(yīng)的映射關(guān)系。并且,每一個(gè)文件獨(dú)有一個(gè)自己的目錄項(xiàng)。
??所以同一個(gè)目錄下不可以有相同的文件名,不同目錄下可以有相同的文件名。
找文件的步驟:
??1. 讀取根目錄:首先,操作系統(tǒng)會(huì)讀取磁盤的根目錄。根目錄是文件系統(tǒng)的頂層目錄,它包含了文件系統(tǒng)中所有文件和目錄的信息。
??2. 遍歷目錄結(jié)構(gòu):操作系統(tǒng)會(huì)通過根目錄開始遍歷文件系統(tǒng)的目錄結(jié)構(gòu)。它會(huì)逐級(jí)進(jìn)入子目錄,讀取每個(gè)目錄中的目錄項(xiàng)信息。
??3. 匹配文件名:操作系統(tǒng)會(huì)比對(duì)目錄項(xiàng)中的文件名與待查找文件的文件名是否匹配。如果匹配成功,則找到了目標(biāo)文件的inode號(hào)碼。
??4. 獲取inode信息:根據(jù)inode號(hào)碼,操作系統(tǒng)會(huì)通過inode表或其他數(shù)據(jù)結(jié)構(gòu)獲取與該inode相關(guān)聯(lián)的元數(shù)據(jù)信息,如文件大小、權(quán)限、所有者等。
??5. 定位數(shù)據(jù)塊:一旦獲取了inode信息,操作系統(tǒng)就知道了文件實(shí)際存儲(chǔ)在哪些數(shù)據(jù)塊中。通過inode中的指針或引用,操作系統(tǒng)可以定位到文件的數(shù)據(jù)塊。
??6. 讀取文件內(nèi)容:最后,操作系統(tǒng)會(huì)讀取文件數(shù)據(jù)塊中存儲(chǔ)的實(shí)際文件內(nèi)容,并將其提供給用戶進(jìn)行讀取或處理。
面試題
問:系統(tǒng)里還有空間,為何創(chuàng)建文件或?qū)懭胛募?huì)失???
答:因?yàn)閕node和Data blocks的空間是固定的,不能保證兩個(gè)同時(shí)有空間,若inode滿了,Data blocks有空間,還是會(huì)失敗。
硬鏈接
??我們看到,真正找到磁盤上文件的并不是文件名,而是inode。 其實(shí)在linux中可以讓多個(gè)文件名對(duì)應(yīng)于同一個(gè)inode。
??創(chuàng)建硬鏈接是在文件系統(tǒng)中創(chuàng)建一個(gè)指向目標(biāo)文件的硬鏈接,硬鏈接與目標(biāo)文件共享相同的 inode 和數(shù)據(jù)塊,它們?cè)谖募到y(tǒng)中被視為同一實(shí)體,即使使用不同的文件名。硬鏈接就相當(dāng)于給文件起別名
使用的命令如下:
???????? ln <目標(biāo)文件> <鏈接名>
??可以看出來多個(gè)文件名共用一個(gè)inode
??上圖可以看出來,使用任意一個(gè)文件名來改變文件內(nèi)容,所有文件名中的內(nèi)容都會(huì)改變。
??可以看出來,隨著硬鏈接的增加,這個(gè)字段的數(shù)字大小也會(huì)增加。這個(gè)字段代表硬鏈接數(shù)。
??當(dāng)創(chuàng)建出來一個(gè)文件時(shí),這個(gè)硬鏈接數(shù)都是為1的。所以我們?cè)趧h除文件時(shí)干了兩件事情:文章來源:http://www.zghlxwxcb.cn/news/detail-823241.html
- 在目錄中將對(duì)應(yīng)的記錄刪除。
- 將硬連接數(shù)置為0,對(duì)應(yīng)的磁盤釋放。
- 需要注意的是,即使一個(gè)文件有多個(gè)硬鏈接,只要所有硬鏈接都被刪除,文件的數(shù)據(jù)才會(huì)真正被刪除。在最后一個(gè)硬鏈接被刪除之前,其他硬鏈接仍然可以訪問和使用文件的內(nèi)容。
軟鏈接
- 軟鏈接(Symbolic Link),也被稱為符號(hào)鏈接或軟連接,是一種特殊類型的文件,它指向另一個(gè)文件或目錄。
- 軟鏈接是通過路徑名來引用的,類似于一個(gè)快捷方式或別名。它允許將一個(gè)文件或目錄鏈接到另一個(gè)位置,而無需復(fù)制或移動(dòng)實(shí)際的數(shù)據(jù)。
- 軟鏈接與硬鏈接不同,軟鏈接是一個(gè)獨(dú)立的文件,它包含了指向目標(biāo)文件或目錄的路徑信息。這意味著當(dāng)訪問軟鏈接時(shí),操作系統(tǒng)會(huì)解析軟鏈接并跟蹤到目標(biāo)文件或目錄,然后訪問真正的數(shù)據(jù)。
使用這個(gè)命令來建立軟鏈接:
??????ln -s <目標(biāo)文件或目錄> <鏈接名>
??可以看出來,硬鏈接數(shù)還是1,因?yàn)檐涙溄訐碛歇?dú)立的一個(gè)inode,每一個(gè)文件都是獨(dú)立的,所以u(píng)和t是兩個(gè)文件,只不過u指向了t,且u的文件大小也不是t的文件大小。
??需要注意的是,軟鏈接有可能形成循環(huán)鏈接,即鏈接鏈條上存在循環(huán)引用。這種情況下,操作系統(tǒng)可能無法正確解析鏈接關(guān)系,導(dǎo)致訪問錯(cuò)誤或死循環(huán)。因此,在創(chuàng)建軟鏈接時(shí)應(yīng)注意避免循環(huán)鏈接。
?????? 創(chuàng)作不易,你的點(diǎn)贊和關(guān)注都是對(duì)我莫大的鼓勵(lì),再次感謝您的觀看??文章來源地址http://www.zghlxwxcb.cn/news/detail-823241.html
到了這里,關(guān)于硬鏈接和軟鏈接以及inode的簡述【Linux】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!