在 Linux 的日常运维中,我们经常会遇到磁盘空间告急的情况,这时候就需要处理磁盘空间了,在无法挂载新硬盘的情况下,我们第一时间会想到去删除那些占用磁盘空间较大的文件,比如:系统日志、数据库日志等等。以 Centos 为例,可能大文件就是 /var/log/messages。
但有的时候,会出现怎么也查不到大文件的情况,通过 du 命令查找时,统计出来的文件大小,跟 df 显示的占用空间对应不上。这是因为有些文件虽然被删除了,但仍然有进程在占用着它,没有得到彻底的释放,那么 Linux 怎么找到被删除的文件呢,电脑笔记网今天就来讲一讲。
Linux 怎么查看被删除的文件
首先,我们需要确定真是文件被删除了仍然还占用着,通过 df -i 查看 inode 即索引节点没有满的话,那么极有可能是有大文件被直接用 rm 命令删除了,但仍然有进程占用或打开了这个文件,导致磁盘空间无法彻底释放。
这时,我们可以通过查看所有进程打开的 fd,如果该文件已经被删除,则查看时,会显示(deleted)。
相关命令如下:
$ sudo find /proc/*/fd -ls | grep '(deleted)'
Linux 打印出来的信息示例:
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)
通过上面的命令,我们可以看到有很多临时文件虽然被删除了,但还是被进程占用着,那么如何避免这种情况呢?我们就不能直接用 rm 命令删除该文件,而是通过将文件 truncate 的方式,释放磁盘空间。
有两种方式,第一种是:
cat /dev/null > ${filename}
第二种是:
: > ${filename}
通过上面两种命令也可以快速释放磁盘空间,这样 Linux 怎么查看被删除的文件我们就讲完了。在 Linux 的实际运维中这种情况还是很多的,大家可以将文章收藏学习一下。
转载请注明:电脑笔记网 » Linux怎么找到被删除的文件_Linux怎么查看被删除的文件