linux是通過link的數量來控制檔案刪除的,只有當乙個檔案不存在任何link的時候,這個檔案才會被刪除。一般來說,每個檔案都有2個link計數器:i_count 和 i_nlink。
i_count的意義是當前檔案使用者(或被呼叫)的數量,i_nlink 的意義是介質連線的數量(硬鏈結的數量);可以理解為i_count是記憶體引用計數器,i_nlink是磁碟的引用計數器。
當乙個檔案被某乙個程序引用時,對應i_count數就會增加;當建立檔案的硬鏈結的時候,對應i_nlink數就會增加。
對於刪除命令rm而言,實際就是減少磁碟引用計數i_nlink。這裡就會有乙個問題,如果乙個檔案正在被某個程序呼叫,而使用者卻執行rm操作把檔案刪除了,那麼會出現什麼結果呢?當使用者執行rm操作刪除檔案後,再執行ls或者其他檔案管理命令,無法再找到這個檔案了,但是呼叫這個刪除的檔案的程序卻在繼續正常執行,依然能夠從檔案中正確的讀取及寫入內容。這又是為什麼呢?
這是因為rm操作只是將檔案的i_nlink減少了,如果沒其它的鏈結i_nlink就為0了;但由於該檔案依然被程序引用,因此,此時檔案對應的i_count並不為0,所以即使執行rm操作,但系統並沒有真正刪除這個檔案,當只有i_nlink及i_count都為0的時候,這個檔案才會真正被刪除。也就是說,還需要解除該程序的對該檔案的呼叫才行。
以上講的i_nlink及i_count是檔案刪除的真實條件,但是當檔案沒有被呼叫時,執行了rm操作刪除檔案後是否還可以找回被刪的檔案呢?
**
Linux檔案刪除原理
linux檔案刪除原理 linux是通過link的數量來控制檔案刪除的,只有當乙個檔案不存在任何link的時候,這個檔案才會被刪除。一般來說,每個檔案都有2個link計數器 i count 和 i nlink。i count的意義是當前檔案使用者 或被呼叫 的數量,i nlink 的意義是介質連線的...
linux檔案刪除原理
i link 硬鏈結數量 為0,檔案就被刪除 i count 程序引用計數 為0,檔案就被刪除 檔案刪除的條件i link 0並且i count 0,此時檔案就被刪除 在工作中偶爾會遇到一種情況是,當磁碟空間滿了,刪除一些覺得沒必要的檔案,但是刪除之後磁碟空間未沒有減少,還是處於滿的狀態,這種情況的...
linux檔案刪除原理
每乙個檔案都有兩個計數器 i count和i nlink,這兩個計數器是用來幹嘛的呢?當乙個程序呼叫乙個檔案時這個檔案的i count就會加1,每當乙個檔案多乙個硬鏈結時這個檔案的i nlink就會加1,最新建立的檔案通常都會有乙個i nlink,即檔名本身,檔名也是乙個硬鏈結,目錄會有兩個i nl...