`rm -rf` 不是原子的吗?

`rm -rf` 不是原子的吗?

我刚刚发现一个令人困惑的错误:

rm: cannot remove `xxx/app/cache/prod': Directory not empty

这是由以下命令引起的:

rm -rf $cache_dir/*

其中$cache_dir定义为xxx/app/cache

所以我认为它是这样的:rm删除了 dir 中的所有内容cache/prod,然后在尝试删除该cache/prod目录之前 - 另一个程序在其中创建了一个文件/目录,因此导致了rm失败。

我的假设正确吗?

答案1

给出的错误消息是“目录不为空”(ENOTEMPTY),考虑到您的假设听起来是正确的,这是一个竞争条件,程序在rm尝试删除该目录之前在该目录中创建了一个文件,从而给出了ENOTEMPTY底层的预期错误rmdir(2)

笔记:为了安全起见,您可以将该目录移动/重命名为新名称,然后执行对此目录的删除。

相关内容