Linux下删除正在写入的文件会发生什么?

在Linux中,删除一个正在写入的文件并不会立即阻止进程继续写入,而是断开了文件名与inode的链接。只要进程引用数不为0,inode就不会被删除,写入的数据仍会占用磁盘空间。当进程结束或磁盘空间满时,inode才会被回收。通过/proc/{pid}/fd目录,可以查看到被删除文件的内容,但无法通过新的硬链接恢复文件。
摘要由CSDN通过智能技术生成

一、成功“删除”了一个正在写入的文件!

某日,我启动了一个进程,向一个文件a.txt中写入内容,但不小心在另一个窗口用命令rm -f a.txt把它删除了,我以为这应该会触发一个警告,比如“不能删除一个打开的正在写入的文件”之类的,结果命令干脆的执行成功了,更出乎预料的是,我回到之前的那个窗口,我发现进程还在正常的写入数据,程序并没有报出任何异常,并打印出了一批批成功写入的日志。

二、为什么会这样?

这就有点让我费解了,伟大的好奇心让我寻找答案。原来Linux中真正表示一个文件的是一个叫inode的数据结构,而文件名只是指向了inode(自然能够想到可以有多个文件名指向同一个inode,这就是文件系统中的硬连接)。用rm -f a.txt这样的命令删除文件,其实是删除了文件名到inode之前的连接关系,那么直接表示文件内容的inode是什么时候删除的呢?答案是文件系统判断如果所有由文件名指向inode的关系都被删除的时候,就把inode删除掉。

        那似乎还是说不通,我上面并没有给a.txt建立硬链接,也就是a.txt的inode应该马上被删除,inode都没有了,写入进程应该报错才是啊,最后我通过查看教学版操作系统xv6的源码,发现其实文件系统在回收inode时,除了判断

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值