场景:

  公司要求卸载软件时, 也包含卸载一个目录下的所有文件. 于是去修改删除文件的shell脚本, 添加了删除文件及文件夹的命令(当然是在root权限下的)

  如: rm -rf /home/vito/****

  但发现运行shell脚本时, 死活删除不了那个目录下的文件, 当然也就删除不了目录, 同时提示----rm: cannot remove '/home/vito/****/xxx.xxx': Permission denied.

  在网上查了一下, 说这种情况下, 一般都是该文件被设置了一些不可删除的属性, 如图:

  

linux 系统无法删除 overlay2目录_操作系统

  可以通过命令lsattr filename, 查看文件所以具有的属性, 从上图也可以看出, 这个文件具有 i 和 a 属性, 至于这些字母代表什么意思, 可以参考这个连接

  (虽然通过linux命令: man chattr, 也可以看到英文版本, 不过中文版理解起来更快一些)

  a :设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性。

  i :它可以让一个文件不能被删除、改名,设置连接也无法写入或添加数据。只有root才能设置这个属性。

  因此, 这个file1具有这两个隐藏属性后, 直接使用rm命令是无法删除这个文件的.

  那怎么办呢, 很简单, 通过chattr命令, 修改这两个文件的属性后, 就可以正常删除了.

  命令为: chattr -ia ./file1

    这里 '-' 的意思表示去除, 同理, "+" 表示设置文件的属性, 如图

  

linux 系统无法删除 overlay2目录_删除文件_02

  --------------------------------------------- 分割线---------------------------------------------

 

新情况, 即使取消了无法删除的属性, 依然无法删除文件

  如图:

  

linux 系统无法删除 overlay2目录_无法删除_03

  这是为什么, 明明删除去除了文件的不可删属性, 怎么还是删除不了文件, 连root用户都删除不了, 那还有其它用户可以删除么???  

  答案是不可能, 如果连root用户都删除不了的文件, 其它用户更不可能删除得了, 因此只能是其它问题引起的, 当时想了很久, 一直没有明白为什么会删除不了, 网上也没有找到想要的答案, 就这样一直耗着.

  后来, 请教别人的时候, 看到别人会查看文件夹的隐藏属性, 实然之间, 就明白是什么回事了.

  --------------------------------------------- 分割线 -------------------------------------------

问题的解决

  其实这个问题很简单, 就是因为当前文件的文件夹(目录)的隐藏属性是不可删除的, 因此当你要删除文件夹(目录)下面的文件时, 系统也会提示文件不可删除, 权限不足.

  如图

  

linux 系统无法删除 overlay2目录_分割线_04

  file2文件在文件夹(目录)dir1下, 虽然file2文件已经去掉了不可删除属性, 但因为其所在的文件夹(目录)的属性也是不可删除, 最终, file2文件也因此无法删除!!!!

  解决的办法就是将当前文件所在的文件夹(目录){有时候可能不止一层文件夹(目录)被设置成了不可删除属性}的不可删除属性去掉即可, 若是有多层文件夹(目录)都具有不可删除属性, 那就需要保证每层的不可删除属性都去掉了, 之后就可以删除那一直以来删除不了的文件了

  如图:

  

linux 系统无法删除 overlay2目录_无法删除_05