大家好,我是良許,
檔案是我們在電腦里最珍貴的財富,我們經常作業了老半天,然后出來的成果就只是一個檔案而已,特別是程式員,我們寫了半天的代碼,結果也就是一個個代碼檔案而已,
但是,我們都有過這樣慘痛的經歷——作業了老半天,結果不小心把檔案洗掉了……
這時候,你的心情是怎樣的?痛苦?自責?無奈?
今天良許就給大家介紹一個命令,它將給你的重要檔案加一把鎖,防止誤洗掉或誤修改,為你的寶貝檔案保駕護航!
chattr命令簡介
這里我們需要使用到一個命令是:chattr ,這個命令在大部分的 Linux 發行版里都有,所以對于它的安裝就不贅述了,它的基本用法如下:
$ chattr 運算子 屬性 檔案名
對于運算子,有以下三種:
+:給檔案增加屬性-:去除檔案屬性=:設定檔案的僅有屬性
注意,這里講的屬性不是檔案對應的系統屬性,而是 chattr 給檔案賦予的屬性,本文要講的屬性有以下兩個:
a- 允許給檔案追加內容i- 保護模式(不允許洗掉或修改)
但是,它的屬性可以設定很多,有興趣的小伙伴可以去看下它的 man 手冊,
$ man chattr
防止檔案被誤洗掉或修改
假如我們現在有個國寶級重要檔案 file.txt ,現在我們使用 chattr 對它進行保護,在這里,我們給檔案增加 +i 屬性:
$ 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
我 X ,居然還是不能洗掉?
我們再來試一下,修改檔案的內容,
$ echo 'hello world!' >> file.txt
bash: file.txt: Operation not permitted
可以看出來,依然不能對檔案進行修改了,

而且,即使你從 GUI 界面手動去洗掉這個檔案,也還是不能耐他幾何,

所以,可以看出來,現在這個檔案得到了很好的保護,既不能被洗掉(各種方法都不行),也不能被修改,
那我們要怎么去除這個保護呢?很簡單,只需加上 -i 這個選項,
$ sudo chattr -i file.txt
現在,檔案又恢復原樣了,我們想修改就修改,想洗掉就洗掉,
$ echo 'Hello World!' >> file.txt
$ cat file.txt
Hello World!
$ rm file.txt
防止檔案夾被誤洗掉或修改
上面講到的是保護檔案,那么檔案夾要如何保護呢?
其實也是一樣,使用 +i 這個選項,假如我們現在有個 dir1 目錄,里面有個 file.txt 檔案,我們來對這個檔案夾進行保護,
$ sudo chattr -R +i dir1
在這里,我們使用 -R 選項表示可以遞回作用到目錄里所有的檔案(包括子目錄),
現在,我們同樣測驗一下是否可以被洗掉或修改,
$ rm -rf dir1
$ sudo rm -rf dir1
rm: cannot remove 'dir1/file.txt': Operation not permitted
$ echo 'hello world!' >> dir1/file.txt
bash: file.txt: Operation not permitted
所以與檔案一樣,我們成功地對檔案夾進行了保護,
防止檔案/目錄被洗掉,但允許追加內容
現在我們知道怎么防止檔案/目錄被誤洗掉或修改了,但是,假如我們不想要檔案已有內容被修改,但允許別人在檔案末尾追加內容,要怎么操作?
這時候我們就需要使用 +a 這個選項了,
對檔案:
$ sudo chattr +a file.txt
對目錄:
$ sudo chattr -R +a dir1
現在,我們來確認一下,檔案是否可以被追加內容,
$ echo 'Hello World!' >> file.txt
$ echo 'Hello World!' >> dir1/file.txt
我們再使用 cat 命令去查看一下內容:
$ cat file.txt
Hello World!
$ cat dir1/file.txt
Hello World!
可以看出來,檔案都是可以被追加的,

但是,file.txt 還有 dir1/file.txt 依然不能被洗掉,
如果你想去掉可追加的屬性,可以使用 -a 這個選項,
對檔案:
$ sudo chattr -R -a file.txt
對目錄:
$ sudo chattr -R -a dir1/
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/59679.html
標籤:Linux
下一篇:N46期第二周作業
