1 文件系統(tǒng)的尋址過程——以cat命令是如何讀出文件內(nèi)容、文件的刪除過程為例
在操作系統(tǒng)級別看存儲空間的話,是分為很多的block塊,這些block塊是分為很多種類的
當(dāng)我們使用cat命令查看文件的時候,比如 cat /1.txt ,那么首先會去尋找根目錄/,Linux一切皆文件,目錄也是文件,根據(jù)目錄名找到inode編號,然后查看歸屬信息和權(quán)限,是否擁有cat權(quán)限,如果有的話再根據(jù)指針尋找指向的內(nèi)容,/的inode block的指針應(yīng)該是指向/目錄的目錄塊directiry block。然后在/目錄的directiry block塊中搜索1.txt文件,如果有,找到它的inode號,然后根據(jù)1.txt的inode編號找到該文件的inode block,檢測歸屬和權(quán)限,如果有權(quán)限,則根據(jù)指針尋找指針指向,該指針指向的就是文件1.txt的具體內(nèi)容所在的數(shù)據(jù)塊。這樣就可以把文件內(nèi)容讀出來了。
如果我們要刪除一個文件的時候,比如刪除1.txt,首先在super block中,會把1.txt的inode編號標記為free(自由的),也就是可用的。然后再去該文件所在的目錄塊(比如/目錄)中把a.txt和inode編號1111的映射關(guān)系刪掉。最后一步,把1.txt的數(shù)據(jù)所在的數(shù)據(jù)塊標記為free,也就是可用的,如果有其它數(shù)據(jù)要存儲,那么這個block是可以分配的。但是,實際上,block里面的內(nèi)容還沒有被抹去,刪除只是刪除了尋址的方式和映射關(guān)系,真正的文件數(shù)據(jù)還是保存在block中的。
所以,刪除的數(shù)據(jù)是可以恢復(fù)的,首先在super block中把inode1111重新標記為不可分配,然后在directory block中把1.txt和inode1111的映射關(guān)系重新建立起來,那么數(shù)據(jù)就恢復(fù)成功了。數(shù)據(jù)恢復(fù)就是一個重新建立關(guān)系,打通尋址路徑的過程。
文件只有在被覆蓋的時候,才算是真正的刪除了,也就是有當(dāng)其他數(shù)據(jù)正好存在1.txt數(shù)據(jù)所用的block中時,把原來1.txt文件的內(nèi)容覆蓋掉,這才算是真正的刪除。所以說,沒有真正的刪除,我們沒有辦法直接把物理硬盤的數(shù)據(jù)抹去,只能通過刪除映射關(guān)系,覆蓋原數(shù)據(jù)的方式去刪除。(我們看到的磁盤還有多少G空間都是一個邏輯的概念,實際上你的硬盤可能已經(jīng)全是數(shù)據(jù)了,只不過有的空間不可用,它保存了你需要的數(shù)據(jù),而那些被標記為free狀態(tài)的block是可用的,即使它上面有數(shù)據(jù)也是你已經(jīng)刪除不需要的數(shù)據(jù),當(dāng)你保存新數(shù)據(jù)的時候就會分配一些被標記為free狀態(tài)的block給你,你的新數(shù)據(jù)會覆蓋掉原來的數(shù)據(jù),這樣新數(shù)據(jù)就被保存了。所以,一定要分清楚邏輯的可用空間概念和物理硬盤的概念)
綜上,磁盤沒有真正的刪除操作,只能覆蓋。而格式化的過程就是建立文件系統(tǒng)的過程,也就是把各種block塊劃分出來的過程。
如圖,我們用ll命令查看到的信息就是存在18653這個inode block中的
所以,即便是建新文件,磁盤空間也會被占用(雖然沒有實際數(shù)據(jù),但是會有inode中的信息)
不管是新建還是刪除文件,第一步都是找super block,分配編號或者把編號標記為free,第二步去目錄中增加或刪除映射關(guān)系,第三步給文件的inode塊關(guān)聯(lián)一個數(shù)據(jù)塊或把關(guān)聯(lián)的數(shù)據(jù)塊標記free。
2 深入探析軟鏈接和硬鏈接本質(zhì)
軟鏈接相當(dāng)于Windows下的快捷方式,修改軟鏈接文件,源文件內(nèi)容也會改變,修改源文件內(nèi)容,軟鏈接文件內(nèi)容隨之改變。刪除軟鏈接不影響源文件,刪除源文件軟鏈接文件失效。
修改硬鏈接文件,源文件內(nèi)容也會改變,修改源文件內(nèi)容,硬鏈接文件內(nèi)容隨之改變。刪除硬鏈接文件,源文件無影響;刪除源文件,硬鏈接文件無影響。
那么軟鏈接和硬鏈接這些特性是怎么來的呢?首先我們知道,文件存儲分為兩部分,一部分是inode block,另一部分是數(shù)據(jù)block。
軟鏈接是指向文件名的
硬鏈接是指向inode的
一個分區(qū)就是一個文件系統(tǒng),軟鏈接可以跨分區(qū)而硬鏈接不可以跨分區(qū)。
這是因為不同分區(qū)可以有相同的文件名,但是inode唯一標識一塊block。硬鏈接是指向inode編號的,假如說我現(xiàn)在有一個1.txt的inode編號為12345,該文件在磁盤分區(qū)1上面。我現(xiàn)在在磁盤分區(qū)2中創(chuàng)建一個指向inode12345的硬鏈接文件,這兩個12345inode編號指向的是自己分區(qū)的block塊,這兩個block根本就不是同一塊磁盤空間。
在操作系統(tǒng)級別,維護的都是inode編號,也就是說操作系統(tǒng)不認文件名,只認inode編號。我們知道,在文件系統(tǒng)中,inode block中有一個指針,軟鏈接的指針就是指向源文件的文件名的。
實際上,在每個目錄中都有兩個隱藏文件,.是當(dāng)前目錄的硬鏈接,…是上一級目錄的硬鏈接。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7243瀏覽量
91047 -
存儲
+關(guān)注
關(guān)注
13文章
4507瀏覽量
87090 -
Block
+關(guān)注
關(guān)注
0文章
26瀏覽量
14896 -
軟鏈接
+關(guān)注
關(guān)注
0文章
8瀏覽量
2280
發(fā)布評論請先 登錄
一文弄懂Linux硬鏈接和軟鏈接
Linux中的軟、硬鏈接的區(qū)別

#硬聲創(chuàng)作季 云計算基礎(chǔ)入門:13-企業(yè)面試題:Linux系統(tǒng)軟鏈接和硬鏈接的區(qū)別精講
Linux文件系統(tǒng)的硬鏈接與軟鏈接
Linux文件系統(tǒng)的硬鏈接與軟鏈接
【Linux基礎(chǔ)】Linux軟鏈接簡介
嵌入式開發(fā)的硬鏈接與軟鏈接有什么不同嗎
你知道Linux軟連接和硬鏈接?
需要了解Linux的硬鏈接與軟鏈接

評論