Linux下刪除文件的原理


Linux下文件刪除的原理

  1. Lniux下控制文件真正被刪除的計數器

    Linuxlink的數量來控制文件刪除的。只有當一個文件不存在任何link的時候,這個文件才會被刪除。一般來講,每個文件都有兩個link計數器:i_counti_link

    • i_count的意義是當前文件使用者(或被調用)的數量
      當一個文件被某一個進程引用時,對應的這個值就會增加
    • i_nlink的意義是介質連接的數量(硬鏈接的數量)
      當創建文件的硬鏈接的時候,這個值就會增加

    可以理解為i_count是內存引用計數器,i_nlink是硬盤的引用計數器

  2. rm命令原理

    對於刪除命令rm而言,實際上就是減少磁盤引用計數i_nlink

    Q:如果一個文件正在被某個進程調用,而用戶卻執行rm把文件刪除了,那么會出現什么結果?當用戶執行rm刪除文件后,再執行ls或其他文件管理命令,無法再找到這個文件了,但是調用這個刪除的文件的進程卻在繼續正常執行,依然能夠從文件中正確的讀取及寫入內容,這又是為什么呢?

    Arm操作只是將文件的i_nlink減少了,如果沒有其它的鏈接i_nlink就為0了。但是由於該文件依然被進程引用,因此,此時文件對應的i_count並不為0,所以執行rm操作,系統並沒有真正的刪除這個文件,只有當i_nlinki_count都為0的時候,這個文件才會被真正的刪除。也就是說,必須要解除該進程對該文件的調用,才能真正的刪除。

    Q:當文件沒有被調用,執行了rm操作之后,還能找回被刪除的文件嗎?

    Arm操作只是將文件的i_nlink減少了,或者說置為0,實際上就是將inode的鏈接刪除了,此時,並沒有刪除文件的實體(block數據塊),此時,如果及時停止機器工作,數據是可以找回的,如果繼續寫入數據,那么新數據可能會被分配到被刪除的數據的block數據塊,文件就被真正的回收了。

  3. 實際遇到的問題

    Q:web服務器磁盤空間不夠了,山除了所有無用日志還是顯示磁盤空間不足,但是du -sh發現磁盤空間的占用率很小,這是為什么呢?是什么導致磁盤空間不足?

    A:刪除命令只是刪除了文件的一個i_nlink,但是其他進程正在使用這些log文件,apachetomat,重啟這些服務就好啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM