递归删除成功的条件

来源:互联网 发布:南师大网络管理系统 编辑:程序博客网 时间:2024/05/21 06:20
递归删除的时候的执行顺序是从下往上,只有子目录和子文件删除成功了,父目录才能删除成功;否则会造成硬盘空间的泄漏。
比如有如下的结构:


现在去递归删除parent目录的时候,从下往上执行,只有a.txt和b.txt都删除成功了,child才能删除成功,只有child删除成功了,parent才能删除成功
假如a.txt和b.txt没有删除成功,就删除了child,那么就没有访问a.txt和b.txt的途径了(即便在其他地方有对a.txt和b.txt的硬链接计数,等到最后a.txt和b.txt上的硬链接计数为1的时候,我们还是失去了对a.txt和b.txt的访问途径)


实际来操作下:
假设当前登录用户是dsl
现在有一个目录parent,dsl对其的操作权限是"rwx"
在parent目录下有一个child目录,在child目录下有a.txt和b.txt文件
现在欲递归删除child目录,那么dsl对child目录的权限得满足什么条件?
1)由以上分析得,用户想要递归删除child目录,那么必须得先能够删除其下的a.txt和b.txt文件,那么用户就得有对child目录的"wx"权限
w权限是删除child目录下子文件或者子目录必须有的权限
x权限是由于删除child目录下子文件或者子目录的时候,必须要更改相应inode节点上的元数据(至少得更改硬链接计数),因此需要x权限来加载inode节点
可见《Linux文件权限再提炼》
2)如果只有对child目录的"wx"权限,那么输入"rm -R child"命令,会提示操作失败
因为此时由于没有对child目录的"r"权限,而不能列出child目录下的子文件和子目录的记录
不过可以通过以下方式达到目标:
"rm child/a.txt;rm child/b.txt;rm child"
3)如果对child目录有"rwx"权限,那么输入"rm -R child"命令,就能直接递归删除child目录了

0 0
原创粉丝点击