2013-08-19 83 views

回答

2

在unix系統上當創建init.log時,將創建一個。每個inode都有一個計數器,它計算對該文件的所有引用。引用意味着硬鏈接或打開文件時。該文件只在該計數器回到零時被刪除。

因此,當標準輸出被重定向到init.loginode具有計數器值2(由目錄項所引用,而且由於open計數。當rm(使用unlink功能)刪除該文件,該計數器成爲1,所以文件是沒有被任何目錄條目引用,但inode仍然存在當腳本完成時,計數器變爲0並且inode被刪除

沒有簡單的方法來讀取任何目錄條目未引用的inode。

+0

謝謝TrueY。這現在有道理。 – Bob

1

文件實際上不是d直到沒有任何引用它。在這種情況下,您已刪除所有目錄條目,但程序仍具有打開的文件描述符,因此在程序退出之前數據不會完全刪除。請注意,它也將繼續佔用磁盤空間。

在Linux中,仍然可以在/proc/PID/fd/FD中查看文件的內容,其中PID是進程的ID,FD是您感興趣的文件描述符。一旦程序退出,數據將被烤乾,磁盤空間可以被回收...所以儘可能獲得你的數據;)

如果你知道一個程序仍然有打開的文件描述符,你不應該刪除一個日誌文件。而應該用cat /dev/null > log.file截斷文件,或者在bash中使用> log.file

+0

它消耗'home /'分區中的磁盤空間而不是可以找到/ proc/PID/fd/FD /'的'/' – Bob

相關問題