当前位置:首页 > 生活 > 正文

Linux 为啥文件删除了(linux删除文件还是内存已满)

在linux运维中,磁盘满了是最经常遇到的情况。通常情况下面,我们会先通过find 命令找出大文件,比如下面的命令找出大于10g的文件。

find / -size +10G

找出后我们可以通过echo 命令清空这个文件,有时间直接删除这个文件,但删除后df 发现磁盘还是100%,资源并没有释放。

那是因为虽然文件被删除,但如果还有程序打开(占用)这个文件,真实文件内容并没有释放。

可以通过lsof 命令查看处于删除状态的文件句柄。

$ lsof | egrep deleted|COMMANDCOMMAND       PID    TID TASKCMD     USER   FD  TYPE  DEVICE    SIZE/OFF      NODE NAMEora         25575   8194 oracle    oracle   33   REG   65,65  4294983680  31014933 /oradata/DATAPRE/file.dbf (deleted)

就可以发现PID为 25575 的进程正在打开这个文件,并且连接已经失效了。

$ file /proc/25575/fd/33/proc/25575/fd/33: broken symbolic link to `/oradata/DATAPRE/file.dbf (deleted)'

此时有两种解决办法,方法一比较粗暴,直接kill 掉这个进程,但如果不能杀死进程的话,方法二比较优雅,清空这个fd的内容。

$ echo > /proc/25575/fd/33