如何在 Linux 系統中防止文件和目錄被意外的刪除或修改


原文: https://www.zcfy.cc/article/prevent-files-and-folders-from-accidental-deletion-or-modification-in-linux

有時,我會不小心的按下 SHIFT+DELETE來刪除我的文件數據。是的,我是個笨蛋,沒有再次確認下我實際准備要刪除的東西。而且我太笨或者說太懶,沒有備份我的文件數據。結果呢?數據丟失了!在一瞬間就丟失了。

這種事時不時就會發生在我身上。如果你和我一樣,有個好消息告訴你。有個簡單又有用的命令行工具叫chattrChange 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 – 不可刪除

在本教程中,我們將討論兩個屬性的使用,即 ai ,這個兩個屬性可以用於防止文件和目錄的被刪除。這是我們今天的主題,對吧?來開始吧!

防止文件被意外刪除和修改

我先在我的當前目錄創建一個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



微信公眾號:AutoML機器學習
MARSGGBO原創
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com



2020-03-06 12:46:20




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM