防止在Linux中意外删除或者修改文件和文件夹
在Linux中,一个有用的命令行实用程序,称为“ chattr”,用于防止文件和文件夹在Linux中意外删除或者修改。
Chattr是“更改属性 Change Attribute ”的缩写,将某些属性应用于/删除Linux系统中的文件或者文件夹。
因此,没有人可以以root用户身份意外或者有意删除或者修改文件和文件夹。
使用Chattr防止在Linux中意外删除或者修改文件和文件夹
默认情况下,Chattr已预装在许多Linux操作系统中。
因此,让我们不必理会安装。
chattr命令的默认语法为:
chattr [operator] [switch] [filename]
chattr具有以下运算符:
- 运算符“ +”使所选属性添加到文件的现有属性中。
- 运算符“-”使它们被删除。
- 运算符“ =”使它们成为文件唯一的属性。
Chattr具有不同的属性,即aAcCdDeijsStTu。
每个字母将特定属性应用于文件,如下所示。
- 一个-仅添加,
- A-没有及时更新,
- c-压缩,
- C-写入时无副本,
- d-没有转储,
- D-同步目录更新,
- e-范围格式,
- 我-一成不变,
- j-数据日志,
- P-项目层次结构,
- s-安全删除,
- S-同步更新
- t-没有 tail合并,
- T-目录层次结构的顶部,
- 你-无法删除。
在本教程中,我们将讨论两个属性的用法,即a,i,它们用于防止删除文件和文件夹。
防止在Linux中意外删除文件
让我在当前目录中创建一个名为file.txt的文件。
$touch file.txt
或者,
$> file.txt
现在,我将应用“ i”属性,该属性使文件不可变。
这意味着即使我们是文件所有者和root用户,也无法删除,修改文件。
$sudo chattr +i file.txt
我们可以使用以下命令检查文件属性:
$lsattr file.txt
输出示例:
----i---------e---- file.txt
现在,尝试以普通用户或者sudo权限删除文件。
$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
即使我们尝试以GUI模式从文件管理器中删除文件,也无法删除它。
如我们在上述输出中所注意到的,即使以root用户身份,我们也无法删除或者修改文件。
要撤消属性,只需使用“ -i”开关,如下所示。
$sudo chattr -i file.txt
现在,不可变属性已被删除。
现在,我们可以根据需要修改或者删除文件。
$echo 'Hello World!' >> file.txt
$cat file.txt Hello World!
$rm file.txt
同样,我们可以限制目录,以防意外删除或者修改目录,如下一节所述。
防止在Linux中意外删除和修改文件夹
在该目录中创建一个名为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
我们将获得以下输出:
rm: cannot remove 'dir1/file.txt': Operation not permitted
尝试使用“ echo”命令在文件中添加一些内容。
要撤消属性,请运行:
$sudo chattr -R -i dir1
现在,我们可以照常删除或者修改此目录的内容。
防止意外删除文件和文件夹,但允许在Linux中进行追加操作
现在我们知道如何防止意外删除和修改文件和文件夹。
接下来,我们将防止删除文件和文件夹,但仅允许在追加模式下写入文件。
这意味着我们无法编辑,修改文件中的现有数据,重命名文件以及删除文件。
我们只能以追加模式打开文件进行写入。
要将添加模式归因设置为文件/目录,请执行以下操作:
对于文件:
$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
输出:
rm: cannot remove 'file.txt': Operation not permitted
让我们尝试删除该文件夹:
$rm -fr dir1/
或者尝试使用sudo:
$sudo rm -fr dir1/
输出示例:
rm: cannot remove 'dir1/file.txt': Operation not permitted
要删除属性,请运行以下命令:
对于文件:
$sudo chattr -R -a file.txt
对于目录:
$sudo chattr -R -a dir1/
现在,我们可以照常删除或者修改文件和文件夹。
有关更多详细信息,请参见手册页。
$man chattr