一個(gè)騷命令防止你的文件被誤刪除
文件是我們?cè)陔娔X里最珍貴的財(cái)富,我們經(jīng)常工作了老半天,然后出來(lái)的成果就只是一個(gè)文件而已。特別是程序員,我們寫了半天的代碼,結(jié)果也就是一個(gè)個(gè)代碼文件而已。
但是,我們都有過(guò)這樣慘痛的經(jīng)歷——工作了老半天,結(jié)果不小心把文件刪除了……
這時(shí)候,你的心情是怎樣的?痛苦?自責(zé)?無(wú)奈?
今天良許就給大家介紹一個(gè)命令,它將給你的重要文件加一把鎖,防止誤刪除或誤修改,為你的寶貝文件保駕護(hù)航!
chattr命令簡(jiǎn)介
這里我們需要使用到一個(gè)命令是:chattr ,這個(gè)命令在大部分的 Linux 發(fā)行版里都有,所以對(duì)于它的安裝就不贅述了。它的基本用法如下:
- $ chattr 操作符 屬性 文件名
對(duì)于操作符,有以下三種:
- + :給文件增加屬性
- - :去除文件屬性
- = :設(shè)置文件的僅有屬性
注意,這里講的屬性不是文件對(duì)應(yīng)的系統(tǒng)屬性,而是 chattr 給文件賦予的屬性。本文要講的屬性有以下兩個(gè):
- a - 允許給文件追加內(nèi)容
- i - 保護(hù)模式(不允許刪除或修改)
但是,它的屬性可以設(shè)置很多,有興趣的小伙伴可以去看下它的 man 手冊(cè)。
- $ man chattr
防止文件被誤刪除或修改
假如我們現(xiàn)在有個(gè)國(guó)寶級(jí)重要文件 file.txt ,現(xiàn)在我們使用 chattr 對(duì)它進(jìn)行保護(hù)。在這里,我們給文件增加 +i 屬性:
- $ sudo chattr +i file.txt
然后,我們可以使用 lsattr 命令查看它的屬性。類似的輸出如下:
- $ lsattr file.txt
- ----i---------e---- file.txt
現(xiàn)在,我們來(lái)嘗試一下,手賤去刪除那個(gè)文件:
- $ rm file.txt
- rm: cannot remove 'file.txt': Operation not permitted
咦?不允許刪除?難道權(quán)限不夠?
那好,我 sudo 一下!
- $ sudo rm file.txt
- rm: cannot remove 'file.txt': Operation not permitted
我 X ,居然還是不能刪除?
我們?cè)賮?lái)試一下,修改文件的內(nèi)容。
- $ echo 'hello world!' >> file.txt
- bash: file.txt: Operation not permitted
可以看出來(lái),依然不能對(duì)文件進(jìn)行修改了。

而且,即使你從 GUI 界面手動(dòng)去刪除這個(gè)文件,也還是不能耐他幾何。

所以,可以看出來(lái),現(xiàn)在這個(gè)文件得到了很好的保護(hù),既不能被刪除(各種方法都不行),也不能被修改。
那我們要怎么去除這個(gè)保護(hù)呢?很簡(jiǎn)單,只需加上 -i 這個(gè)選項(xiàng)。
- $ sudo chattr -i file.txt
現(xiàn)在,文件又恢復(fù)原樣了,我們想修改就修改,想刪除就刪除。
- $ echo 'Hello World!' >> file.txt
- $ cat file.txt
- Hello World!
- $ rm file.txt
防止文件夾被誤刪除或修改
上面講到的是保護(hù)文件,那么文件夾要如何保護(hù)呢?
其實(shí)也是一樣,使用 +i 這個(gè)選項(xiàng)。假如我們現(xiàn)在有個(gè) dir1 目錄,里面有個(gè) file.txt 文件。我們來(lái)對(duì)這個(gè)文件夾進(jìn)行保護(hù)。
- $ sudo chattr -R +i dir1
在這里,我們使用 -R 選項(xiàng)表示可以遞歸作用到目錄里所有的文件(包括子目錄)。
現(xiàn)在,我們同樣測(cè)試一下是否可以被刪除或修改。
- $ 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
所以與文件一樣,我們成功地對(duì)文件夾進(jìn)行了保護(hù)。
防止文件/目錄被刪除,但允許追加內(nèi)容
現(xiàn)在我們知道怎么防止文件/目錄被誤刪除或修改了,但是,假如我們不想要文件已有內(nèi)容被修改,但允許別人在文件末尾追加內(nèi)容,要怎么操作?
這時(shí)候我們就需要使用 +a 這個(gè)選項(xiàng)了。
對(duì)文件:
- $ sudo chattr +a file.txt
對(duì)目錄:
- $ sudo chattr -R +a dir1
現(xiàn)在,我們來(lái)確認(rèn)一下,文件是否可以被追加內(nèi)容。
- $ echo 'Hello World!' >> file.txt
- $ echo 'Hello World!' >> dir1/file.txt
我們?cè)偈褂?cat 命令去查看一下內(nèi)容:
- $ cat file.txt
- Hello World!
- $ cat dir1/file.txt
- Hello World!
可以看出來(lái),文件都是可以被追加的。

但是,file.txt 還有 dir1/file.txt 依然不能被刪除。
如果你想去掉可追加的屬性,可以使用 -a 這個(gè)選項(xiàng)。
對(duì)文件:
- $ sudo chattr -R -a file.txt
對(duì)目錄:
- $ sudo chattr -R -a dir1/
本文授權(quán)轉(zhuǎn)載自公眾號(hào)「良許Linux」。良許,世界500強(qiáng)外企Linux開(kāi)發(fā)工程師,公眾號(hào)里分享大量Linux干貨,歡迎關(guān)注!