天天看點

在Linux中用chattr和lsattr指令管理檔案和目錄屬性

為了允許添加資料,防止更改或者删除等,檔案和檔案夾可以設定了特定的控制屬性。例如,你可以在關鍵的系統檔案或者檔案夾中啟用屬性,然後沒有任何使用者,包括root,可以删除或者修改它,比如不允許使用像dump這樣的指令等備份工具去備份一個特定的檔案或者檔案夾,等等。這些屬性隻可以在ext2,ext3或者ext4檔案系統中的檔案和檔案夾上設定。

在Linux中用chattr和lsattr指令管理檔案和目錄屬性

有兩個指令 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 &lt;options&gt; &lt;attributes&gt; &lt;file or directory &gt;</code>

<code># lsattr &lt;file or directory&gt;</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" &gt;&gt; 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 &gt;&gt; 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>

繼續閱讀