前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 Linux 下快速找到被删除的文件

如何在 Linux 下快速找到被删除的文件

原创
作者头像
PHP开发工程师
修改2021-05-31 10:27:57
3K0
修改2021-05-31 10:27:57
举报
文章被收录于专栏:thinkphp+vuethinkphp+vue

日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages

但有的时候,会出现怎么也查不到大文件的情况,通过 du 查找的时候,统计出来的大小,跟 df 显示的占用空间对应不上。

如果通过 df -i 查看inode没有满的话,那么极有可能,是有大文件被直接rm了,但是仍然有进程打开了这个文件。

这种情况,由于进程没有退出,因此文件占用的空间并不会释放;直到进程退出,磁盘空间才会真正释放。

如何找到是哪个进程打开了该文件

Linux上,由于进程仍然存活,因此可以通过查看所有进程打开的 fd,如果该文件已经被删除,则查看时,会显示(deleted)

示例如下:

代码语言:javascript
复制
$?sudo?find?/proc/*/fd?-ls?|?grep??'(deleted)'
???388609??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/4?->?/tmp/ibpX85Vd\?(deleted)
???388610??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/5?->?/tmp/ibCwAgAj\?(deleted)
???388611??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/6?->?/tmp/ibRZ5rep\?(deleted)
???388612??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/7?->?/tmp/ibBuNEzA\?(deleted)
???388616??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/11?->?/tmp/ibG68kpG\?(deleted)

如何避免这种情况

不要直接删除该文件,而是通过将文件 truncate 的方式,释放磁盘空间。

一种方式是:

代码语言:javascript
复制
cat?/dev/null?>?${filename}

或者(新get!)

代码语言:javascript
复制
:?>?${filename}

如此,可以快速释放空间。

完整实例:http://github.crmeb.net/u/defu

来自 “开源世界 ” ,链接:http://ym.baisou.ltd/post/657.html,如需转载,请注明出处,否则将追究法律责任。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何找到是哪个进程打开了该文件
  • 如何避免这种情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com