1. 程式人生 > >linux中檔案控制代碼洩露

linux中檔案控制代碼洩露

1.檔案控制代碼洩露

         在linux中,如果一個檔案正在被某個程序佔用,使用者操作rm刪除該檔案後,我們ls後發現檔案已經不存在了,但實際上該檔案仍然在磁碟上。直到使用它的程序退出後,檔案佔用的磁碟空間才會被釋放。

        其原理如下:

         在linux中,每個檔案都有2個計數器,i_count和i_nlink。i_count表示檔案正在被呼叫的數量。i_nlink表示硬連結的數量。可以理解為i_count為記憶體的引用計數器,i_nlink為磁碟的引用計數器。當一個檔案被某一個程序引用時,對應i_count數就會增加;當建立檔案的硬連結的時候,對應i_nlink數就會增加。

       rm操作是將檔案的i_nlink減少了,如果沒有其它的硬連結i_nlink就為0了;但由於該檔案依然被程序引用,因此,此時檔案對應的i_count並不為0,所以即使執行rm操作,但系統並沒有真正刪除這個檔案,當只有i_nlink及i_count都為0的時候,這個檔案才會真正被刪除。也就是說,還需要解除該程序的對該檔案的呼叫才行。

       備註,在這種情況下,就需要使用lsof工具來檢視檔案被程序的佔用情況了。