为什么用chattr + a删除目录内容?

在一个ext4文件系统上,我有一个base目录,它本身有三个airs, bc ,每个目录里面有不同的内容。

我设置了chattr +a base ,然后执行rm -r base 。 然后我发现abc还在那儿。 尼斯。 然后我发现他们都变得空虚了。 我哭了。

发生了什么?

我不明白你为什么对此感到惊讶。 目录只是一个文件。 目录项是指向文件的指针。 当你在基础上设置chattr +a ,你只会影响base,所以你不能从中删除条目。 目录abc也是文件,但是它们不受base的属性的影响,除非你不能从base删除它们。

chattr用于在Linux文件系统上更改文件属性。

所以,当你使用chattr +a它只会影响base目录本身以及它下面的子目录和文件。

为什么?

术语“目录”在计算机软件上下文中用来指用户看来是可以容纳文件和其他目录的容器文件夹

在Linux和其他类Unix操作系统中,系统上的所有内容都被视为一个文件,因此一个目录被认为只是一种特殊types的文件,它包含文件名列表 以及每个文件的相应索引节点,它 似乎包含的 目录 。 inode是文件系统上的一个数据结构,它存储除文件名和实际数据以外的所有关于文件的信息。

因此,把目录这个词当作术语目录文件的缩写是很有用的。 尽pipe在技术上可能是多余的,但是在引用目录内容时使用诸如文件和目录的expression是方便和常见的; 另一种select是文件系统对象

参考: http : //www.linfo.org/directory.html

当您使用rm -r base ,它会recursion运行(-r选项),并尝试删除所有文件和子目录及其内容,但无法删除基本目录及其下的目录和文件。 但它成功删除子目录下的文件。

至于(append)属性,可以在其下添加目录和文件,没有任何问题,但不能删除或重命名它们。 对我来说,它的行为完全像一个带有子目录和文件的文件。

为了保护目录及其下的所有子目录和文件,你应该使用-R选项来Recursively为每个和全部设置或添加属性。 正如这里logging: http : //linux.die.net/man/1/chattr

“a”属性只能应用于文件(一旦应用,它们只能以追加模式打开以进行写入)。 没有定义应用这个属性到目录的行为。