linux之刪除文件

1、用df命令查看磁盤空間發現:總空間大於已用空間 + 剩餘空間,剩餘的3G空間沒有了。造成應用程序無法啓動。

   df -h
  Filesystem            Size  Used Avail Use% Mounted on
  /dev/sda2              60G   21G   36G  37% /

  根分區是ext3文件類型,ext3文件系統會默認保留5%的空間作爲預留空間。

2、du得到到的根路徑文件空間佔用情況應當與df得到的文件系統磁盤佔用的情況是一直的或者說相差無幾。但是在某些情況下卻會出現du得到的空間佔用情況要遠小於df得到的。

後通過查詢,發現問題出現在deleted文件上。

root下lsof | grep deleted會發現多多少少有些文件狀態出於deleted狀態。

[root@eb152 ~]# lsof /data | grep -i delete

進程名   PID       USER    FD   文件類型        大小(字節)  索引節點  文件名  [(狀態)]

java       3311    AuSP    8w      REG              253,0         778   10879268 ***.log (deleted)

狀態爲deleted爲標記被刪除,其實該文件並沒有從磁盤中刪除,類似windows下的回收站狀態。

據稱當有其他進程打開某文件時文件被刪除,就會將該文件標記爲deleted,並刪除其目錄節點。使用du查看時,因爲沒有該刪除狀態文件的節點信息,所以就不做統計,從而導致與df的結果不一致。

若要將deleted狀態文件刪除,則根據pid直接kill調相應進程即可。如kill -9 pid



Linux中徹底刪除文件


我們知道在Linux中刪除文件一般使用rm, 但是rm命令並不會真的清空保存該文件的數據塊的內容,而只是釋放了該文件所佔用的索引節點和數據塊。因此用rm刪除的文件是可以通過一些方法恢復的(比如可以用debugfs恢復,具體方法Google之)。


有些時候我們要徹底刪除一些文件,可以使用shred命令來實現,shred是coreutils的一部分,所以Linux中基本都會有這個命令。


shred徹底刪除文件的方法:

$ shred -u file

shred會用一些隨機內容覆蓋文件所在的節點和數據塊,並刪除文件(-u參數)。

如果想清除的更徹底一點可以加-z 參數,意思是先用隨機數據填充,最後再用0填充。

$ shred -u -z file

另外shred還可以清除整個分區或磁盤,比如想徹底清除/dev/sdb1分區的內容可以這樣:

$ shred /dev/sdb1   (注意不要加-u參數)

shred的詳細參數:

-f, --force   更改權限允許寫入(如有必要)

-n, --iterations=N   重寫N次,默認爲3次

--random-source=FILE 從指定文件讀取數據

-s, --size=N  將文件粉碎爲固定大小 (可使用後綴如K、M、C等)

-u, --remove   重寫後截短並移除文件

-v, --verbose   顯示進度

-z, --zero - add  用0覆蓋數據

–help  顯示幫助

–version   顯示版本信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章