Linux 清理 “看不见但占空间” 的隐藏文件

Lance.Wu 发表于: 2026-01-09   最后更新时间: 2026-01-09 17:25:29  
{{totalSubscript}} 订阅, 27 游览

有时候你会发现 Linux 服务器的磁盘空间快满了,用df -h一看,根目录占用特别大,但你在系统里到处找,都找不到哪个文件占了这么多空间。这种情况通常是因为:有些文件已经被删除了,但进程还在占用它们,导致系统无法真正释放磁盘空间。这些文件在正常目录里看不到,属于 “隐藏占用”

一、先找出那些 “删不掉的隐藏文件”

Linux 把每个进程打开的文件都放在/proc/进程号/fd下面。如果一个文件被删除了,但进程还在使用它,它会显示为 (deleted)。

你可以用下面的命令查看所有这类隐藏文件:

sudo find /proc/*/fd -ls 2>/dev/null | grep deleted | awk '{size=$1; $1=""; print size, $0}' | sort -k1 -h | numfmt --field=1 --to=iec-i --suffix=B --format="%9f"

这条命令会列出所有被进程占用但已经删除的文件,包括它们的大小、路径和对应的进程。

二、找到占用这些文件的进程

上一步你会看到很多类似:

811MiB /proc/962692/fd/3 (deleted)

这里的 962692 就是占用文件的进程 ID(PID)。

为了方便提取 PID,你可以用下面的命令,它会自动整理并显示所有占用隐藏文件的进程号:

sudo find /proc/*/fd -ls 2>/dev/null | grep deleted | awk '{print $1 " " $11}' | sort -h | numfmt --to=iec-i --suffix=B --format="%9f" | grep -oP '/proc/\K\d+(?=/)'

这条命令会输出一串 PID,比如:

962692
12345
7890

这些就是正在占用隐藏文件的进程。

三、终止进程,释放磁盘空间

找到进程后,你只需要重启或终止这些进程,系统就会自动释放被占用的磁盘空间。
你可以用:

kill <PID>

如果进程无法正常退出,再用强制终止:

kill -9 <PID>

注意:
终止进程前,最好确认这些进程不是关键业务(比如数据库、Nginx、核心服务)。如果是业务进程,重启服务即可,不要直接 kill -9。

四、一键清理(慎用)

如果你确认这些进程都可以安全终止,也可以用一条命令自动清理所有占用隐藏文件的进程:

sudo find /proc/*/fd -ls 2>/dev/null | grep deleted | awk '{print $1 " " $11}' | sort -h | numfmt --to=iec-i --suffix=B --format="%9f" | grep -oP '/proc/\K\d+(?=/)' | xargs kill -9

五、验证磁盘空间是否释放

清理完后,再运行:

df -h

根目录的存储占用比率变小了。

更新于 2026-01-09

查看Linux更多相关的文章或提一个关于Linux的问题,也可以与我们一起分享文章