有時, 我會不小心的按下 SHIFT+DELETE來刪除我的檔資料。 是的, 我是個笨蛋, 沒有再次確認下我實際準備要刪除的東西。 而且我太笨或者說太懶, 沒有備份我的檔資料。 結果呢?資料丟失了!在一瞬間就丟失了。
這種事時不時就會發生在我身上。 如果你和我一樣, 有個好消息告訴你。 有個簡單又有用的命令列工具叫chattr(Change Attribute 的縮寫), 在類 Unix 等發行版本中, 能夠用來防止檔和目錄被意外的刪除或修改。
通過給檔或目錄添加或刪除某些屬性, 來保證使用者不能刪除或修改這些檔和目錄, 不管是有意的還是無意的, 甚至 root 用戶也不行。
在這篇簡短的教程中, 我們一起來看看怎麼在實際應用中使用 chattr 命令, 來防止檔和目錄被意外刪除。
Linux中防止檔和目錄被意外刪除和修改
默認, chattr 命令在大多數現代 Linux 作業系統中是可用的。
預設語法是:
chattr [operator] [switch] [file]
chattr 具有如下操作符:
◈ 操作符 +, 追加指定屬性到檔已存在屬性中◈ 操作符 -, 刪除指定屬性◈ 操作符 =, 直接設置檔案屬性為指定屬性chattr 提供不同的屬性, 也就是 aAcCdDeijsStTu。 每個字元代表一個特定檔案屬性。
◈ a – 只能向檔中添加資料◈ A – 不更新檔或目錄的最後存取時間◈ c – 將檔或目錄壓縮後存放◈ C – 不適用寫入時複製機制(CoW)◈ d – 設定檔不能成為 dump 程式的備份目標◈ D – 同步目錄更新◈ e – extend 格式存儲◈ i – 檔或目錄不可改變◈ j – 設定此參數使得當通過 mount 參數:data=ordered 或者 data=writeback 掛載的檔案系統,在本教程中, 我們將討論兩個屬性的使用, 即 a、i , 這個兩個屬性可以用於防止檔和目錄的被刪除。 這是我們今天的主題, 對吧?來開始吧!
防止檔被意外刪除和修改
我先在我的目前的目錄創建一個file.txt文件。
$ touch file.txt
現在, 我將給檔應用 i 屬性, 讓檔不可改變。 就是說你不能刪除或修改這個檔, 就算你是檔的擁有者和 root 用戶也不行。
$ sudo chattr +i file.txt
使用lsattr命令檢查檔已有屬性:
$ lsattr file.txt
輸出:
----i---------e---- file.txt
現在, 試著用普通用戶去刪除檔:
$ rm file.txt
輸出:
# 不能刪除檔, 非法操作
rm: cannot remove 'file.txt': Operation not permitted
我來試試 sudo 特權:
$ sudo rm file.txt
輸出:
# 不能刪除檔, 非法操作
rm: cannot remove 'file.txt': Operation not permitted
我們試試追加寫內容到這個文字檔:
$ echo 'Hello World!' >> file.txt
輸出:
# 非法操作
bash: file.txt: Operation not permitted
試試 sudo 特權:
$ sudo echo 'Hello World!' >> file.txt
輸出:
# 非法操作
bash: file.txt: Operation not permitted
你應該注意到了, 我們不能刪除或修改這個檔, 甚至 root 用戶或者檔所有者也不行。
要撤銷屬性, 使用 -i 即可。
$ sudo chattr -i file.txt
現在, 這不可改變屬性已經被刪除掉了。 你現在可以刪除或修改這個檔了。
$ rm file.txt
類似的, 你能夠限制目錄被意外刪除或修改, 如下一節所述。
防止目錄被意外刪除和修改
創建一個 dir1 目錄, 放入檔 file.txt。
$ mkdir dir1 && touch dir1/file.txt
現在, 讓目錄及其內容(file.txt 檔)不可改變:
$ sudo chattr -R +i dir1
命令中,
◈ -R – 遞迴使 dir1 目錄及其內容不可修改◈ +i – 使目錄不可修改現在, 來試試刪除這個目錄, 要麼用普通使用者, 要麼用 sudo 特權。
$ rm -fr dir1
$ sudo rm -fr dir1
你會看到如下輸出:
# 不可刪除'dir1/file.txt':非法操作
rm: cannot remove 'dir1/file.txt': Operation not permitted
嘗試用 echo 命令追加內容到檔, 你成功了嗎?當然, 你做不到。
撤銷此屬性, 輸入:
$ sudo chattr -R -i dir1
現在你就能想平常一樣刪除或修改這個目錄內容了。
防止檔和目錄被意外刪除, 但允許追加操作
我們現已知道如何防止檔和目錄被意外刪除和修改了。 接下來, 我們將防止檔被刪除但僅僅允許檔被追加內容。 意思是你不可以編輯修改檔已存在的資料, 或者重命名這個檔或者刪除這個檔, 你僅可以使用追加模式打開這個檔。
為了設置追加屬性到檔或目錄, 我們像下面這麼操作:
針對文件:
$ sudo chattr +a file.txt
針對目錄:
$ sudo chattr -R +a dir1
一個檔或目錄被設置了 a 這個屬性就僅僅能夠以追加模式打開進行寫入。
添加些內容到這個檔以測試是否有效果。
$ echo 'Hello World!' >> file.txt
$ echo 'Hello World!' >> dir1/file.txt
查看檔內容使用cat命令
$ cat file.txt
$ cat dir1/file.txt
輸出:
Hello World!
你將看到你現在可以追加內容。 就表示我們可以修改這個檔或目錄。
現在讓我們試試刪除這個檔或目錄。
$ rm file.txt
輸出:
# 不能刪除檔'file.txt':非法操作
rm: cannot remove 'file.txt': Operation not permitted
讓我們試試刪除這個目錄:
$ rm -fr dir1/
輸出:
# 不能刪除檔'dir1/file.txt':非法操作
rm: cannot remove 'dir1/file.txt': Operation not permitted
刪除這個屬性, 執行下面這個命令:
針對文件:
$ sudo chattr -R -a file.txt
針對目錄:
$ sudo chattr -R -a dir1/
現在, 你可以想平常一樣刪除或修改這個檔和目錄了。
更多詳情, 查看 man 頁面。
man chattr
總結
保護資料是系統管理人員的主要工作之一。 市場上有眾多可用的免費和收費的資料保護軟體。 幸好, 我們已經擁有這個內置命令可以説明我們去保護資料被意外的刪除和修改。 在你的 Linux 系統中, chattr 可作為保護重要系統檔和資料的附加工具。