為了允許添加資料,防止更改或者删除等,檔案和檔案夾可以設定了特定的控制屬性。例如,你可以在關鍵的系統檔案或者檔案夾中啟用屬性,然後沒有任何使用者,包括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>