在linux中,root用户是可以做任何的事情,但是当使用一些命令时仍然会出现类似于“Chmod: changing permissions of 'xxx ': Operation not permitted”这样的提示语,如下图所示:
出现这种情况的原因:与该文件(目录)特有的属性是相关的,即文件(目录)属性就是定义为不能被修改的。
对此我们可先用lsattr命令查看文件的属性:lsattr 文件名
如果我们想查看一个目录的权限,可使用: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:预防以外删除。
其他说明:
chattr是用来更改文件属性,lsattr可用来查看文件的属性,执行命令lsattr /etc/sysctl.conff便可以看到当前文件的属性;
可以发现当前文件有个i属性,查阅命令帮助文档可以看到有i属性的文件是不能修改的,更不可被删除,即使是root用户也不可。
Application/Student/View# lsattr /Application/Spc/View/Login
Application/Student/View# chattr -i /Application/Student/View/Login/index.html
应用举例:
1、用chattr命令防止系统中某个关键文件被修改:
# chattr +i /etc/resolv.conf
然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf
# lsattr /etc/resolv.conf
会显示如下属性
----i-------- /etc/resolv.conf
2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
# chattr +a /var/log/messages