正如标题所说:为什么我可以以 root 用户身份删除文件?
这是一个例子:
% sudo touch ~/test
% ls -la ~/test
-rw-r--r-- 1 root root 0 Jun 18 20:31 /home/aboettger/test
% rm ~/test
rm: remove write-protected regular empty file ‘/home/aboettger/test’? Y
% ls -la ~/test
ls: cannot access /home/aboettger/test: No such file or directory
因为取消链接文件需要对包含目录的写访问权限。确实可以通过拥有目录来间接获得此权限,因为如果一个人是所有者,那么他总是可以授予自己写访问权。但在这种情况下,您会发现您的主目录已经是您可写的了。目录的所有权不是必需的。写访问是。这包括通过“其他”、通过组成员身份或通过适用的 ACL 条目进行写访问。
如果您对该目录有足够的权限 (
rwx
),您可以删除该目录中的任何文件。基本上,目录条目包含一个表,表中包含文件名及其索引节点。因此,当
rm
给出命令时,文件条目只是从该目录表中删除,它不依赖于文件本身的所有者。对父目录的足够权限就足够了。尽管该文件在文件系统中保持有效,直到使用该文件的所有进程完成为止。
关联的系统调用是
unlinkat()
. 例如,同时删除file.txt
: