rm文件

在Linux中,你有没有天真的以为用rm删除一个文件,就会释放被占用的空空间?事情可能并不总是像预期的那样发展。

产生一个指定大小的随机内容文件

让我们看看每个当前挂载目录的大小在空之间:

$ df-h/dev/sda 11 454m 280m 147m 66%/boot我选择了其中一个结果进行展示(可以选择任意挂载目录),然后我准备在/boot下生成一个文件。

首先,我们生成一个大小为50M的文件:

$ ddif =/dev/urandom of =/boot/test . txt bs = 50m count = 1到目前为止,我们已经生成了一个大小为50m的文件。让我们看看boot下的文件:

$ df-h/dev/sda 11 454m 312m 115m 74%/boot在这里,你不需要关心多了多少,你只需要注意,/boot下的文件都增加了。

测试程序:

# include & ltstdio.h & gt# include & ltunistd.h & gtint main(void){ FILE * FP = NULL;FP = fopen(& # 34;/boot/test . txt & # 34;, "rw+& # 34;);if(NULL = = FP){ perror(& # 34;打开文件失败& # 34;);return-1;} while(1){//什么都不做睡眠(1);} f close(FP);返回0;至于程序本身,我没有做什么实际的事情,只是打开一个文件,一直循环。编译并运行:

$ gcc-o openfile openfile.c $。/openfile打开另一个窗口,删除test.txt:

$ rm /boot/test.txt看看boot空之间的房间:

$ df-hdev/sda 11 454m 312m 115m 74%/boot?空尺寸怎么一点都没变!!你是用rm删除的吗?

让我们停止openFile程序,看看:

$ df-h/dev/sda 11 454m 280m 147m 66%/boot darling,空立即被释放,也就是不出所料,我们的文件被删除了。

一个文件什么情况下才会被删除?

事实上,只有当一个文件的引用计数为0(包括硬链接数)时,才称之为解除链接删除,只要不是0,就不会被删除。所谓删除,就是删除文件名到inode的链接。只要没有用新数据重写,磁盘上的块数据块就不会被删除。因此,您会看到,即使删除了库,一些数据仍然可以恢复。换句话说,当一个程序打开一个文件(获取文件描述符)时,它的引用计数将是+1。虽然rm看似删除了文件,但实际上只是把引用计数减1,但文件不会被删除,因为引用计数不是0。

结构信息节点{ struct hlist _ node i _ hash/*指向哈希链表的指针*/struct list _ head I _ list;/*后台开发IO列表*/struct list _ head I _ _ list;/*超级块的inode链表*/struct list _ head I _ dentry;/*目录项对象链表头引用inode */unsigned long I _ ino;/*索引节点号*/atomic _ t I _ count;/*引用计数*/unsigned int I _ nlink;/*硬链接个数*/关于它的细节很多(比如硬链接个数也会影响文件是否被删除),这里就不一一展开了。

如何释放已经被删除文件占用的空间?

至于发布,我之前说过了,重启打开文件的过程就可以了。但是有什么方法可以找出哪些文件被删除了,但是仍然被一些进程打开了呢?

自然有方法:

$ lsof |grep标记为已删除的已删除文件就是这样的文件。

实际上,在前面的例子中,我们也可以很容易地观察到(openFile程序运行,test.txt文件被删除):

$ ls-al/proc/` pidoff openfile \’/FD total 0 lrwx-1 root root 64 May 4 09:27 0-& gt;/dev/pts/25 lrwx-1 root root 64 May 4 09:27 1->/dev/pts/25 lrwx-1 root root 64 May 4 09:27 2->/dev/pts/25 lrwx-1 root root 64 May 4 09:27 3->/boot/test.txt(已删除)看到了吧,test.txt后面有删除这个词..

既然说了这种情况下文件没有被删除,还能恢复吗?它实际上是可以阅读的。

总结

其实这种文件已经被删除了,经常出现在程序的日志文件中。也许你有一个常规任务是清理程序生成的日志文件,但是如果程序本身忘记关闭句柄,就会导致无法释放磁盘空。最终,您认为所有文件都已删除,但磁盘仍被占用。所以,养成一个好习惯。打开文件后,不使用时记得关闭文件描述符。

如果发现有大量文件被删除,但是在空之间还没有恢复正常,那么我们不妨看看有没有什么程序可以打开这些文件。

作者:编程朱骥

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论