在Linux系統中,root用戶擁有最高權限,能夠修改刪除所有文件或者目錄。既然root用戶能刪除目錄或者文件,接下來我們就來看一下如何做到讓所有用戶(包括root用戶)不能夠刪除目錄或者文件。這是如何做到的呢?能夠讓所有用戶都不能刪除目錄或者文件,那么我們就來看看chattr這個命令的作用吧。這個命令能夠改變文件的屬性,能夠讓文件不能刪除。既然如此強大,那么就來看看如何做到的吧。為了能夠更好的看到效果,首先在Linux環境中准備了以下文件能夠更好的學習如何操作。
[root@localhost sharplee]# ls -l
total 40
drwxr-xr-x. 2 root root 77 Mar 7 09:00 backdir
-rw-r--r--. 1 root root 15606 Feb 26 10:12 jetty.sh
-rw-r--r--. 1 root root 0 Mar 2 09:06 myfile1
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile2
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile3
-rw-r--r--. 1 root root 0 Mar 2 09:35 myfile4
-rw-r--r--. 1 root root 0 Dec 10 2022 myfile6
-rw-r--r--. 1 root root 8 Mar 3 08:21 test
-rw-r--r--. 1 root root 28 Mar 6 08:52 test1.sh
-rw-r--r--. 1 root root 29 Mar 6 08:53 test2.sh
-rw-r--r--. 1 root root 11 Mar 6 08:53 test3.sh
如何讓文件不能刪除
通過執行以下命令讓jetty.sh文件不能被刪除或者不能被修改,這個命令的作用就是文件不能被修改通過任何方式,不能被刪除,也不能夠對這個文件創建鏈接,並且也不能重寫該文件。但是有一個前提是你必須擁有超級管理員的權限進行該操作或者取消該操作。
[root@localhost sharplee]# sudo chattr +i jetty.sh
OR
[root@localhost sharplee]# sudo chattr +i -V jetty.sh

通過以下命令來查看一個文件的屬性。
[root@localhost sharplee]# lsattr jetty.sh

接下來通過任何用戶進行文件刪除,看看文件是否能夠被刪除。這個時候為了能夠更好的看到效果我們把當前用戶切換到普通用戶上。
[sharplee@localhost ~]$ rm jetty.sh
[sharplee@localhost ~]$ sudo rm jetty.sh

接下來我們來看一下修改能不能行。

通過上面可以看出來,不能對該文件進行修改。接下來來看一看如何恢復成可刪除的呢?
[sharplee@localhost ~]$ sudo chattr -i jetty.sh

如何讓目錄不能刪除
使用-R參數,可以遞歸改變目錄的屬性以及目錄下文件的屬性。
[sharplee@localhost ~]$ sudo chattr +i -RV backdir/

目錄以及目錄以下的文件都被設置為不能刪除的了。

這個時候對目錄添加了不能刪除的屬性,目錄下的文件也都不能刪除了,接下來如何恢復為可以刪除的呢?
[sharplee@localhost ~]$ sudo chattr -i -RV backdir/

從上圖中可以看出,執行完命令之后,即可刪除相應的文件hello.txt或者/backdir目錄了。