为什么删除 cgroup 目录时 rmdir 可以正常工作,而 rm -rf 却不行?

为什么删除 cgroup 目录时 rmdir 可以正常工作,而 rm -rf 却不行?

这是一个 cgroup 树。根节点是 demo,它只有一个子节点

demo/
├── cgroup.clone_children
├── cgroup.procs
├── cgroup.sane_behavior
├── child
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── notify_on_release
│   ├── pool_size
│   └── tasks
├── notify_on_release
├── pool_size
├── release_agent
└── tasks

尝试使用 rm -rf hit error 删除子节点,但 rmdir 工作正常

[root@iZ8vbf3rrty84cddfc7w8mZ cgroup]# rm -rf demo/child/
rm: cannot remove ‘demo/child/cgroup.procs’: Operation not permitted
rm: cannot remove ‘demo/child/tasks’: Operation not permitted
rm: cannot remove ‘demo/child/pool_size’: Operation not permitted
rm: cannot remove ‘demo/child/notify_on_release’: Operation not permitted
rm: cannot remove ‘demo/child/cgroup.clone_children’: Operation not permitted
[root@iZ8vbf3rrty84cddfc7w8mZ cgroup]#
[root@iZ8vbf3rrty84cddfc7w8mZ cgroup]# rmdir demo/child/
[root@iZ8vbf3rrty84cddfc7w8mZ cgroup]#

为什么 rmdir 可以但 rm -rf 不能在这里工作

答案1

rm -rf删除所有文件,然后删除目录。rmdir只是删除目录。

pool_size像从 cgroup 中删除单个文件是没有意义的。那会是什么?但删除 cgroup 确实有意义。rm -rf不知道这一点,因为假文件看起来与真实文件相同。

事实上,它与真实文件相反:在真实目录中没有文件之前,您无法删除它,但是当其中有文件时,您必须删除这个特定的假目录。

这就是为什么。

答案2

rm命令还会删除所有文件(对于cgroups 伪文件系统)。

rmdir如果删除所有文件,该命令将删除该目录。

我猜它不会将伪文件系统视为文件。所以是可以通过的。

我不确定这是否是一个错误。

相关内容