linux删除不了文件, 修改文件属性也删除不了的一个解决思路

场景:

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

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

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

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

  

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

  http://www.cnblogs.com/JasonYangBlogs/p/4833896.html(虽然通过linux命令: man chattr, 也可以看到英文版本, 不过中文版理解起来更快一些)

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

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

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

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

  命令为: chattr -ia ./file1

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

  

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

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

  如图:

  

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

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

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

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

问题的解决

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

  如图

  

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

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

  如图:

  

总结:

  思维还是应该多发散一些, IT的逻辑还是很清晰的, 需要个人好好思考!

时间: 2024-10-29 19:06:59

linux删除不了文件, 修改文件属性也删除不了的一个解决思路的相关文章

我的linux学习之路-文件的创建于删除

昨天学习了环境变量!但不知道操作了什么结果吧 ls命令写进了/tmp这个目录下!结果在郑州李欣的帮助下!通过命令 find / -name ls(-name前面需要空格)这个命令才发现的!之后又通过命令:mv /tmp/ls /bin 这个命令才把ls放回了/bin中! 今天学习的命令为 mkdir 命令 和rm命令! mkdir可以在据对路径下创建目录,也可以在相对路径下创建目录(绝对路径是以/开头的路径,相对路径就是当前路径); mkdir可以创建多层级的目录 例如 mkdir /1/2/3

linux下使用localhost和127.0.0.1都不能连接的解决思路

linux下刚安装了mysql,尝试写了程序连接mysql,出现了只有用本地ip地址才能连接,而127.0.0.1和localhost都不能访问 解决这个问题主要查看3个方向 1.hosts中是否有ip映射 2.mysql数据库中user表中的用户信息是否正确 我解决的方向, 1.hosts查看了有映射127.0.0.1和localhost的信息. 2.用户信息有误 问题在这里:刚安装的时候记得用户和密码都是root,而且配置ip地址通过程序或者其他客户端软件访问是能够访问成功的. 但是退出重启

linux文件乱码无法正常删除

系统中一个文件夹出现两个文件名乱码的css文件,正常删除不掉,删除上一级文件夹也无法删除那两个乱码的文件,很是头疼,尝试了用i节点来删除该文件,成功. 乱码文件如下: [[email protected] main]# ll 总用量 156 -rw-r--r-- 1 root root  4922 7月   9 12:08 common - ????.css -rw-r--r-- 1 root root  8743 9月  24 11:14 common.css -rw-r--r-- 1 roo

删除server服务文件

某用户升级ArcGIS for Server后,出现了之前版本server中的服务残留的现象,且服务访问不正常,怎样彻底删除的残留文件. 即怎样删除ArcGIS for Server中发布的某个服务涉及的所有文件. 手动删除服务涉及的文件路径: 到下面文件夹下或文件中手动删除对应于服务名字的项目 (以我的机器为例:假设要删除机器名"SERVER125.ESRI.COM" 中server manager中文件夹"sunlin"下的A服务,安装路径为默认路径) 1)进入

Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法

catalog 0. 引言 1. Linux平台上涉及的File IO操作 2. Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件IO操作时,可能遇到的错误,及其解决方法,主机安全攻防产品除了需要将安全攻防上的领域知识固化到程序实现上之外,还极度依赖关联系统本身.编程语言库的特性,原则上,并不是所有的安全需求都能100%地落实到程序设计中,这需要我们对操作系统.编程语言本身具有较深的理解 Relevant Link: h

Linux文件的复制、删除和移动命令

cp命令  功能:将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大.  语法:cp [选项] 源文件或目录 目标文件或目录  说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中. 参数: - a 该选项通常在拷贝目录时使用.它保留链接.文件属性,并递归地拷贝目录,其作用等于dpR选项的组合. - d 拷贝时保留链接. - f 删除已经存在的目标文件而不提示. - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认.回答y时目标文

linux命令详解(19)修改文件属性 lsattr、chattr命令详解

修改文件属性 Linux文件系统里的文件和目录全都关联用户.用户组和其他用户的读.写和执行权限.此外,还可能存在其他特定文件系统类型才有的文件和目录相关属性. ext2和ext3文件系统文件可以选用一些特殊属性.使用lsattr命令可以列出这些属性.大部分属性都晦涩难懂,默认并不启用.下面的示例使用lsattr查看部分文件属性: 1 2 3 4 5 6 # lsattr /etc/host* ------------- /etc/host.conf ------------- /etc/host

linux系列之1--文件系统+创建、删除文件和文件夹命令

1.概述 此系列是为自己做的一个总结,不是系统,主要目的是记录linux下我认为经常忘的方方面面. 2.文件系统 在linux下没有windows下的C.D盘的概念,而是目录和文件组成的一种层次结构,目录起点为根(root),其名为/.目录则为一个包含许多目录项的文件,在linux下所有东西都可以当成文件来看待,每个目录最少有2个文件 一个.代表自己,一个..代表上一层目录. linux下每个文件都具有属性信息,信息有:文件属性(普通文件.文件夹.可执行文件).文件大小.文件所有者.文件权限.最

6个Linux chkconfig命令实例 - 增加,删除,查看和修改services的自动启动选项

注意:service的安装目录在/etc/rc.d/init.d下,/etc/init.d 是/etc/rc.d/init.d的链接. chkconfig命令用来安装,查看或修改 services随系统启动的启动选项的设置.本文章包含了7个实例来解释如何使用chkconfig命令. 1 在shell脚本中检查service的启动选项的设置 当你执行chkconfig加service名字,如果service被配置为自动启动,则它将返回true.下列的代码段显示了如何在脚本中检查一个service是