Linux文件刪除原理及案例分析

謹記: 大多數服務在運行時,是不能刪除對應的服務正在寫入的日誌文件,會帶來意料以外的結果!!!spa

    Linux是經過link的數量來控制文件刪除的,link包括被調用的數量硬連接數量。rest

    真正的刪除一個文件,只有在文件未被進程調用的狀況下,刪除該文件的全部硬連接數便可。日誌

    若是在進程調用時,經過rm命令刪除一個文件,是沒法完全刪除的,該文件依然存在,只不過經過ls命令沒法看到而已!code

案例: 刪除進程正在調用的/var/log/secure文件進程

[root@t-c6 ~]# ls /var/log/secure
/var/log/secure
[root@t-c6 ~]# \rm -rf  /var/log/secure
[root@t-c6 ~]# ls /var/log/secure
ls: 沒法訪問/var/log/secure: 沒有那個文件或目錄

    經過命令lsof能夠看到,該文件並未完全刪除,由於系統進程正在寫入數據到該文件中,進程調用數不爲零致使的!it

[root@t-c6 ~]# lsof | grep deleted
rsyslogd    917   root    2w      REG              252,1  5573745      41014 /var/log/secure (deleted)

如何解決該問題?grep

    重啓對應的服務數據

[root@t-c6 ~]# /etc/init.d/rsyslog restart
關閉系統日誌記錄器:                                       [肯定]
啓動系統日誌記錄器:                                       [肯定]

    未來有一天發現磁盤block滿了,經過du -sh /* | grep G,並未發現太大的文件,多是刪除了不應刪除的文件,致使文件大小一直增加,致使block滿了,可經過 # lsof | grep deleted 查看 文件

只有進程調用數爲0而且硬連接數爲0,該文件才能完全刪除! co

 

注:我使用的系統爲CentOS release 6.9 (Final) 

相關文章
相關標籤/搜索