如何在 Linux 系統中防止文件和目錄被意外的刪除或修改
有時,我會不小心的按下 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
掛載的文件系統,文件在寫入時會先被記錄在日誌中P
– project 層次結構s
– 安全刪除文件或目錄S
– 即時更新文件或目錄t
– 不進行尾部合併T
– 頂層目錄層次結構u
– 不可刪除
在本教程中,我們將討論兩個屬性的使用,即 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
可作為保護重要系統文件和數據的附加工具。
然後,這就是今天所有內容了。希望對大家有所幫助。接下來我將會在這提供其他有用的文章。在那之前,敬請期待。再見!
via: https://www.ostechnix.com/prevent-files-folders-accidental-deletion-modification-linux/
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive