在搭建ES集群的时候遇到来个问题,导致我搞了一个下午都没搞定,最终在这个博客下找到来答案,这哥们的linux学习笔记真的是写的不错

Linux系统中,拥有最高权限的用户root,在执行文件权限的修改,或者修改文件时也会出现如下错误:

1. chmod: changing permissions of 'xxx': Operation not permitted;
2. E45: 'readonly' option is set (add ! to override)

接下来本文主要介绍如何解决root用户无权限修改文件的问题。

工具/原料

  • Linux

在linux中,root用户是可以做任何的事情,但是当使用一些命令时仍然会出现类似于“Chmod: changing permissions of 'xxx ': Operation not permitted”这样的提示语,如下图所示:

centos Opera centos operation not permitted_root用户

出现这种情况的原因:与该文件(目录)特有的属性是相关的,即文件(目录)属性就是定义为不能被修改的。

对此我们可先用lsattr命令查看文件的属性:lsattr 文件名

centos Opera centos operation not permitted_root用户_02

如果我们想查看一个目录的权限,可使用:lsattr -d 目录名命令

在linux下,有些配置文件是不允许任何人包括root修改的,为了防止被误删除或修改,可以设定该文件的"不可修改位(immutable)",即文件属性为i。从上面可以看出当前文件有个i属性,有i属性的文件是不能修改的,更不可被删除,即使是root用户也不可。

既然知道了文件不能操作的原因是加了i属性,所以相应的解决方案就是把文件的i属性去除,然后对此文件内容进行修改,最好在操作完成后恢复文件的i属性。

去除i属性命令:其中对于文件名,既可以是相对路径,也可以是绝对路径

chattr -i 文件名

添加i属性命令:

chattr +i 文件名

 

  扩展:在解决了个人问题之后,另外还有必要了解一下lsattr和chattr的其它语法命令.

  语法:lsattr 选项 文件名

  选项:

     -a 显示所有文件和目录

     -d 若目标是目录,仅列出目录本身的属性,而不是子文件的


  chattr的全称为change attribute 作用:改变文件属性

  语法:chattr [-RV][-v<版本编号>][+/-/=<属性>] [文件或目录名]

  参数:

           -R  递归处理,将指定目录下的所有文件及子目录一并处理。
           -v<版本编号>  设置文件或目录版本。
           -V  显示指令执行过程。
           +<属性>  开启文件或目录的该项属性。
           - <属性>  关闭文件或目录的该项属性。
           =<属性>  指定文件或目录的该项属性。

  补充说明:这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

           a:如果对文件设置a属性,那么只能在文件中增加数据(只能采用输出重定向方式来增加数据,不能使用vi命令来增加数据),但是不能删除和修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除文件(当设定 a 之后,这个目录将只能增加数据,而不能删除,只有 root 才能设定这个属性
           b:不更新文件或目录的最后存取时间。
           c:将文件或目录压缩后存放。
           d:将文件或目录排除在倾倒操作之外。
            i:如果对文件设置i属性,那么不允许对文件进行删除、改名、也不能对文件添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许新建、删除和重命名文件。
           s:保密性删除文件或目录。
           S:即时更新文件或目录。
           u:预防以外删除。