이것은 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_size
cgroup에서 개별 파일을 삭제하는 것은 의미가 없습니다. 그게 뭐야?하다? 그러나 cgroup을 삭제하는 것은 의미가 있습니다. rm -rf
가짜 파일이 실제 파일과 동일해 보이기 때문에 이를 몰랐습니다.
실제로 이는 실제 파일과 반대입니다. 실제 디렉터리에 파일이 없을 때까지는 삭제할 수 없지만, 파일이 있을 때는 특정 가짜 디렉터리를 삭제해야 합니다.
그렇기 때문에.
답변2
이 rm
명령은 또한 모든 파일을 삭제합니다(cgroup 의사 파일 시스템).
rmdir
모든 파일이 삭제되면 이 명령은 디렉터리를 삭제합니다.
의사 파일 시스템을 파일로 취급하지 않는 것 같습니다. 그래서 통과될 수 있습니다.
이것이 버그인지 확실하지 않습니다.