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

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

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

[[380203]]

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

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

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

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

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

示例如下:

 

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

如何避免这种情况

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

一种方式是:

 

  1. cat /dev/null > ${filename} 

或者(新get!)

 

  1. : > ${filename} 

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

责任编辑:华轩 来源: 奇妙的Linux世界
相关推荐

2018-10-17 09:20:31

Linux命令重复文件

2011-04-14 15:12:10

Linux恢复

2020-06-19 20:00:14

微信支付记录移动应用

2022-03-28 19:53:24

Linux恢复文件意外删除文件

2014-03-20 10:31:02

Linuxbin

2023-12-20 22:04:17

Linux二进制文件

2022-04-09 08:56:44

Linux

2018-05-09 16:37:45

LinuxPDF文件解除密码

2018-05-28 11:10:08

Linux命令IP地址

2015-03-30 11:34:19

LinuxFSlint

2017-05-04 14:43:43

恶意文件WinLinux

2021-04-30 13:19:20

Linux删除分区

2019-10-17 17:15:01

Linux解压文件命令

2020-09-30 06:00:00

Linux误删除恢复文件

2016-11-22 19:37:54

Linux恢复文件

2017-05-25 12:04:48

Linux删除超大文件

2009-06-10 08:49:05

LinuxExt3恢复

2011-07-20 13:07:30

Windows 7恢复

2009-02-17 22:02:04

Linuxboot故障

2011-03-09 15:54:34

LAMP
点赞
收藏

51CTO技术栈公众号