Linux下文件删除的规则

原本一直以为Linux下删除一个目录的条件是:user拥有该目录,以及该目录下所有子目录和子文件的写权限。但其实这样的理解是错误的。按照这里的意思,是否能删除一个文件,取决于user是否拥有文件父目录的写权限;删除一个目录,第一步是清空该目录下的所有内容,最后删除该目录本身。

以一个具体的例子来说,目录结构是这样的:

Linux下待删除的目录结构

其中test和test1都是由user创建的目录,而目录下的子目录和文件均由root创建。按照前面的规则,test1可以通过

1
2
su user
rm -rf test1

删除,但如果执行

1
2
su user
rm -rf test

则会因为在/test/root/下的hello文件无法被user删除而报错。但如果/test/root/下没有无法被user删除的文件,或者/test/root/为空,则根据规则就可以被删除了。

总而言之,并不清楚为何Linux会使用这样的一套删除规则,可能是出于某种方便的考量。这意味着一个用户实际上能够删除其本来不具备权限的文件。在理解上容易发生偏差。