场景:html
公司要求卸载软件时, 也包含卸载一个目录下的全部文件. 因而去修改删除文件的shell脚本, 添加了删除文件及文件夹的命令(固然是在root权限下的)linux
如: rm -rf /home/vito/****shell
但发现运行shell脚本时, 死活删除不了那个目录下的文件, 固然也就删除不了目录, 同时提示----rm: cannot remove '/home/vito/****/xxx.xxx': Permission denied.spa
在网上查了一下, 说这种状况下, 通常都是该文件被设置了一些不可删除的属性, 如图:3d
能够经过命令lsattr filename, 查看文件因此具备的属性, 从上图也能够看出, 这个文件具备 i 和 a 属性, 至于这些字母表明什么意思, 能够参考这个链接htm
http://www.cnblogs.com/JasonYangBlogs/p/4833896.html(虽然经过linux命令: man chattr, 也能够看到英文版本, 不过中文版理解起来更快一些)blog
a :设置a以后,这个文件将只能增长数据,而不能删除也不能修改数据,只有root才能设置这个属性。rem
i :它可让一个文件不能被删除、更名,设置链接也没法写入或添加数据。只有root才能设置这个属性。it
所以, 这个file1具备这两个隐藏属性后, 直接使用rm命令是没法删除这个文件的.io
那怎么办呢, 很简单, 经过chattr命令, 修改这两个文件的属性后, 就能够正常删除了.
命令为: chattr -ia ./file1
这里 '-' 的意思表示去除, 同理, "+" 表示设置文件的属性, 如图
--------------------------------------------- 分割线---------------------------------------------
新状况, 即便取消了没法删除的属性, 依然没法删除文件
如图:
这是为何, 明明删除去除了文件的不可删属性, 怎么仍是删除不了文件, 连root用户都删除不了, 那还有其它用户能够删除么???
答案是不可能, 若是连root用户都删除不了的文件, 其它用户更不可能删除得了, 所以只能是其它问题引发的, 当时想了好久, 一直没有明白为何会删除不了, 网上也没有找到想要的答案, 就这样一直耗着.
后来, 请教别人的时候, 看到别人会查看文件夹的隐藏属性, 实然之间, 就明白是什么回事了.
--------------------------------------------- 分割线 -------------------------------------------
问题的解决
其实这个问题很简单, 就是由于当前文件的文件夹(目录)的隐藏属性是不可删除的, 所以当你要删除文件夹(目录)下面的文件时, 系统也会提示文件不可删除, 权限不足.
如图
file2文件在文件夹(目录)dir1下, 虽然file2文件已经去掉了不可删除属性, 但由于其所在的文件夹(目录)的属性也是不可删除, 最终, file2文件也所以没法删除!!!!
解决的办法就是将当前文件所在的文件夹(目录){有时候可能不止一层文件夹(目录)被设置成了不可删除属性}的不可删除属性去掉便可, 如果有多层文件夹(目录)都具备不可删除属性, 那就须要保证每层的不可删除属性都去掉了, 以后就能够删除那一直以来删除不了的文件了
如图:
总结:
思惟仍是应该多发散一些, IT的逻辑仍是很清晰的, 须要我的好好思考!