这是一个 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
不知道这一点,因为假文件看起来与真实文件相同。
事实上,它与真实文件相反:在真实目录中没有文件之前,您无法删除它,但是当其中有文件时,您必须删除这个特定的假目录。
这就是为什么。