为了允许添加数据,防止更改或者删除等,文件和文件夹可以设定了特定的控制属性。例如,你可以在关键的系统文件或者文件夹中启用属性,然后没有任何用户,包括root,可以删除或者修改它,比如不允许使用像dump这样的命令等备份工具去备份一个特定的文件或者文件夹,等等。这些属性只可以在ext2,ext3或者ext4文件系统中的文件和文件夹上设定。

有两个命令 lsattr 和 chattr 用来管理属性。下面是常用属性的列表。
属性
描述
a (append)
允许在文件中进行追加操作
a
这个属性不允许更新文件的访问时间
c (compressed)
启用这个属性时,文件在磁盘上会自动压缩
d (dump)
不能使用dump命令备份文件
d
设置了文件夹的d属性时,更改会在同步保存在磁盘上
e (extent format)
它表明,该文件使用磁盘上的块的映射扩展
i (immutable)
在文件上启用这个属性时,我们不能更改、重命名或者删除这个文件
j (journaling)
设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件
s (synchronous)
设置了这个属性时,变更或更改同步保存到磁盘上
chattr属性中可以使用的不同选项 :
-r 递归地修改文件夹和子文件夹的属性
-v chattr命令会输出带有版本信息的冗余信息
-f 忽略大部分错误信息
在chattr中用于设置或者取消属性的 操作符
'+' 符号用来为文件和文件夹设置属性,
'-' 符号用来移除或者取消属性
'=' 使它们成为文件有的唯一属性。
chattr 和 lsattr 命令的基本语法 :
<code># chattr <options> <attributes> <file or directory ></code>
<code># lsattr <file or directory></code>
<code>[root@linuxtechi ~]# chattr +i dummy_data</code>
<code>[root@linuxtechi ~]# lsattr dummy_data</code>
<code>----i----------- dummy_data</code>
现在试着删除或者修改文件
<code>[root@linuxtechi ~]# rm -f dummy_data</code>
<code>rm: cannot remove 'dummy_data': operation not permitted</code>
<code></code>
<code>[root@linuxtechi ~]# echo "test" >> dummy_data</code>
<code>-bash: dummy_data: permission denied</code>
<a target="_blank"></a>
<code>[root@linuxtechi ~]# chattr -i dummy_data</code>
<code>---------------- dummy_data</code>
<code>[root@linuxtechi ~]# chattr +a dummy_data</code>
<code>-----a---------- dummy_data</code>
现在试着把fstab文件的内容追加到dummy_data文件
<code>[root@linuxtechi ~]# cat /etc/fstab >> dummy_data</code>
<code>[root@linuxtechi ~]#</code>
让我们来新建一个sysadmin文件夹和它的子文件夹
<code>[root@linuxtechi ~]# mkdir sysadmin</code>
<code>[root@linuxtechi ~]# mkdir sysadmin/admim_{1,2,3,4,5}</code>
<code>[root@linuxtechi ~]# ls -l sysadmin/</code>
<code>total 0</code>
<code>drwxr-xr-x. 2 root root 6 apr 19 09:50 admim_1</code>
<code>drwxr-xr-x. 2 root root 6 apr 19 09:50 admim_2</code>
<code>drwxr-xr-x. 2 root root 6 apr 19 09:50 admim_3</code>
<code>drwxr-xr-x. 2 root root 6 apr 19 09:50 admim_4</code>
<code>drwxr-xr-x. 2 root root 6 apr 19 09:50 admim_5</code>
在sysadmin文件夹递归设置不可更改属性
<code>[root@linuxtechi ~]# chattr -r +i sysadmin</code>
<code>[root@linuxtechi ~]# lsattr -r sysadmin/</code>
<code>----i----------- sysadmin/admim_1</code>
<code>sysadmin/admim_1:</code>
<code>----i----------- sysadmin/admim_2</code>
<code>sysadmin/admim_2:</code>
<code>----i----------- sysadmin/admim_3</code>
<code>sysadmin/admim_3:</code>
<code>----i----------- sysadmin/admim_4</code>
<code>sysadmin/admim_4:</code>
<code>----i----------- sysadmin/admim_5</code>
<code>sysadmin/admim_5:</code>
现在试着用rm命令删除文件夹
<code>[root@linuxtechi ~]# rm -rf sysadmin</code>
<code>rm: cannot remove ‘sysadmin/admim_1’: permission denied</code>
<code>rm: cannot remove ‘sysadmin/admim_2’: permission denied</code>
<code>rm: cannot remove ‘sysadmin/admim_3’: permission denied</code>
<code>rm: cannot remove ‘sysadmin/admim_4’: permission denied</code>
<code>rm: cannot remove ‘sysadmin/admim_5’: permission denied</code>
使用以下命令递归取消属性
<code>[root@linuxtechi ~]# chattr -r -i sysadmin</code>
<b>原文发布时间为:2015-06-09</b>
<b>本文来自云栖社区合作伙伴“linux中国”</b>