unlink是如何工作的?

use*_*805 4 unix io perl file

我有点难以理解这是如何工作的.

似乎unlink()将删除引用文件数据的inode,但实际上不会删除数据.如果是这种情况,

a)数据会发生什么?据推测,它不会永远存在,或者人们会一直耗尽磁盘空间.是否有其他东西最终会在没有关联的inode的情况下删除数据,或者是什么?

b)如果数据没有发生:我怎么能真正删除它?如果事情自动发生:我怎样才能在命令上发生这种情况?

(辅助问题:如果shell命令rm并且unlink基本上做同样的事情,正如我在这里读到的其他问题,而Perl unlink只是对它的另一个调用,那么模块的重点是什么File::Remove,它看起来完全一样再一次?我意识到"有不止一种方法可以做到这一点",但这似乎是"不止一种说法 "的情况,"它"总是指相同的操作.)

简而言之:我可以确保删除文件实际上导致其磁盘空间立即被释放吗?

Sob*_*que 10

磁盘上的每个inode都有一个引用计数 - 它知道有多少个引用它.目录条目是引用.可以存在对同一inode的多个引用.unlink删除引用.当引用计数为零时,则inode不再使用,可能会被删除.这是有多少工作,例如硬链接和快照.

特别是 - 打开文件句柄是一个参考.因此,您可以打开一个文件,取消链接并继续使用它 - 只有在文件句柄关闭后才会被删除(如果引用计数降为零,并且它在其他任何地方都没有打开/硬链接).