cgroup 디렉토리를 삭제할 때 rmdir은 정상적으로 작동하지만 rm -rf는 작동하지 않는 이유는 무엇입니까?

cgroup 디렉토리를 삭제할 때 rmdir은 정상적으로 작동하지만 rm -rf는 작동하지 않는 이유는 무엇입니까?

이것은 cgroup 트리입니다. 루트 노드는 데모이며 하위 노드가 하나만 있습니다.

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_sizecgroup에서 개별 파일을 삭제하는 것은 의미가 없습니다. 그게 뭐야?하다? 그러나 cgroup을 삭제하는 것은 의미가 있습니다. rm -rf가짜 파일이 실제 파일과 동일해 보이기 때문에 이를 몰랐습니다.

실제로 이는 실제 파일과 반대입니다. 실제 디렉터리에 파일이 없을 때까지는 삭제할 수 없지만, 파일이 있을 때는 특정 가짜 디렉터리를 삭제해야 합니다.

그렇기 때문에.

답변2

rm명령은 또한 모든 파일을 삭제합니다(cgroup 의사 파일 시스템).

rmdir모든 파일이 삭제되면 이 명령은 디렉터리를 삭제합니다.

의사 파일 시스템을 파일로 취급하지 않는 것 같습니다. 그래서 통과될 수 있습니다.

이것이 버그인지 확실하지 않습니다.

관련 정보