Linux下刪除文件的原理

Linux下文件刪除的原理

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

    Linuxlink的數量來控制文件刪除的。只有當一個文件不存在任何link的時候,這個文件纔會被刪除。通常來說,每一個文件都有兩個link計數器:i_counti_linklinux

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

    能夠理解爲i_count是內存引用計數器,i_nlink是硬盤的引用計數器web

  2. rm命令原理apache

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

    Q:若是一個文件正在被某個進程調用,而用戶卻執行rm把文件刪除了,那麼會出現什麼結果?當用戶執行rm刪除文件後,再執行ls或其餘文件管理命令,沒法再找到這個文件了,可是調用這個刪除的文件的進程卻在繼續正常執行,依然可以從文件中正確的讀取及寫入內容,這又是爲何呢?日誌

    Arm操做只是將文件的i_nlink減小了,若是沒有其它的連接i_nlink就爲0了。可是因爲該文件依然被進程引用,所以,此時文件對應的i_count並不爲0,因此執行rm操做,系統並無真正的刪除這個文件,只有當i_nlinki_count都爲0的時候,這個文件纔會被真正的刪除。也就是說,必需要解除該進程對該文件的調用,才能真正的刪除。code

    Q:當文件沒有被調用,執行了rm操做以後,還能找回被刪除的文件嗎?進程

    Arm操做只是將文件的i_nlink減小了,或者說置爲0,實際上就是將inode的連接刪除了,此時,並無刪除文件的實體(block數據塊),此時,若是及時中止機器工做,數據是能夠找回的,若是繼續寫入數據,那麼新數據可能會被分配到被刪除的數據的block數據塊,文件就被真正的回收了。內存

  3. 實際遇到的問題web服務器

    Q:web服務器磁盤空間不夠了,山除了全部無用日誌仍是顯示磁盤空間不足,可是du -sh發現磁盤空間的佔用率很小,這是爲何呢?是什麼致使磁盤空間不足?

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

相關文章
相關標籤/搜索